Weiß jemand, wie man einen Algorithmus erstellt, mit dem die Figur genau wie im Bild erstellt werden kann, wenn eine Reihe spezifischer Punkte (3D-Array) angegeben wird?
Weiß jemand, wie man einen Algorithmus erstellt, mit dem die Figur genau wie im Bild erstellt werden kann, wenn eine Reihe spezifischer Punkte (3D-Array) angegeben wird?
Antworten:
Nach dem Kampf hierher zu kommen, aber da es noch keine akzeptierte Antwort gibt und zu sehen ist, dass @Luke sich weigert, den Repräsentanten zu bekommen, den er verdient, hier eine kurze Zusammenfassung des Links, den er bereitgestellt hat.
Der vollständige Algorithmus ist also hier verfügbar:
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
Die Idee ist, Ihr Netz mit einer einfachen Methode zu booten, die Ihnen eine Kugel mit 20 Flächen gibt, und diese dann zu verfeinern, bis Sie zufrieden sind.
Sie beginnen mit einem Ikosaeder . Wie der Wikipedia-Artikel sagt, können Sie die Eckpunkte erhalten, indem Sie drei identische und orthogonale Rechtecke zeichnen. Sie haben 3 Rechtecke mit jeweils 4 Ecken -> 12 Eckpunkte.
Wikipedia Abbildung:
Zum Beispiel sind die Z-Planpunkte (a, b sind die Rechtecklängen):
Jetzt müssen Sie noch die 20 Gesichter finden. Dies bleibt dem Leser als Übung überlassen: p
Nachdem Sie eine grundlegende Kugel haben, möchten Sie möglicherweise Polygone hinzufügen. Sie tun dies mit diesem einfachen Algorithmus:
for each iteration:
# each iteration multiplies by 4 the number of faces
for each edge at the current iteration:
split the edge in two
replace the middle point on the sphere
Um den Mittelpunkt zu finden, nehmen wir an, dass wir die Einheitskugel (Mittelpunkt (0, 0, 0), Radius 1) erstellen möchten.
middlePoint(p1, p2):
middle = Point((p1.X + p2.X / 2), # same for y, z)
radius = sqrt(middle.X^2, middle.Y^2, middle.Z^2)
return Point(middle.X / radius, # same for y, z)
Bei jeder Iteration müssen wir möglicherweise die Gesichter rekonstruieren, aber es ist ziemlich einfach. Jedes Gesicht ist in vier Teile unterteilt: