Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Компьютерная геометрия и графика

..pdf
Скачиваний:
10
Добавлен:
05.02.2023
Размер:
634.52 Кб
Скачать

11

6) a = d =1, b = 0 ,

1

0

 

 

[x y]

 

= [x + cy y] = x

 

c

1

 

 

y .

Здесь все аналогично, но сдвиг происходит вдоль оси x пропорционально начала координате y (см. Рис. 2.6).

В заключение отметим, что преобразование общего вида (2.1), примененное к началу координат, не изменяет положения начала координат

[ ] a b = [ ]

0 0 0 0 .

c d

Иными словами, начало координат инвариантно к преобразованию 2 ×2 . Это является недостатком такого преобразования, который будет преодолен введением обобщённых однородных координат. Но об этом позже.

1.4ПРЕОБРАЗОВАНИЕ ПРЯМЫХ ЛИНИЙ

Прямая линия может быть задана координатами двух её точек. Отрезок прямой задается координатами его концов.

Пусть координаты концов отрезка равны

A = [x1

y1 ] , B = [x2 y2 ] .

 

 

 

 

 

В результате преобразования 2 ×2 получим:

 

 

 

 

 

 

 

a

b

 

 

 

 

 

 

= [x1

y1 ]

= [ax1 + cy1

 

;

 

A

bx1 + dy1 ] = x1

 

y1

 

 

 

 

c

d

 

 

 

 

 

 

 

 

a

b

 

 

 

 

B

= [x2

y2 ]

= [ax2 + cy2

;

 

bx2 + dy2 ] = x2

y2

 

 

 

 

c

d

 

 

 

 

 

 

 

 

12

 

 

Y

 

 

 

 

 

7

 

 

 

B*

 

5

 

 

 

 

 

3

 

B

 

 

 

1

A

 

A*

 

 

 

1

3

5

11

X

 

 

Рисунок 1.7

 

 

0

1

A

О бъект =

 

.

2

3

B

 

 

3

1

A

О бъект

=

 

 

B

.

 

11

7

 

На рисунке 1.7 показано преобразование сдвига по обеим осям для отрезка с координатами A = [0 1] и B = [2 3] . В результате получим

A* = [3 1] , B = [11 7] ,

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

представив его в виде матрицы координат концов:

x

y

 

L = 1

1

.

x2

y2

 

Тогда преобразованный отрезок получиться как

x

y

a b

ax + cy

bx + dy

 

x

y

L = LT = 1

1

 

 

=

1

1

1

1

 

= 1

1 .

x2

y2 c d

ax2 + cy2

bx2 + dy2 x2

y2

Итак, матрица преобразования 2 ×2 преобразует прямую линию в другую прямую. Говоря об отрезке, легко показать, что между точками исходного и преобразованного отрезка существует взаимно однозначное соответствие.

13

Концы отрезка преобразуются в концы нового отрезка. Покажем, что средняя точка преобразуется в среднюю точку.

Координаты средней точки исходного отрезка равны

x + x

 

y + y

2

 

 

M =

1

2

 

1

 

;

 

2

2

 

 

 

 

 

 

преобразованного отрезка

M

 

x + x

y + y

a(x

+ x ) + c( y

+ y

)

 

 

 

b(x

+ x ) + d( y

+ y

)

 

 

 

=

 

 

1

2

 

 

 

1

2

=

1

2

 

 

1

2

 

 

 

 

1

2

 

 

1

2

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

2

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

Применение преобразования 2 ×2 к точке M даёт

 

 

 

 

 

 

 

 

 

 

x + x

2

 

 

y + y

2

 

a b

 

a(x + x )

 

c( y + y

)

 

 

b(x + x )

 

d( y + y

)

 

 

 

1

 

 

 

 

 

1

 

 

 

 

 

 

=

 

1 2

 

+

 

1 2

 

 

 

 

1 2

 

+

 

1

2

 

 

,

 

2

 

 

 

 

2

 

 

 

 

 

2

 

 

2

 

 

 

 

 

 

2

 

 

2

 

 

 

 

 

 

 

 

 

 

 

c d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

то есть точку M . Очевидно, что это соответствие выполнится для любой точки отрезка, делящей его в отношении 1/ k (во всех выражениях вместо «2”»подставить « k »), то есть вообще для любой точки отрезка.

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

1.5ПАРАЛЛЕЛЬНЫЕ ЛИНИИ

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

Пусть даны две линии

L1

x

y

 

и

L2

x

y

 

= 1

1

 

= 3

3

,

 

x2

y2

 

 

x4

y4

