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

Лекции по Компьютерной графике

.pdf
Скачиваний:
57
Добавлен:
10.06.2015
Размер:
485 Кб
Скачать
☆

Координатный метод

Координатный метод был введен в XVII веке французскими математиками Р. Декартом и П. Ферма. На этом методе зиждется

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

•Каждая точка на экране (или на бумаге при печати на принтере)

задается координатами — например, пиксельными.

• Координаты используются для описания объектов, которые будут отображаться как пространственные. Например, объекты микромира,

объекты на поверхности Земли, объекты космического пространства и тому подобное. Даже тогда, когда отображается нечто, не имеющее привязки к положению в пространстве (например, случайные цветовые пятна в каком-то видеоэффекте), то и здесь используются координаты для учета взаиморасположения отдельных элементов.

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

Преобразование координат

Рассмотрим общие вопросы преобразования координат. Пусть задана n-

мерная система координат в базисе ( k1 , k2 ,..., kn ), описывающая положение точки в пространстве с помощью числовых значений k n . В компьютерной графике чаще всего используется двумерная (n=2) и трехмерная (n=3)

системы координат.

Если задать другую, n-мерную, систему координат в базисе (m1, m2, ....

тn) и поставить задачу определения координат в новой системе, зная координаты в старой, то решение (если оно существует) можно записать в таком виде:

m

= f

 

(k

, k

 

,..., k

 

),

1

 

1

1

 

2

 

n

 

m2

= f 2 (k1 , k2 ,..., kn ),

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

 

= f n (k1 , k2 ,..., kn ),

mn

где

f - функция пересчета i -й координаты, аргументы - координаты в

системе kn .

Можно поставить и обратную задачу — по известным координатам (m1, m2, .... mn) определить координаты (к1, к2, ..., кn). Решение обратной задачи запишем так:

k1 = F1 (m1 , m2 ,..., mN ),k2 = F2 (m1 , m2 ,..., mN ),...

kn = Fn (m1 , m2 ,..., mN ),

где Fn — функции обратного преобразования.

В случае, когда размерности систем координат не совпадают (n≠N),

осуществить однозначное преобразование координат зачастую не удается.

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

объектов.

Если размерности систем совпадают (n = N), то также возможны случаи,

когда нельзя однозначно решить прямую или обратную задачи.

Преобразование координат классифицируют:

•по системам координат — например, преобразование из полярной системы в прямоугольную;

•по виду функций преобразования.

По виду функций преобразования различают линейные и нелинейные

преобразования. Если при

всех i = 1,2,..., N

функции f — линейные

относительно аргументов (к1, k2, .... кn), то есть

 

fi

= ai1k1 + ai 2 k2 + ... + ain kn

+ ai ,n−1 ,

где ai, j — константы,

то такие преобразования называются линейными, а при n = N —

аффинными.

Если хотя бы для одного i функция f — нелинейная относительно (к1,

к2, .... кп), тогда преобразование координат в целом не линейно.

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

Х=3х + 5у, Y =4ху + 10у

нелинейное, так как в выражении для Y присутствует ху.

Линейные преобразования наглядно записываются в матричной форме:

m

 

a

 

1

 

11

m

 

a

21

 

2

 

=

...

 

...

 

 

 

 

 

mN

aN 1

a

...

a

a

+

 

k

 

12

 

1n

1, n

 

1

1

 

a22

...

a2n

a2, n +1

k2

 

... ... ...

...

 

 

.

 

...

 

aN 2

...

aNn

aN , n +1

 

 

kN

 

Здесь матрица коэффициентов ( ai, j ) умножается на матрицу-столбец ( ki )

и в результате получается матрица-столбец ( mn ).

Рассмотрим более подробно некоторые отдельные типы преобразований.

Аффинные преобразования на плоскости

Зададим некоторую двумерную систему координат ( x, y ). Аффинное преобразование координат ( x, y ) описывается формулами:

X = Ax + By + C, Y = Dx + Ey + F ,

где A, B,..., F — константы. Значения ( X ,Y ) можно трактовать как

координаты в новой системе координат.

Обратное преобразование ( X ,Y ) в ( x, y ) также является аффинным:

x = A′X + B′Y + C′,

