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

Отсечение произвольным окном (выпуклым).

Пример нерегулярного окна, хотя оно и прямоугольное:

Отсечение параметрически заданного отрезка прямоугольным регулярным окном (частный случай нерегулярного).

Параметрическое описание отрезка: Р1(X1 ,Y1) и Р2(X2 ,Y2).

P(t)=P1+ (P2-P1)*t 0≤t≤1 (1)

Х(t)=Х1+ (Х2-Х1)*t 0≤t≤1 (2)

Y(t)=Y1+ (Y2-Y1)*t 0≤t≤1 (2)

t=( P(t) - P1)/( P2- P1)

Для левой: t=(Х(л) -Х1)/ (Х2 -Х1) 0≤t≤1

Для правой: t= (Х(п) -Х1)/ (Х2 -Х1) 0≤t≤1

Для верхней: t= (Y(в) -Y1)/ (Y2 -Y1) 0≤t≤1

Для нижней: t= (Y(н) -Y1)/ (Y2 -Y1) 0≤t≤1

Где Х(л) Х(п) Y(в) Y(н) – координаты левой, правой, верхней, нижней сторон окна.

Если решение этих уравнений дают параметр t, лежащий за пределами интервала 0≤t≤1, то такие решения отвергаются, так как они соответствуют точкам, лежащим вне исходного отрезка.

Пример:

Пересечения:

С левой: t=(Х(л) -Х1)/ (Х2 -Х1)=

=(-1-(-3/2))/(3/2-(-3/2))=1/6

С правой: t= (Х(п) -Х1)/ (Х2 -Х1)=

=(1-(-3/2))/(3/2-(-3/2))=5/6

С нижней: t= (Y(н) -Y1)/ (Y2 -Y1)=

=(-1-(-3/4))/(1/-(-3/4))=-1/5<0 поэтому отвергается

С верхней: t= (Y(в) -Y1)/ (Y2 -Y1)=

=(1-(-3/4))/(1/2-(-3/4))=7/5>1 поэтому отвергается

Видимый отрезок заключен в интервале: 1/6≤t≤5/6

При t=1/6 из уравнения (2):

Х(1/6)=-3/2+ (3/2-(-3/2))*1/6=-1

Y(1/6)=-3/4+ (1/2-(-3/4))*1/6=-13/24

При t=5/6 из уравнения (2):

Х(5/6)=-3/2+ (3/2-(-3/2))*5/6=1

Y(5/6)=-3/4+ (1/2-(-3/4))*5/6=7/24

Алгоритм Кируса – Бека.

Для понимания этого алгоритма нужно уметь определять, где находится точка, принадлежащая отрезку: внутри окна, на границе или за его пределам. Возьмем двумерную отсекающую область (выпуклую). Возьмем внутреннюю нормаль к произвольной точке «a», лежащей на границе этой области.

R – выпуклая отсекающая область, nв – внутренняя нормаль, nн – наружная нормаль ()

Внутренняя нормаль в произвольной точке «а», лежащей на границеR, удовлетворяет условию: гдеb – любая другая точка на границе R.

Скалярное произведение *=где-меньший из двух углов, образованныхи. если=π/2, то=0 и*=0, то есть когда скалярное произведение двух

векторов равно нулю эти вектора взаимно перпендикулярны. Угол между nв и любым вектором всегда принадлежит интервалу -π/2 до π/2,>0. Угол между внешней нормальюи любым вектором= π -, аcos(π - )= -cos<0.

Пример:

- единичный вектор вдоль оси Х.

- единичный вектор вдоль оси Y.

a

b

(0,2)

(0,4)

0

0

(4,4)

4

-4

(8,4)

8

-8

(8,2)

8

-8

(8,0)

8

-8

(4,0)

4

-4

(0,0)

0

0

Пример расчета в точке (4,4):

ba=4i+2j

nв*ba=i*(4i+2j)=4

P(t)=P1+ (P2-P1)*t 0≤t≤1

f- граничная точка выпуклой области R, - внутренняя нормаль к одной из ограничивающих эту плоскость областей,- вектор из точкиf в точку на отрезке Р1Р2. Тогда для любой точки отрезка (то есть для любого конкретного значения t) из условия <0 следует, что вектор из точкиf на отрезок направлен во внешнюю к n область.

И

з условияследует, что этот вектор () попадает в точку отрезка, которая лежит на границе окна.

Из условия следует, что этот вектор () направлен внутрь окна.

Вывод: из скалярного произведения вектора нормали на вектор, опущенный из точки f в любую точку на отрезке можно найти параметр t , удовлетворяющий точке отрезка, лежащей на границе окна.

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

Пример:

1) Решаем уравнение прямой:

Х1 =-1 Y1 =9 Х2=1 Y2 =3

Y=Y1+ (X-X1)*m=1+(X-(-1))*1/5=X/5+6/5

m= (Y2-Y1)/ (X2-X1)=(3-1)/(9-(-1))1/5

2) Находим точки пересечения:

Хл=0 Yл=1/5*0+6/5=6/5

Хп=0 Yп=1/5*8+6/5=14/5

3) Решаем параметрическое уравнение:

P(t)=P1+ (P2-P1)*t =[-1 1]+[10 2]t

4) Преобразуем в векторную форму:

, 0≤t≤1

5) Возьмем четыре внутренних нормали:

6) Выбираем точку f в левом нижнем углу:

f(0,0), тогда: =(10t-1) +(2t+1) *=10t-1.

7) Приравниваем скалярное произведение к нулю:

10t-1=0  t=1/10

8) Подставляем этот параметр в параметрическое уравнение:

P(1/10)=[-1 1]+[10 2]*1/10=[0 1,2]

Возьмем точку f(8,4) , тогда уравнение вектора может быть получено простым смещением по Х на 8 и поY на 4:

=(10t-9) +(2t-3)

*=-(10t-9)=0  t=9/10

P(9/10)=[-1 1]+[10 2]*9/10=[8 2,8]

06.12.02

Лекция 13.

P(t)=P1+ (P2-P1)*t 0≤t≤1

P(t)=[1 1]+[7-1 3-1]t

P(t)=[1 1]+[6 2]t параметрическое уравнение.

Ребро

f

t

Левое

(0,0)

(6t+1)+(2t+1)

6t+1

-1/6

Правое

(8,4)

(6t -7)+(2t-3)

7-6t

7/6

Нижнее

(0,0)

(1+6t)+(1+2t)

1+2t

-1/2

Верхнее

(8,4)

(6t-7)+(2t-3)

3-2t

3/2

Так как параметр t лежит за пределами 0≤t≤1  отрезок лежит за пределами всех ребер (либо целиком внутри окна, либо целиком снаружи). Определение этого происходит с помощью линейного программирования путем сверки знаков параметров t попарно (верхний/нижний, левый/правый).

Пример: есть окно произвольной формы.

Надо разложить на и. В скалярном произведении вместо будет и далее все решается также.

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