Wie erzeuge ich ein untergliedertes Ikosaeder?

8

Ich habe hier einige Fragen gestellt und diese geometrische Form einige Male unter anderen geodätischen Formen erwähnt, aber ich bin gespannt, wie genau ich einen um einen Punkt xyz erzeugen würde?

    
Tom J Nowell 18.02.2009, 13:47
quelle

3 Antworten

9

Hier ist eine Referenz, die ich für unterteilte Ikosaeder verwendet habe, basierend auf dem OpenGL Rotes Buch. Der BSD-lizenzierte Quellcode für meine iPhone-Anwendung Moleküle enthält Code zum Erzeugen einfacher Ikosaeder und zum Laden dieser in ein Vertex-Buffer-Objekt für OpenGL ES. Ich habe noch keine Unterteilung eingeführt, um die Qualität des Renderings zu verbessern, aber es ist in meinen Plänen.

    
Brad Larson 18.02.2009, 13:55
quelle
10

Es gibt ein Tutorial hier .

Die wesentliche Idee besteht darin, mit einem Ikosaeder (mit 20 dreieckigen Flächen) zu beginnen und jede dreieckige Fläche wiederholt in kleinere Dreiecke zu unterteilen. In jeder Phase wird jeder neue Punkt radial verschoben, so dass der korrekte Abstand von der Mitte eingehalten wird.

Die Anzahl der Stufen bestimmt, wie viele Dreiecke erzeugt werden und wie nahe das resultierende Netz einer Kugel entspricht.

    
Mark Pattison 18.02.2009 13:50
quelle
7

Um eine Kugel zu tesselieren, unterteilen die meisten Menschen die Punkte linear, aber das erzeugt keine abgerundete Form.

Drehen Sie für eine runde Tesselation die zwei Punkte durch eine Reihe von Rotationen.

  1. Drehen Sie den zweiten Punkt um z (um den z-Winkel von Punkt 1) auf 0
  2. Drehe den zweiten Punkt um y (um den y-Winkel von Punkt 1) auf 0 (dies bringt logisch Punkt 1 an den Nordpol).
  3. Drehe den zweiten Punkt um z auf 0 (dies bringt logisch Punkt 1 auf die x / y-Ebene, die nun ein Einheitskreis wird).
  4. Finde den Halbwinkel, berechne x und y für den neuen 3. Punkt, Punkt 3.
  5. Führen Sie die Counter-Rotationen in umgekehrter Reihenfolge für die Schritte 3), 2) und 1) durch, um den 3. Punkt an seinem Zielort zu positionieren.

Es gibt auch einige mathematische Überlegungen für Werte in der Nähe jeder der nahe 0 Positionen, wie zum Beispiel der Nord- und Südpol, sowie die rechte und die äußerste linke und vorderste und hinterste Position, also check diese zuerst und führen eine zusätzliche Rotation um pi / 4 (45 Grad) durch, wenn sie sich an diesen Orten befinden. Dies verhindert, dass Fließkomma-Mathebibliotheken ausflippen und wild außer-character-Werte für atan2 () und andere trigonometrische Funktionen erzeugen.

Hoffe, das hilft! :-)

    
Rick C. Hodgin 18.03.2011 12:04
quelle

Tags und Links