Пересечение луча с плоскостью
Пусть плоскость задана общим уравнением:
Ax + By + Cz + D = 0 ,
где N=(A, B, C) – нормальный вектор плоскости.
A(x0 + lt) + B( y0 + mt) + C(z0 + nt) + D = 0
|
t* = − |
( Ax0 + By0 + Cz0 + D) |
|
Al + Bm + Cn |
|
|
В случае t*<0 луч не пересекает плоскости.
Если t*>0 то координаты точки пересечения вычисляются подстановкой полученного значения t*
Пересечение луча с многоугольником
•нахождение пересечения луча с плоскостью, в которой лежит многоугольник;
•проверка принадлежности точки пересечения многоугольнику.
x
O
P* 
z
Пересечение луча с треугольником
•нахождения пересечения плоскости треугольника с отрезком;
•проверки: лежит ли точка пересечения внутри треугольника.
Пересечение с прямоугольным параллелепипедом
Прямоугольный параллелепипед со сторонами, параллельными координатным плоскостям, однозначно определяется любыми двумя своими вершинами, примыкающими к одной из его диагоналей:
(x_, y_, z_), (x+, y+, z+). Противоположные грани рассматриваемого прямоугольного
параллелепипеда лежат в плоскостях, параллельных координатным плоскостям. Возьмем, например, пару плоскостей, параллельных плоскости
yz: x=x_ и x=x+.
При l = 0 заданный луч параллелен этим плоскостям и, если x0=x_ или x0=x+, не пересекает рассматриваемый прямоугольный параллелепипед. Иначе вычисляем отношения:
t1x = |
x _− x0 |
, t2 x = |
x+ − |
x0 |
. |
l |
l |
|
|
|
|
|
t1x < t2 x (в противном случае меняем их местами). Положим tnear = t1x ,tfar = t2 x .
Аналогично рассматриваем две других пары плоскостей.