параллельные друг другу. Значит, тангенс угла наклона этих линий одинаков и равен

m

=

y2 y1

=

y4 y3

.

 

 

1

x2

x1

 

x4 x3

 

 

 

Преобразование L1 по формуле (2.2) даст линию L1 с наклоном

14

 

 

y*

 

 

 

x )

+ d( y

 

y )

 

b + d

 

y2 y1

 

 

 

 

b + dm

 

 

y*

 

b(x

 

 

 

 

 

 

m =

=

2

=

 

 

 

 

x

x

=

 

2

1

 

2

1

 

 

1

 

 

 

 

2

1

 

 

 

 

1

.

 

x* x*

a(x x ) + c(y y )

 

 

 

y2

y1

 

 

 

 

2

 

 

 

 

 

 

 

a + cm

 

 

2

1

 

 

2

1

 

2

1

 

 

a + c x

x

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

2

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для L2

– аналогично: наклон L2 равен

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y*

 

 

 

x ) + d( y

 

y )

 

 

b + d

y4 y3

 

 

 

b + dm

 

 

y*

 

b(x

 

 

 

 

 

 

 

m =

=

4

=

 

 

 

 

x

x

 

=

 

 

4

3

 

4

3

 

 

3

 

 

 

 

4

3

 

 

 

 

1

.

 

x* x*

a(x x ) + c( y y )

 

 

 

 

y4

y3

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

a + cm

 

 

4

3

 

 

4

3

 

 

4

3

 

 

 

a + c x

x

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

4

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получили,

что

линии

L и

L

имеют

 

одинаковый

наклон, то

есть

 

 

 

 

 

 

 

1

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

параллельны. Это означает, в частности, что

 

преобразованием

2 ×2

параллелограмм преобразуется в другой параллелограмм.

 

 

 

 

1.6 ПЕРЕСЕКАЮЩИЕСЯ ЛИНИИ Преобразование пересекающихся линий рассмотрим на примере.

Y

 

 

8

B*

 

 

 

A

D

 

 

 

C* 1

 

D*

1

B

7 X

 

C

 

 

-8

A*

 

Рисунок 1.8

 

 

 

 

 

 

 

 

 

 

 

 

15

A: 0

4

 

 

 

 

 

4

−8 : A

 

 

 

 

1 2

 

 

 

 

 

: B

B :

 

4

0

 

 

4

8

 

 

 

−1

 

 

−2

=

 

−2 0

 

 

;

C :

 

 

 

 

 

 

:C

 

 

−1 1

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

D : 3

3

 

 

 

 

 

0 : D

[2 2] 1 2

= [4 0].

 

 

 

 

 

 

 

 

1 −2

 

 

 

 

 

 

 

 

 

Видно,

что точка пересечения прямых AB и CD преобразуется в точку

пересечения прямых

A B

и

C D .

Этот вывод является общим для любых

пересекающихся прямых, но мы не будем это строго показывать.

1.7ПРЕОБРАЗОВАНИЕ ПЛОСКИХ ФИГУР

Рассмотрим преобразование матрицей 2 ×2 плоских фигур на примере треугольника.

1.7.1 Вращение

Вращение вокруг начала координат против часовой стрелки на угол 90D

реализуется матрицей 0 1

;

 

 

 

−1 0

 

 

 

 

На угол 180D – матрицей −1

0

;

 

0

−1

 

На угол 270D – матрицей

0

−1

 

 

 

.

 

 

1

 

0

 

16

Y

B*

A*

C B

C*

1

A

X

 

 

Рисунок 1.9

A: 3 −1

0

1

 

1

3 : A

 

B :

 

4 1

 

=

 

−1

4

 

: B

 

;

 

 

 

 

 

 

 

 

 

−1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

−1

 

 

 

 

 

C : 2 1

 

 

 

 

 

2 : C

 

 

Отметим, что вращение осуществляется вокруг оси, перпендикулярной к плоскости xy .

1.7.2 Отображение

Отображение определяется поворотом на 180D вокруг оси, лежащей в плоскости xy .

Y

A*

C*

B*

C

B

1

A

A* X

B*

C*

Рисунок 1.10

 

 

 

 

 

 

 

 

 

 

 

 

17

 

 

 

 

A: 8 1

 

0

1

 

 

1 8

: A

 

 

 

 

 

 

 

 

 

 

=

 

 

 

;

 

 

 

 

 

 

B : 6 2

 

 

2 6

: B

 

 

 

 

 

 

 

 

 

 

1

0

 

 

 

 

 

 

 

 

 

 

 

C : 7 3

 

 

 

 

3 7

: C

 

 

 

 

 

 

 

 

A: 8 1

 

1

0

 

 

8 −1 : A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B : 6 2

0

−1

= 6

−2

: B

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

:C

 

 

 

 

 

 

C : 7 3

 

 

 

 

7

−3

 

 

 

 

 

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T =

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

0

−1

 

 

 

 

 

 

 

 

 

 

 

 

 

Отображение относительно оси y = x осуществляется матрицей 0

1

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

 

Относительно оси

 

y = 0 – матрицей 1

0

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

−1

 

 

 

Относительно оси

 

x = 0– матрицей −1

0 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

 

 

 

1.7.3 Изменение масштаба Изменение масштаба, как уже отмечалось, определяется значением

элементов главной диагонали матрицы 2×2.

Y

C* B*

C B

A*

1 A

X

P11

Рисунок 1.11

18

A: 3 1

2

0

 

6

2 : A

 

 

 

=

 

 

 

 

;

B : 3

2

 

 

6

4

: B

 

 

 

0

2

 

 

 

:C

 

 

C : 1

2

 

 

 

2

4

 

 

Если элементы главной диагонали матрицы 2×2 не равны, то происходит искажение формы.

Часто для достижения желаемого результата требуется выполнить последовательность преобразований, например, ряд преобразований, рассмотренных ранее. При этом важно помнить, что операция умножения матриц некоммутативна, то есть играет роль порядок выполнения преобразований.

Рассмотрим пример.

T1

 

0

1

– вращение на 90D ;

=

−1

 

 

 

0

 

T2

−1 0

– отображение относительно оси x = 0.

=

 

 

0

1

 

Некоторая точка A = [x

y]

преобразуется:

AT = [x y]

0 1

=

[y x];

1

 

 

 

 

 

 

 

 

−1

0

 

 

 

( AT

)T = [y x]

−1 0 =

[y x].

2

1

 

 

 

 

 

 

 

 

0

1

 

В другом порядке:

 

 

 

AT = [y x]

−1 0

=

[x y];

2

 

 

 

 

 

 

 

 

0

1

 

 

 

( AT

)T = [x y]

0 1 = [x y].

2

1

 

 

 

 

 

 

 

 

−1

0

 

Как видим, результаты получились разными.

То же самое можно показать несколько иначе. Вначале получим общую

матрицу преобразования для комбинации T = TT :

1 2

 

 

 

 

 

 

19

 

T = T1T2

 

0 1

−1 0 0

1

 

=

 

 

 

=

 

,

 

 

−1 0

 

0 1

1

0

 

а затем для комбинации T = T2T1 :

T

= T T

=

−1 0

 

0 1

=

 

0 −1 .

 

2 1

 

 

 

 

 

 

 

 

 

 

 

 

0 1

−1 0

 

 

−1 0

Видно, что T T , значит и результаты преобразования будут различны.

1.7.4 Преобразование единичного квадрата Использование машинной графики предполагает визуализацию

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

Рассмотрим преобразование общего вида единичного квадрата с вершиной в начале координат.

 

 

 

Y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C*(a+c,b+d)

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

c

 

 

 

d

 

 

 

 

 

 

 

C (1,1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

A,A*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 1.12

 

 

A: 0 0

 

 

 

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B : 1 0

a b

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

C : 1 1

c d

 

 

a + c b + d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D : 0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20

Видно, что начало координат не изменило своего положения, а весь квадрат преобразовался в параллелограмм (сохраняется параллельность сторон). Отметим, матрица T однозначно восстанавливается здесь по двум точкам:

B =[a b] – первая строка,

D =[c d ] – вторая строка.

Площадь параллелограмма A B C D равна

Sп = (a + c)(b + d ) ab cd bc bc =

= ab +bc + ad + cd ab cd bc bc = ad bc = T ,

то есть Sï = S T .

Можно показать, что эта формула верна в случае преобразования произвольной фигуры.

1.7.5 Произвольная матрица вращения 2x2

Ранее мы рассмотрели матрицы вращения вокруг начала координат на углы, кратные 90D . Сейчас на примере единичного квадрата получим общий вид матрицы вращения на угол θ .

Мы уже говорили, что в случае преобразования единичного квадрата координаты точки B определяют первую строку матрицы, а точки D – вторую строку. Таким образом, матрица вращения на произвольный угол θ определяется как

Y

C*

D C

D*

 

Θ

B*

 

 

 

 

 

 

Θ

 

 

 

 

 

 

 

 

 

 

 

 

A,A*

 

B

 

 

 

 

 

 

 

 

 

 

X

Рисунок 1.13.