Frage

Ich möchte Punkte in einem 3D-Diagramm darstellen und ein Netz erstellen, das nicht rechteckige Daten verarbeiten kann.Genauer gesagt sind meine Daten

data.dat

-1 0 0
-1 1 0
0 -1 0
0 0 0
0 1 0
1 -1 0
1 0 0

und meine Gnuplot-Datei

plot.plt

set dgrid3d 3,3
splot 'data.dat' w l
pause -1

Bedauerlicherweise dgrid3d scheint meine Daten rechteckig zu machen und ein rechteckiges Gitter (eigentlich ein quadratisches Gitter) wird gezeichnet.Gibt es eine Möglichkeit, einen eingeschränkten Bereich meiner Daten zu zeichnen?Idealerweise möchte ich das plotten orthogonale konvexe Hülle meiner Punktemenge.

War es hilfreich?

Lösung

Sie haben mehrere Möglichkeiten, so etwas zu tun – leider erfordern sie alle etwas Arbeit Ihrerseits.

Zunächst ist es wichtig, dies zu beachten gnuplot kann nicht-rechteckige Netze für die Oberflächendarstellung verarbeiten (obwohl Sie für dieses Beispiel nur eine rechteckige Fläche benötigen).Für die Oberflächendarstellung sieht die Datendatei so aus (beachten Sie die leeren Datensätze):

x11 y11 z11
x21 y21 z21
x31 y31 z31
...

x12 y12 z12
x22 y22 z22
x23 y23 z23
...

Es entstehen dann Vierecke.In diesem Fall würde das erste Viereck aus den Punkten (x11,y11),(x21,y21),(x12,y12),(x22,y22) gebildet werden.Das zweite Viereck würde aus (x21,y21),(x31,y31),(x22,y22),(x23,y23) usw. gebildet.Anhand Ihrer Punktemenge können Sie also ganz einfach ein „rechteckiges Netz“ erstellen, das alle Ihre Datenpunkte enthält.Es wird zwar keine gleichmäßigen Abstände geben, aber das ist im Großen und Ganzen kein Problem.Jetzt müssen wir herausfinden, wie man Punkte entfernt, damit Gnuplot sie nicht darstellt.Das ist der „Trick“.Sie können eine bestimmte Zeichenfolge in der Datendatei als „fehlende Daten“ markieren (set datafile missing "string").In diesem Fall zeichnet gnuplot diesen Punkt nicht auf, verfolgt aber dennoch die Koordinaten der fehlenden Daten, um die Oberfläche zu generieren.

Am Ende sieht Ihre Datendatei also etwa so aus:

x11 y11 ?
x21 y21 ?
x31 y31 z31
...

x12 y12 ?
x22 y22 z22
x23 y23 z23
...

und das Skript, um es zu plotten, wäre:

set datafile missing '?'
set surf
set view map #Not sure about this...depends on the view you want
splot "mydata.dat" u 1:2:3 w lines

Wenn Sie möchten, dass Gnuplot die „orthogonale konvexe Hülle“ berechnet, haben Sie dort meiner Meinung nach Pech.

DER EINFACHE WEG

Beachten Sie außerdem, dass dieses Problem erheblich einfacher wird, wenn Sie ein einfarbiges Objekt im 2D-Raum möchten (wie das Bild auf dem von Ihnen geposteten Wikipedia-Link).Wenn Sie eine Datendatei nur mit den Eckpunkten des Objekts erstellen können, das Sie zeichnen möchten (in der Reihenfolge, dass (x1,y1) eine Verbindung zu (x2,y2) eine Verbindung zu (x3,y3)... herstellt), können Sie zeichnen diese Datendatei als:

set fillstyle #However you want the object to appear
plot "datafile.dat" u 1:2 with filledcurves closed
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top