Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по компьютерной графике [по вопросам].doc
Скачиваний:
84
Добавлен:
02.05.2014
Размер:
783.36 Кб
Скачать

Пересечение луча с плоскостью и многоугольником Вопрос 32

Пересечение луча с плоскостью

Пусть плоскость задана общим уравнением:

где N=(A, B, C) — нормальный вектор плоскости.

Заменяя в уравнении плоскости величины x, y и z их выраже­ниями, получим линейное уравнение относительно t:

Разрешая его, находим, что

Если

(a обращается в нуль), то луч паралле-

лен плоскости и, следовательно, не пересекает ее.

В случае t*<0 луч не пересекает плоскости.

Если t*>0 то координаты точки пересечения вычисляются под­становкой в выражения полученного значения

Пересечение луча с многоугольником

В данном случае задача разбивается на две:

1) нахождение пересечения луча с плоскостью, в которой лежит многоугольник;

2) проверка принадлежности точки пересечения многоугольни­ку.

Решение первой части задачи рассмотрено в предыдущем разде­ле. Остается проверить принадлежность полученной точки много­угольнику.

Решение будет состоять из следующих шагов:

• нахождения пересечения плоскости треугольника с отрезком;

• проверки: лежит ли точка пересечения внутри треугольника. Нахождение точки пересечения луча с плоскостью рассмотрено

в предыдущем разделе. Проверим, лежит ли полученная точка внутри треугольника.

Способ, которым мы воспользуемся, опирается на то, что сумма внутренних углов вида "вершина-точка-вершина" равна 2π, если точ­ка внутри треугольника. Для точки вне треугольника эта сумма будет меньше. Очевидно, сумма берется для одной точки — точки пересече­ния линии и плоскости, и по всем сочетаниям вершин.

Если мы вычислим единичные векторыPa1, Pa2, Pa3

тогда углы будут равны

Пересечение луча с прямоугольным параллелепипедом. Вопрос33

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

Пусть прямоугольный параллелепипед задан вершинами

При l = 0 луч параллелен этим плоскостям и, если X0=x- или X0=x+, не пересекает рассматриваемый прямоугольный па­раллелепипед. Если же луч непараллелен этим плоскостям, то вычисляем отношения:

Можно считать, что t1x <t2x (в противном случае меняем их мес­тами). Положим tnear=t1x, tfar=t2x

Считая, что m не равно нулю, и рассматривая вторую пару плос­костей, несущих грани заданного параллелепипеда, y=y-_ и y=y+, нахо­дим величины

если t1y<tnear , полагаем tnear =t 1y, если t2y >t far, полагаем tfar = t2y, при

tnear >tfar ии при tfar<0 заданный луч проходит мимо прямоугольного параллелепипеда.

Считая, что n не равно нулю, рассматриваем последнюю пару плоскостей z=z- и z=z+ находим величины:

и повторяем предыдущие сравнения.

Если в итоге мы получим, что 0 < tnear <t far или 0 < tfar, то задан­ный луч непременно пересечет исходный параллелепипед со сторо­нами, параллельными координатным осям.

Если луч проходит через прямоугольный параллелепипед (при этом считается, что начальная точка луча лежит вне параллелепипе­да), то расстояние от начала луча до точки его входа в параллелепи­пед равно tnear, а до точки выхода tfar соответственно.