ПрограммированиеФорумГрафика

Координаты на сфере, составленной из треугольников

#0
10:01, 28 авг 2013

Всем доброго дня!
Возник у меня такой вопрос. Пусть у нас есть сфера, составленная из треугольников:
сфера из треугольников | Координаты на сфере, составленной из треугольников

Пытаюсь сообразить, каким образом можно задать координаты каждому отдельному треугольнику.
Основная сложность - в поиске соседей для каждого треугольника. Я думал над различными вариантами, например, можно попробовать "развернуть" сферу в один большой треугольник, подразделенный на много маленьких, и составить правила, по которым можно будет найти для каждого треугольника 3 его соседа.

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

Надеюсь, что кто-нибудь сможет подсказать мне что-то дельное по данному вопросу.

Интересует также поиск пути на подобной сфере с учетом направлений движения вдоль треугольников, но если найти способ определения соседей для каждого треугольника, в этом проблем не будет.

#1
11:57, 28 авг 2013

Самый очевидный способ задания координат на сфере, неожиданно, - сферические =)
А соседей для треугольника можно определить, если в каждом треугольнике ссылки на этих соседей хранить.
Тут что-то похожее обсуждалось:
http://www.gamedev.ru/code/forum/?id=67714

#2
13:41, 28 авг 2013

Спасибо за ссылку, полезная для меня информация! :-)

#3
14:01, 28 авг 2013

А нет ли какого простого способа как раз определять этих соседей при построении сферы? То есть, написать программу итеративного разбиения треугольников - несложно, а как определить, какие треугольники соседствуют с какими?

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

#4
14:43, 28 авг 2013

Deirel
> А нет ли какого простого способа как раз определять этих соседей при построении
> сферы? То есть, написать программу итеративного разбиения треугольников -
> несложно, а как определить, какие треугольники соседствуют с какими?
> В голову приходит только вариант "в лоб" - брать каждый треугольник, брать три
> луча снаружи его сторон и, рекурсивно обходя структуру сферы, определять
> соседей.
> Наверное, так и стоит делать, если учесть, что это произойдет один раз после
> построения - временные затраты получатся не слишком большими.
Для каждого треугольника храни ссылку на 3-х соседей (если важен переход через вершину, то 12). Для исходного тетраэдра задай вручную. Далее для каждого треугольника: делим его на 4, задаем ссылки у порожденных треугольников исходя из ссылок разделяемого треугольника. При делении ты сам задаешь какой треугольник с каким соседствует. Нарисуй на бумажке - сразу станет понятно.

#5
18:28, 28 авг 2013

Поискал у себя, нашел древний класс для работы с координатами на сфере, сделанной из разбиения икосаэдра:

+ Код

Код старый, поэтому говнокода хватает, но делает что надо.

#6
23:14, 28 авг 2013

Всем спасибо, я, как всегда, все усложнил =) Теперь все понятно))

}:+()___ [Smile] спасибо отдельное, что приложил усилия, нашел класс)

ПрограммированиеФорумГрафика

Тема в архиве.