Как создать подразделенный икосаэдр? - PullRequest
9 голосов
/ 18 февраля 2009

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

Ответы [ 3 ]

11 голосов
/ 18 февраля 2009

Здесь есть учебник .

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

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

9 голосов
/ 18 февраля 2009

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

7 голосов
/ 18 марта 2011

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

Для округленного тесселяции поверните две точки через серию поворотов.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...