1) нахождение пересечения луча с плоскостью, в которой лежит многоугольник.
2) Проверка принадлежности точки пересечения многоугольнику.
1)Пусть плоскость задана общим уравнением
Ax+By+Cz+D=0
Где N=(A, B,C) -нормальный вектор плоскости.
Заменяя в уравнении плоскости величины x,y и z их выражениями (*),
Получаем линейное уравнение относительно t:
Разрешая которое, находим, что
Если a=Al+Bm+Cn обращается в нуль, a=Al+Bm+Cn=0, то луч параллелен плоскости, и, следовательно, не пересекает ее.
В случае t*<0 луч не пересекает плоскости.
Если t*>0 то координаты точки пересечения вычисляются по формулам
2) Решение основано на нахождении пересечения с треугольником. Если у многоугольника n вершин (n>3), то он будет представляться как набор из n-2 треугольников. N — вектор нормали к плоскости, в которой лежит рассматриваемый многоугольник. Точка Р задается как
(4)
Точка Р будет внутри треугольника
если а>=0, b>=0, и a + b<= 1
В равенство (4) состоит из 3 равенств:
(5)
Решение существует и единственно. Чтобы упростить данную систему, можно спроектировать многоугольник на одну из координатных плоскостей.
|
|
В качестве направления проектирования рекомендуется брать ту ось, которой соответствует наибольшая координата у нормали.
Пусть
Пусть (u,v) координаты вектора в плоскости, на которую был спроектирован многоугольник. Тогда векторы будут иметь следующие координаты:
Система (5) упроститься до системы:
Решением являются:
2*) Выпуклый n-угольник однозначно задается набором своих вершин
Будем считать, что вершины многоугольника занумерованы так, что соседние по номеру вершины примыкают к одной стороне. Обозначим через (x*,y*,z*) точку пересечения заданного луча с плоскостью Ax+By+Cz+D=0, в которой лежит рассматриваемый многоугольник.
Вследствие того, что нормальный вектор N=(A, B,C) плоскости, несущей заданный многоугольник, отличен от нуля, этот n-угольник можно взаимно однозначно спроектировать на n-угольник, лежащий в одной из координатных плоскостей. В качестве направления проектирования рекомендуется брать ту ось, которой соответствует наибольшая координата у нормали.
Предположим для определенности, что C =Max(A, B,C).
Тогда в качестве такой плоскости можно взять координатную плоскость xy, а в качестве направления проектирования – ось аппликат (ось Z).
Легко видеть, что координаты вершин n-угольника, получающегося в результате такого проектирования, будут иметь вид
Координаты точки, получающейся в результате проектирования на плоскость xy точки (x*,y*,z*) будут соответственно (x*, y*).
Ясно, что если точка (x*, y*) лежит вне (внутри) n-угольника, получившегося на плоскости xy,то исходная точка (x*,y*,z*) будет внешней (внутренней) по отношению к исходному n-угольнику.
|
|
Для определения положения точки (x*, y*) относительно выпуклого n-угольника, лежащего на плоскости xy, можно поступить, например, следующим образом.
Передвинем n-угольник
в плоскости xy так, чтобы точка (x*, y*) попала в начало координат.
В новой координатной системе абсциссы и ординаты вершин n-угольника будут соответственно
Теперь остается выяснить, будет (или не будет) точка (0,0), в которую преобразуется точка (x*, y*), внутренней точкой n-угольника с вершинами
Возможны два случая.
I Абсциссы всех вершин n-угольника – одного знака.
Это означает, что рассматриваемая точка лежит вне n-угольника.
II Есть два ребра n-угольника с вершинами
соответственно (i < j), такие, что
Если
то интересующая нас точка лежит внутри n-угольника.
Это означает, что точка (x*, y*,z*) лежит внутри исходного n-угольника.
Если же последнее произведение положительно, то точка (x*, y*,z*) лежит вне исходного n-угольника.