Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры 1 шпоры.docx
Скачиваний:
21
Добавлен:
22.09.2019
Размер:
1.52 Mб
Скачать

9.Алгоритм определения невидимых линий.

Для каждого треугольника АВС из списка, записанного в массив Т, необходимо выполнить проверку – не будет ли он закрывать  PQ (или его часть). Е – точка наблюдения. Будем говорить, что треугольник АВС закрывает точку R, если отрезок ER пересекает треугольник АВС в точке, внутренней как по отношению к отрезку, так и по отношению к треугольнику. Стороны треугольника не относятся к внутренним точкам,  а концевые точки отрезка не являются внутренними для отрезка. Таким образом, точка R не закрывается треугольником АВС ни в том случае, когда точка R принадлежит внутренней части треугольника, ни в том случае, когда она принадлежит стороне треугольника, закрытой другим треугольником. Если треугольник АВС не закрывает точку R, то будем говорить, что точка R видима по отношению к треугольнику АВС. Если только конечное число точек отрезка PQ видимо по отношению к треугольнику АВС, все равно будем говорить, что АВС закрывает PQ. Если треугольник не закрывает PQ, нельзя сделать заключение, что все точки PQ видимы по отношению к этому треугольнику, поскольку треугольник может закрывать PQ частично. Треугольник АВС частично закрывает PQ, если он закрывает бесконечно много точек отрезка PQи в то же время бесконечно много точек этого отрезка остаются видимыми по отношению к этому треугольнику.         

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

Обсудим видимость отрезка PQ по отношению к треугольнику АВС в алгоритмическом смысле. Пусть заданы видовые координаты xP, yP, zP, zQ, ... для пяти точек P,Q, A, B, C и коэффициентыa,b,c,h уравнения ax+by+cz=h. Вся информация о треугольнике АВС сохраняется в элементе массива Т. Ключевым фактором в нашем анализе будет бесконечная пирамида, вершины которой находятся в точке Е, а боковые грани проходят через стороны треугольника АВ, ВС и СА. Эту пирамиду мы будем иметь ввиду употребляя слово «пирамида»,а треугольник АВС, употребляя слово «треугольник».

Все точки внутри пирамиды позади треугольника будут невидимыми, а все точки впереди или вне пирамиды видимыми (относительно данного треугольника). На рисунке отрезок PQ пересекает пирамиду в двух точках I и J. Часть IJ отрезка PQ. Будет невидимой, а части PI и JQ видимыми.

Сложность задачи заключается в очень большом количестве случаев, которые предстоит рассмотреть. В ситуации, показанной на рисунке, можно вычислить положение точки I Векторное представление прямой PQ записывается в виде

EP+λr,

где  r=[r1 r2 r3] =PQ, откуда

           r1= xQ - xP

                r2 = y-yP

                r= z- zP

точка (x,y,z) принадлежит прямой PQ, если

           x = xP + λr1

           y = yP + λr2                          (*)

           z = z+ λr3

для значений λ между 0 и 1 точка лежит между точками P и Q.Уравнение плоскости ЕАВ может быть записано как

     

поскольку эта плоскость проходит через точки Е(0, 0, 0), А, В, уравнение можно переписать в виде

     C1x + C2y +C3z = 0,

где

     C1 = yAzB - yBzA

      C2 =  xBz- xAzB     (**)

      C3 = xAyB- xByA  

Подставляя правые части уравнения (*) в уравнение (**)  находим

Используя значения λ в формуле (*), получаем координаты точки I. Изображенная на рисунке ситуация возникает только тогда, когда значение λ находится в пределах  от 0 до 1. Для других значений λ точка I лежит не на отрезке PQ, а на одном из его продолжений. Нельзя утверждать, что при значении λ от 0 до 1 отрезок PQ пересекает пирамиду, верно лишь обратное утверждение. На следующем рисунке показана ситуация, видимая из точки Е, когда значение  λ лежит в пределах от  0 до 1, хотя отрезок PQ не пересекает пирамиду.

 

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

   ЕА + μАВ

точка (x,y,z) принадлежит прямой АВ, если

      x = xA+μ(xB-xA)

      y = yA +μ(yB-yA) (***)

      z = zA + μ(zB-zA)

Для значений μ от 0 до 1 точка лежит между А и В.

Уравнение плоскости EPQ

Перепишем это уравнение в виде

К1х +К2у +К3z=0

где

K1= yP zQ-yQzP

K2 = xQzP-xPzQ  (****)

K3 = xPyQ- xQyP

Совмещая (***) и (****) получаем

отрезок прямой PQ и плоскость пирамиды ЕАВ имеют общую точку, если, и только если

  

До сих пор мы рассматривали пересечение прямой PQ только с одной из плоскостей пирамиды, а именно с ЕАВ. Необходимо также рассмотреть плоскости ЕВС и ЕСА. Отрезок PQ может не иметь либо иметь одно или два пересечения с пирамидой. Соответственно, точки Р и Q могут лежать внутри, вне или на пирамиде, то есть располагаться впереди, позади или на плоскости АВС. Для проверки каждой пары из одного отрезка и одного треугольника может потребоваться большой объем работы. Обычно имеется очень много отрезков и каждый из них необходимо проверять относительно большого количества треугольников. Следовательно, такие проверки необходимо выполнять с большой эффективностью. Мы можем составить шесть тестов для проверки различных случаев, но желательно начинать с таких случаев, которые встречаются наиболее часто, и, если, тест, в этом случае закончился успешно, то остальные тесты можно (и нужно) игнорировать.

Тест 1.

 Если точки Р и Q лежат пред или на плоскости АВС (но не позади нее), то отрезок PQ – видимый. Это происходит когда

      ,

где n=[a b c]. Напомним, коэффициенты a, b, c, h хранятся в массиве Т.

Этот тест охватывает и тот важный случай, когда PQ представляет собой одну из сторон треугольника.