Скачиваний:
84
Добавлен:
09.05.2014
Размер:
685 Кб
Скачать
☆

Непараметрический способ.

Р1(X1,Y1) и Р2(X2,Y2) – точки. Уравнение бесконечной прямой, проходящей через эти точки может быть записано в виде:Y=m(X-X1)+Y1(Y=m(X-X2)+Y2) гдеm=(Y2-Y1)/(X2-X1) – коэффициент угла наклона.

Точка пересечения прямой со стороной окна:

Хл , Хп,Yн,Yв– координатыX,Yлевого, правого, нижнего и верхнего краев окна, тогда точки пересечения со стороной окна будут следующими:

С левой: Хл,Y=m(Xл -X1)+Y1 еслиm≠∞

С правой: Хп, Y=m(Xп -X1)+Y1 если m≠∞

С верхней: Yв, X= X1+(1/m)(Yв -Y1) если m≠0

С нижней: Yн, X= X1+(1/m)(Yн -Y1) если m≠0

Пример: Р1(-3/2 ,1/6) и Р2(1/2 ,3/2)

m=( Y2- Y1)/( X2- X1)=(3/2=1/6)/(1/2-(-3/2))=2/3

Р1I

С левой: -1, Y=(2/3)(-1 –(-3/2))+1/6=1/2< Yв

С правой: 1, Y=(2/3)(1 –(-3/2))+1/6 =11/6> Yв

Р2I

С верхней: 1, X= -3/2+(3/2)(1 –1/6) =-1/4>Xл

С нижней: -1, X= 1/2+(3/2)(-1 –1/6) –13/4<Xл

Частный случай:

  1. m=∞  Р1Р2 параллельно левой, правой  Р1Р2 может пересекаться только с нижней и верхней границами.

  2. m=0  Р1Р2 параллельно нижней, верхней  Р1Р2 может пересекаться только с левой и правой границами.

  3. Если код одного из концов 0000  отрезок может пересекать только одну сторону окна.

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

Метод предложен Сазерлендом и Спрулом: «Метод разбиения отрезка средней точкой».

Данный метод позволяет вычислить пересечение отрезка со сторонами окна, минуя непосредственно пересечение, путем реализации двоичного поиска такого пересечения.

Достоинство: Метод хорошо может быть реализован аппаратно.

В алгоритме используются коды концевых точек отрезков и проверки, выявляющие полную видимость отрезка или тривиальную невидимость. Те отрезки, которые с помощью таких проверок нельзя отнести к первому из двух случаев разбивается на две равные части, затем те же проверки применяются к каждой из половин для тех пор, пока не будет обнаружено пересечение со стороной окна, или длина разбиваемого отрезка не станет пренебрежимо малой (отрезок не выразится в точку). В процессе такого анализа половинки могут быть отброшены как тривиально невидимые. Максимальное число разбиений пропорционально точности задания координат концевых точек отрезков.

Отрезок а:

Р1Рm1 – рассматриваем далее (делим пополам).

Рm1Р2 – тривиально невидим  отбрасываем.

Отрезок b:

Рm1Р2 – тривиально невидим  отбрасываем.

Точка Рm2 – оказалась в окне  с отрезками Р1Рm2 и Рm2Рm1 продолжаем работать.

Рm2Рm3 - целиком виден, но не будем его сразу визуализировать, а объявим точку Рm3 как наиболее удаленную видимую точку от конца отрезка Р1. Как только нашли точку Р2I - переходим к отрезку Р1Рm2. и так далее.

Алгоритм имеет три этапа:

Для каждой концевой точки отрезков:

  1. Если концевая точка видима, то она будет наиболее удаленной видимой точкой.

  2. Если отрезок тривиально характеризуется как невидимый, то выходная информация не формируется.

  3. Надо оценить наиболее удаленную видимую точку путем деления отрезка средней точкой. Применяем тест Р1Рm и Р2Рm. Если РmР2 тривиально отвергается как невидимый, то средняя точка дает верхнюю оценку для наиболее удаленной видимой точки. Продолжаем процедуру с Р1Рm, иначе средняя точка дает оценку снизу для наиболее удаленной видимой средней точки и тогда продолжим с РmР2. И так далее.

29.11.02

Лекция 12.

Соседние файлы в папке конспект лекций