y = D′X + E′Y + F ′.

Аффинное преобразование удобно записывать в матричном виде.

Константы A, B,..., F образовывают матрицу преобразования, которая, будучи умноженная на матрицу-столбец координат ( x, y ), дает матрицу-столбец

( X ,Y ). Однако для того, чтобы учесть константы C и F , необходимо перейти к так называемым однородным координатам — добавить строку с единицами в матрицах координат:

 

X

A

 

 

 

 

 

Y = D

 

1

 

 

0

 

 

 

BC x

EF y .

0 1

 

1

 

 

 

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

x′

 

 

 

y′ =

 

1

 

 

 

 

 

x

Ay ,1

а потом – другое преобразование

x′′

 

 

 

y′′ =

 

1

 

 

 

 

 

x′

By′ ,1

то это можно описать как

x′′

 

 

 

y′′ =

 

1

 

 

 

 

 

x′

 

 

x

 

 

 

 

 

 

 

 

 

B y′ =

B

A y .

 

1

 

 

 

 

1

 

 

 

 

 

 

 

Однако вместо двух преобразований можно выполнить только одно

x′′

 

 

x

 

 

 

 

 

 

 

 

 

y′′ =

С

y ,

 

1

 

 

 

 

1

 

 

 

 

 

 

 

где матрица ( С ) равна произведению ( B )( A ).

Перемножение матриц выполняется так, как это принято в линейной алгебре.

Рассмотрим частные случаи аффинного преобразования.

1) Параллельный сдвиг координат (рис. 1).

x

dx

X

0

dy

y

Y

Рис. 1 – Параллельный сдвиг координат

X = x − dx,

Y = y − dy.

В матричной форме:

1

0

− dx

 

 

 

 

 

0

1

− dy .

 

0

0

1

 

 

 

Обратное преобразование:

x = X + dx,

y = Y + dy.

Матрица:

1

0

dx

 

 

 

 

 

0

1

dy .

 

0

0

1

 

 

 

2) Растяжение/сжатие осей координат (рис. 2).

Рис. 2 – Растяжение/сжатие осей координат

X = x kx ,

Y = y k y ,

1 kx

0

0

 

 

 

 

 

 

 

0

1 k y

0

.

 

0

0

1

 

 

 

Обратное преобразование

x = Xk

,

k

 

0

0

 

 

x

 

 

 

 

x

 

0

k y

0

.

 

,

y = Yky

 

 

 

 

 

 

 

 

0

0

1

 

Коэффициенты kx

и k y могут быть отрицательными. Например, kx = −1

соответствует зеркальному отражению относительно оси y .

3) Поворот (рис. 3)

или

Рис. 3 - Поворот

 

 

cosα

sin α

0

 

X = x cosα + y sin α ,

 

 

 

 

 

 

 

− sin α

cosα

0

.

Y = − x sin α + y cosα ,

 

0

0

1

 

 

 

 

 

Обратное преобразование соответствует повороту системы ( X ,Y ) на

угол ( − α ).

x = X cosα − Y sin α ,

cosα

− sin α

0

 

 

 

 

 

 

 

sin α

cosα

0

.

y = X sin α + Y cosα ,

 

0

0

1

 

 

 

 

Свойства аффинного преобразования.

• Любое аффинное преобразование может быть представлено как последовательность операций из числа указанных простейших: сдвиг,

растяжение/сжатие и поворот.

• Сохраняются прямые линии, параллельность прямых, отношение длин отрезков, лежащих на одной прямой, и отношение площадей фигур.

Трехмерное аффинное преобразование

Запишем в виде формулы:

X = Ax + By + Cz + D,

Y = Ex + Fy + Gz + H ,

Z = Kx + Ly + Mz + N ,

где A, B,..., N - константы.

В матричной форме:

 

X

A

 

 

 

 

 

Y

E

 

 

 

=

 

 

Z

 

K

 

1

 

 

0

 

 

 

B

C

D x

 

 

 

 

 

 

 

F

G

H y

 

 

 

 

 

.

L

M

N z

 

0

0

1

 

1

 

 

 

Для трехмерного пространства любое аффинное преобразование также может быть представлено последовательностью простейших операций.

