2015-05-27 2 views
1

Учитывая 3D-геометрию, которая может иметь перевернутые нормали (но в остальном она действительна), как бы вы нашли самые верхние грани/многоугольники, которые не имеют других над ними?Поиск самой верхней грани/многоугольника (ов) в 3D-геометрии

Например, находя оранжевый лица в следующих случаях (показывая срез геометрии): enter image description here

При существующем положении вещей, мой текущий (крайне сложным) подход заключается в следующем:

  1. Прокрутите все вершины и найдите максимальное значение Y (высота) (т. Е. Найдите самую высокую точку в геометрии - ничего не может быть выше)
  2. Проденьте все полигоны и соберите те, у которых есть вершина с максимальным значением Y (т. е. все самые высокие ces, хотя некоторые из них могут быть поверх других - см. изображение выше)
  3. Пронумеруйте собранные полигоны и найдите один с наибольшим абсолютным Y нормальным (т.е. найти полигон, который имеет самый незначительный угол от горизонтали - от того, что я могу видеть, это всегда будет на вершине все остальное в действительной геометрии)

Помимо того, что не уверен, если это работает даже при всех обстоятельствах, я d быть заинтересованным, чтобы увидеть, есть ли более эффективный способ приблизиться к этому в псевдокоде или JavaScript.

Если это помогает, 3D геометрия хранится в виде массива многоугольников, которые сами по себе массив точечных массивов:

[[[x,y,z], [...]], [[x,y,z], ...], ...] 
+0

Я думаю, вам нужно определить, что это значит для лица * F * на "нет других выше [это]." Если вы имеете в виду, что нет другого лица * F '*, которое содержит точку, которая строго выше любой точки на * F *, то ваш третий шаг не нужен. Если вы имеете в виду что-то еще, «поверх всего остального», тогда это необходимо прописать, чтобы убедиться, что вы соответствуете вашему алгоритму, соответствует вашему интуитивному определению. –

+0

Хорошая точка. «Нет других над ним», вероятно, это человеческий способ описать его, хотя я имею в виду, что если вы проецировали линию прямо с каждой грани, связанной с самой высокой вершиной Y, эта линия не ударила бы по другому лицу (т.е. четкая прямая видимость неба). На практике это должно исключать случаи, подобные второму примеру на приведенном выше изображении, где есть 3 лица, которые связаны с самой высокой вершиной (1 обращена к зрителю), но одна из этих граней находится под истинным верхом (в оранжевом), а другой - вертикальный (нормаль не будет выше горизонтали). –

+0

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

ответ

0

Я думаю, что понятие TOPMOST не так ясно. Только те две низкие кромки, падающие на горизонтальное основание, имеют «ясная линия прямой видимости на небе».


      TopMostCex