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

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

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

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

Координатный метод был введен в 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 — функции обратного преобразования.

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

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

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

объектов.

Если размерности систем совпадают (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 = AX + BY + C′,

y = DX + EY + 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′, y1) с

центром в точке ( 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 .

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