Разделение трехмерных углов на равные величины - PullRequest
1 голос
/ 27 сентября 2011

Скажем, у вас есть 2-мерный объект, вы можете легко разделить его на 15 градусов, просто вращая вокруг центра с шагом 15 градусов.

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

хотя выполнение p * r * y для каждого будет работатьэто было бы довольно произвольно и иметь огромное количество совпадений.Мне бы тоже очень хотелось получить кватернионное решение.

Я делаю это для проекта видеоигры, над которым я сейчас работаю, по сути, это симулятор полета старой школы, который, хотя 3d в игровом процессе отображается как 2d спрайты.Я ищу простой способ визуализировать все возможные углы модели моего самолета с одинаково разнесенными углами, включая каждый ортогональный.

1 Ответ

2 голосов
/ 06 марта 2012

Существуют различные способы сделать это; решение не определяется однозначно из предоставленной информации. Также обратите внимание, что фраза «все возможные углы» вводит в заблуждение, поскольку существуют бесконечные углы.

Тем не менее, если под «трехмерным углом» вы в буквальном смысле подразумеваете телесный угол (в единицах стерадианов), то платоновое тело разделит сферу на равные телесные углы. (Технически вы хотите сферические многогранники , но они "почти" одинаковы в том смысле, что мы можем взять многогранное решение и "расслабить" его.)

Учитывая ваше условие, что вы хотите, чтобы " [включал] каждый ортогональный [угол] " (что должен быть некоторый триплет видов, которые ортогональны друг другу), мы с сожалением отмечаем что существует только одно платоновое тело, которое удовлетворяет этому, а именно октаэдр:

enter image description here

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

  1. Для каждой грани в октаэдре вы можете создать новый вид в центре этой грани (составить ее). Результатом будет представление с каждой из вершин, как показано на в этом оригами с 4 видами (как ни странно, лучшая картинка, которую я смог найти). Таким образом, в дополнение к ортогональным углам, вы получаете 8 углов между каждой осью вида (±1,±1,±1). Уменьшает количество просмотров до приемлемого размера.

  2. Если вы хотите больше видов, вы можете сделать что-то вроде построения геодезического купола, за исключением того, что вы начинаете с октаэдра, а не икосаэдра. В первом примере мы подразделяем треугольные грани, каждая на «тройку» делительной силы, чтобы получить «двухчастотную октаэдрическую геодезическую сферу».

enter image description hereenter image description here*

* исходная ссылка

Алгоритм : взять математическое среднее значение каждой смежной вершины для получения новых вершин.

Это может не совсем разделить углы, но это будет довольно близко. Если вы хотите еще больше «равенства» телесных углов, см. Ссылку для примера «трехчастотной октаэдрической геодезической сферы».

Алгоритм : В первом приближении вы можете разделить угол на угол, взяв векторы (A+2B)/3 или наоборот. Кроме того, если вы стремитесь к предельной точности, а не к явному вычислению уравнений, вы можете использовать формулу телесного угла для тетраэдра в качестве меры точности и выполнить релаксацию для первоначального предположения, при котором вы медленно возмущаетесь трисекции в направлении или от начала координат.

Кроме того, результаты поиска в Google немного математически плотны, но вы можете найти некоторое использование из сферических многогранников равной площади .

...