46
выполнить проверку — не будет ли он закрывать PQ (или ее часть). Как и ранее, R — точка
наблюдения. Будем говорить, угольник АВС закрывает точку R, если отрезок ЕR пересекает
треугольник АВС в точке, внутренней как по отношению к отрезку, так и по отношению к
треугольнику. Стороны треугольника не относятся к внутренним точкам, а концевые точки
от
резка не являются внутренними для отрезка. Таким образом, тока R не закрывается
треугольником АВС ни в том случае, когда точка R принадлежит внутренней части треугольника,
ни в том случае, когда она принадлежит стороне треугольника, закрытый другим треугольником.
Если треугольник АВС не закрывает точку R, то будем говорить, что точка R видима по
отношению к треугольнику АВС. Если тольк
о конечное число точек отрезка PQ видимо по
отношению к треугольнику АВС, все равно будем говорить, что АВС закрывает РQ. Например, на
рис. 10.1 треугольник 130 закрывает отрезок 12, хотя этот треугольник не закрывает точку 1. Если
треугольник не закрывает РQ, нельзя сделать заключение, что все точки PQ видимы по
отношению к этому треугольнику, поскол
ьку треугольник может закрыть PQ частично.
Треугольник частично закрывает PQ, если он закрывает бесконечно много
Рисунок 8.2 - Пирамида
точек отрезка PQ и в то же время бесконечно много точек этого отрезка остаются
видимыми по отношению к этому треугольнику.
Если некоторый треугольник закрывает PQ, то нет необходимости учитывать оставшиеся
треугольники в списке, но можно немедленно пр
ийти к заключению, что PQ закрыт и не должен
вычерчиваться.
Обсудим видимость отрезка прямой линии PQ по отношению к треугольнику АВС в
алгоритмическом смысле. Пусть заданы видовые координаты x
P
, y
P
, z
P
, x
Q
, ,... и так далее для пяти
точек P, Q, A, В, С и коэффициенты а, о, с, h уравнения ах + bу + сz = h. Вся информация о
треугольнике АВС сохраняется в элементе массива TRIANGLE[j]. Ключевым фактором в нашем
анализе будет бесконечная пирамида, вершина которой находится в точке Е, а боковые грани
проходят через стороны треуго
льника АВ, ВС, СА. Эту пирамиду для краткости назовем одним
словом "пирамида", а треугольник АВС — термином "треугольник".
Все внутри пирамиды позади треугольника будет невидимым, а все точки впереди или вне
пирамиды — видимыми (относительно данного треугольника). На рис. 10.2 отрезок прямой линии
PQ пересекает пирамиду в двух точках — I и J. Часть IJ отрезка PQ будет невидимой, а части PI
и
JQ — видимыми. (Ради краткости вместо фразы "видимый по отношению к треугольнику АВС"
будем применять термин "видимый".)
Сложность нашей задачи заключается в очень большом количестве случаев, которые
предстоит рассмотреть. В ситуации, показанной на рис. 10.2, можем вычислить положение точки I
следующим образом. Векторное представление прямой линии PQ записывается в виде
ЕР+λr
где r = [r
1
r
2
r
3
] = РQ, откуда
r
1
= x
Q
- x
P
r
2
= y
Q
- y
P
r
3
= z
Q
- z
P
точка (x, y, z) принадлежит прямой линии PQ, если
x = x
P
+ λr
1
y = y
P
+ λr
2
(10.3)