Ich habe einen 3D-Datensatz einer Oberfläche, der nicht der Graph einer Funktion ist. Die Daten sind nur ein paar Punkte in 3D, und das Einzige, woran ich denken konnte, war scatter3
in Matlab zu versuchen. Surf
funktioniert nicht, da die Oberfläche kein Graph einer Funktion ist.
Die Verwendung von scatter3
ergab ein nicht so optimales Ergebnis, da es keine Perspektive / Schattierung irgendeiner Art gibt.
Irgendwelche Gedanken? Es muss nicht Matlab sein, aber das ist meine Quelle zum Plotten.
Um eine Vorstellung von der Art der Oberfläche zu bekommen, die ich habe, betrachten Sie die vier Bilder:
Das erste ist ein 3D-Konturdiagramm, das zweite ist ein Schnitt in einer Ebene {z = 1.8} der Kontur. Mein Ziel ist es, alle roten Bereiche aufzuheben. Ich habe eine Methode, dies für jede Scheibe {z = k} zu tun. Dies ist die dritte Handlung, und ich mag, was ich hier sehe.
Wenn ich dies über z gebe, ergibt das eine Fläche, die die 4. Kurve ist, die etwas laut ist (obwohl ich Ideen habe, das Rauschen zu reduzieren ...). Wenn ich nur die schwarze Fläche mit scatter3 ohne die Kontur zeichne, bekomme ich nur einen schwarzen ununterscheidbaren Fleck, aber für jede Scheibe bekomme ich eine glatte Kurve, und ich habe bemerkt, dass die Kurven ziemlich glatt variieren, wenn ich z justiere.
Einige Feinabstimmungen ergeben einen viel besseren vierten Plot, aber selbst wenn ich weiß, dass der 4. Plot kein Rauschen hat, ist das Ergebnis mit scatter3
ein schwarzer unverständlicher Blob, wenn er geplottet wird allein und nicht auf der 3D-Kontur. Ich möchte ein schönes Bild von der gesamten Oberfläche erhalten, die nicht über dem 3D-Konturdiagramm aufgetragen ist.
**** In der Tat, nur um zu vergleichen und zu zeigen, wie schlecht scatter3
für Oberflächen ist, selbst wenn Sie genaue Punkte auf einer Kugel hatten und scatter3
verwendet hätten, wäre das Ergebnis ein schwarzer Fleck und würde nicht sehe sogar wie eine Kugel aus ****
Kann POV-Ray damit umgehen? Ich habe es nie benutzt ...
wollte nur diese Frage weiterverfolgen. Ein schneller und schöner Weg dies in Matlab zu tun ist folgender:
Betrachten Sie die Funktion d (x, y, z), die als Mindestabstand von (x, y, z) zu Ihrem Datensatz definiert ist. Stellen Sie sicher, dass d (x, y, z) in einem Raster definiert ist, das den Datensatz enthält, den Sie grafisch darstellen möchten.
Verwenden Sie dann isosurface
, um einen (einige) countour (s) von d (x, y, z) zu plotten. Für mich war das Zeichnen der Kontur 0.1 von d (x, y, z) genug: Matlab wird eine gut aussehende Oberfläche aller Punkte innerhalb einer Entfernung von 0.1 des Datensatzes mit guter Beleuchtung und allem darstellen.
Wenn Sie eine Triangulation Ihrer Punkte haben, könnten Sie die Funktion trisurf
in Betracht ziehen. Ich habe das zuvor verwendet, um geschlossene Oberflächen zu erzeugen, die keine Grenzen haben (wie Polyeder und Kugeln). Der Nachteil ist, dass Sie eine Triangulation Ihrer Punkte generieren müssen. Dies ist möglicherweise nicht ideal für Ihre Bedürfnisse, aber es ist definitiv eine Option.
BEARBEITEN: Wie @High Performance Mark vorschlägt, könnten Sie versuchen, delaunay
zu verwenden, um eine Triangulation in Matlab zu erzeugen
In povray kann ein Blob-Objekt verwendet werden, um eine sehr dichte Ansammlung von Punkten anzuzeigen, wenn Sie sie zu Zentren von Kugeln machen.
Ссылка
Wenn Sie in der Lage sein möchten, Scheiben von "Raum" zu erstellen und sie gemäß Ihren Daten farbig zu machen, dann könnte das Objektmuster (basierend auf einem deklarierten Blob-Objekt) möglicherweise den Zweck erfüllen.
Povray hat auch eine Möglichkeit, mit df3-Dateien zu arbeiten, mit denen ich noch nie gearbeitet habe, aber dieser Benutzer scheint etwas Ähnliches wie Ihre Visualisierung gemacht zu haben. Ссылка