Лекции по Компьютерной графике
.pdfКоординатный метод
Координатный метод был введен в 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 .
Решение этой задачи можно осуществить в матричной форме: