Тест на грани тетраэдра - PullRequest
3 голосов
/ 14 июля 2011

При тестировании, когда точка соответствует тетраэдру, есть 4 случая. Он внутри тетраэдра, он ближе всего к вершине, ближе к ребру или ближе к лицу. Вот диаграмма этого в 2D, http://i.imgur.com/AmYNO.png. Например, точка P находится ближе всего к вершине A, когда произведение точек P - A и B - A, C - A и D - A все отрицательно. Если бы вы растянули треугольную грань в направлении нормали, чтобы создать призму, точка была бы ближе к этой грани, если бы она содержалась в этом пространстве. Это было бы ближе всего к краю, если бы не было ни в одном из этих случаев.

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

1 Ответ

3 голосов
/ 14 июля 2011

Вы имеете в виду, ближайший к определенному ребру или ближайший к ребру в целом (в отличие от вершины или плоскости)?

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

Подробно, предположим, что мы хотим проверить, является ли точка P ближайшей к краю AB , которая лежит между гранями ABC и ПЛОХО (вершины приведены по часовой стрелке). Тогда четыре теста:

  • ( P - A ) · ( A - B ) <0 </li>
  • ( P - B ) · ( B - A ) <0 </li>
  • ( P - A ) · (( B - C ) × ( A - C ) × ( A - B )) <0 </li>
  • ( P - B ) · ((* A - D ) × ( B - D ) × ( B - A )) <0 </li>

(Интересно, есть ли более дешевый способ проведения третьего и четвертого тестов? Если вам известен один, дайте мне знать!)

...