2009-02-18 2 views
8

Я задал несколько вопросов здесь и увидел эту геометрическую форму, упомянутую несколько раз среди других геодезических фигур, но мне любопытно, как именно я могу генерировать один из точек xyz?Как создать разделенный икосаэдр?

+2

Существует учебник [здесь] (http://www.donhavey.com/blog/tutorials/tutorial-3-the-icosahedron-sphere/). –

ответ

9

Here - одна из ссылок, которую я использовал для разделенных икосаэдров, основанных на Красной книге OpenGL. BSD-лицензия source code на мое приложение iPhone Molecules содержит код для генерации простых икосаэдров и их загрузку в объект буфера вершин для OpenGL ES. Я еще не включил подразделение для улучшения качества рендеринга, но это в моих планах.

+0

Это было долгое время, но я считаю, что это код, который я основал. Это получилось неплохо. В итоге у меня был трехмерный теннисный мяч, который исказился при ударе (невозможно сделать с gluSphere). –

+2

Что делает этот код: Добавление простой икосферы, разделение, затем нормализация - не дает ровно равномерного распределения (треугольники будут немного меньше, чем ближе к исходным вершинам). – ideasman42

10

Есть учебник here.

Суть идеи состоит в том, чтобы начать с икосаэдра (который имеет 20 треугольных граней) и многократно разделить каждую треугольную грань на более мелкие треугольники. На каждом этапе каждая новая точка смещается радиально, поэтому это правильное расстояние от центра.

Количество этапов будет определять, сколько треугольников сгенерировано, и, следовательно, как близко полученная сетка будет к сфере.

+0

Теперь добавлено резюме связанной статьи (я не думаю, что я знал это правило 6 лет назад ...) –

+0

извините, это был законченный ответ из очереди просмотра - я даже не заметил '09 год печать на ответ. Спасибо за обновление. – LittleBobbyTables

7

Чтобы обладать сферой, большинство людей подразделяют точки линейно, но это не создает округлую форму.

Для округлой тесселяции вращайте две точки через ряд оборотов.

  1. Поворот второй точки вокруг г (по г угла точки 1) до 0
  2. вращения второй точки вокруг у (по у угла точки 1) до 0 (это логически ставит точку 1 на Северный полюс).
  3. Поверните вторую точку вокруг z до 0 (это логически помещает точку 1 на плоскость x/y, которая теперь становится единичным кругом).
  4. Найдите полуугольник, вычислите x и y для новой 3-й точки, пункт 3.
  5. Выполните встречные вращения в обратном порядке для шагов 3), 2) и 1), чтобы установить третью точку на его назначения.

Существуют также некоторые математические соображения для значений вблизи каждого из ближайших местоположений, таких как северный и южный полюс, а также самые правые и левые и самые левые и самые левые позиции , поэтому сначала проверьте их и выполните дополнительное вращение на pi/4 (45 градусов), если они находятся в этих местах. Это предотвращает излишние вычисления математических библиотек с плавающей запятой и создает нестандартные значения для atan2() и других функций триггера.

Надеюсь, это поможет! :-)

Смежные вопросы