Рассмотрим их.

1. Сдвиг осей координат соответственно на dx, dy, dz

X = x − dx,

1

0

0

− dx

 

 

 

 

 

 

Y = y − dy,

0 1

0 − dy

.

 

0

0

1

− dz

 

Z = z − dz,

 

 

 

 

 

 

0

0

0

1

 

2) Растяжение/сжатие на kx , k y , kz

X = x kx ,

1 kx

0

0

 

0

 

 

 

1 k y

 

 

 

 

 

 

0

0

 

0

 

Y = y k y ,

 

0

0

1 k

 

0

.

 

 

z

 

Z = z kz ,

 

 

 

 

 

 

0

0

0

 

1

 

 

 

 

3) Повороты

- Поворот вокруг оси x на угол ϕ (рис. 4).

Рис. 4 – Поворот вокруг оси x на угол ϕ

X = x,

1

0

0

0

 

 

 

 

 

 

 

 

0

cosϕ

sin ϕ

0

 

Y = y cosϕ + z sin ϕ,

 

0

− sin ϕ

cosϕ

0

.

 

 

 

Z = − y sin ϕ + z cosϕ,

 

0

0

0

1

 

 

 

 

- Поворот вокруг оси y на угол ψ (рис. 5).

Рис. 5 - Поворот вокруг оси y

на угол ψ

X = x cosψ + x sinψ ,

cosψ

0

sinψ

0

 

 

 

 

 

 

 

 

 

0

1

0

0

 

Y = y,

 

− sinψ

0

cosψ

0

.

 

 

 

Z == − sinψ + z cosψ ,

 

0

0

0

1

 

 

 

 

- Поворот вокруг оси z на угол γ (рис. 6).

z, Z

Y

 

 

x

0

y

γ

 

 

X

Рис. 6 - Поворот вокруг оси z на угол γ

X = x cos γ + y sin γ ,

cos γ

sin γ

0

0

 

 

 

 

 

 

 

 

− sin γ

cos γ

0

0

 

Y = − x sin γ + y cos γ

 

0

0

1

0

.

 

 

 

Z = z,

 

0

0

0

1

 

 

 

 

Связь преобразований объектов с преобразованиями

координат

Когда пользователь графической системы видит на экране перемещающийся объект, то возникает вопрос, что на самом деле происходит — перемещаются объекты или система координат в обратном направлении? Например, если в кино вы видите объекты, вращающиеся на экране по часовой стрелке, то может в действительности это камера поворачивается против часовой стрелки?

Преобразование объектов и преобразование систем координат тесно связаны между собой. Движение объектов можно рассматривать как движение в обратном направлении соответствующей системы координат.

Такая относительность для объектов отображения и систем координат дает разработчикам компьютерных систем дополнительные возможности для моделирования и визуализации пространственных объектов. С каждым объектом можно связывать как собственную локальную систему координат,

так и единую для нескольких объектов. Это можно использовать, например,

для моделирования подвижных объектов.

Обычно, того же самого эффекта можно добиться, если использовать различные подходы. Однако в одних случаях удобнее использовать преобразование координат, а в других — преобразование объектов. Не последнюю роль играет сложность обоснования какого-то способа, его понятность.

Рассмотрим пример комбинированного подхода. Пусть нам нужно получить функцию расчета координат ( X ,Y ) для поворота вокруг центра с координатами ( x0 , y0 ) (рис. 7).

Рис. 7 – Вращение вокруг произвольного центра

Для решения задачи введем новую систему координат ( x′,0′, y′ 1) с

центром в точке ( x0 , y0 ).

Для такой системы поворот точек происходит вокруг ее центра:

X ′ = x′ cosα − y′sin α ,

Y ′ = x′sin α + y′ cosα .

Преобразуем координаты ( X ′,Y ′ ) в ( X ,Y ) сдвигом системы координат в точку (0,0):

X = X ′ + x0 ,Y = Y ′ + y0 .

Если объединить формулы преобразований, то получим результат:

X = (x − x0 ) cosα − ( y − y0 ) sin α + x0 ,Y = (x − x0 ) sin α + ( y − y0 ) cosα + y0 .

Решение этой задачи можно осуществить в матричной форме: