Мне нужна икосфера со всеми краями одинаковой длины. В настоящее время я генерирую один, начиная с икосаэдра, а затем линейно интерполирую каждый треугольник. Во всех учебных пособиях, которые мне удалось найти, использовалась одна и та же линейная интерполяция. Кто-то позже предложил просто использовать икосферу из блендера, которая работает, хотя также использует линейную интерполяцию ...

Итак, у кого-нибудь есть хороший урок о том, как создать икосферу и убедиться, что все стороны равны? (Было бы также хорошо, если бы вы знали программу, которая может это сделать и экспортировать как .obj или что-то в этом роде.)

1
The Oddler 20 Окт 2012 в 16:06
Да ладно, это предпочтительный язык. Это скорее общий вопрос программирования / алгоритма, но мне пришлось добавить тег, поэтому я добавил свой предпочтительный язык. Если у вас есть лучшее предложение для тегов, сообщите об этом.
 – 
The Oddler
20 Окт 2012 в 16:32
Лучшим тегом будет [algorithm]
 – 
John Dvorak
20 Окт 2012 в 16:38
В чем проблема с линейной интерполяцией? Это хорошо помогает сохранить длину кромки (поэтому используется в общих 3D-программах).
 – 
mrvux
20 Окт 2012 в 16:39
Проблема в том, что этого недостаточно. Я поместил один и тот же шестиугольник в каждую точку, чтобы получить красивую сетку на сфере, которая работает очень хорошо, хотя вы можете ясно видеть, что вокруг пятиугольников они ближе друг к другу. Изображение: i.imgur.com/DLRxE.png
 – 
The Oddler
20 Окт 2012 в 16:50

1 ответ

Лучший ответ

Невозможно получить произвольно точную сферу из равносторонних треугольников. Если вам нужны равносторонние треугольники, лучшее, что вы можете получить, - это икосаэдр (который, вероятно, у вас уже есть). Причина называется "угловой дефект":

Угловой дефект составляет 360 градусов как сумму углов при вершине вокруг вершины. Любой многогранник должен иметь общий дефект вершин, равный 720 градусам:

  • тетраэдр: 4 * 180 градусов
  • октаэдр: 6 * 120 градусов
  • куб: 8 * 90 градусов
  • икосаэдр: 12 * 60 градусов
  • додекаэдр: 20 * 36 градусов

Если пять равносторонних треугольников встречаются в вершине, они накапливают 36 градусов дефекта. Если шесть равносторонних треугольников встречаются в вершине, они не вносят никакого вклада в дефект.

Если шесть равносторонних треугольников пересекаются в вершине, они должны образовывать либо

  • самолет или
  • складка (край) или
  • седло.

Существует многогранник под названием пентакис икосаэдр с 32 вершинами, но если вы сделаете его из равносторонних треугольников, вы получите невыпуклый многогранник.

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

5
John Dvorak 20 Окт 2012 в 17:42
Ну, это отстой, хотя объясняет, почему я не смог его найти ... Спасибо, мне просто придется с этим смириться. Спасибо!
 – 
The Oddler
20 Окт 2012 в 17:24
Update: это применимо, только если вы заботитесь о нормалях поверхности. Если вы этого не сделаете (что не в этом случае), вы можете использовать мозаику октаэдр-тетраэдр. Однако это не считается интерполяцией (и нарушает нормали поверхности).
 – 
John Dvorak
27 Ноя 2012 в 09:17