Преобразование координат графических объектов используется с целью модификации, зеркального отображения и перемещения объекта. Основные случаи :
- преобразование системы координат, например, из полярной в декартову,
- изображение типовых или повторяющихся деталей объекта,
- построение проекций трехмерных объектов,
- направленная деформация при синтезе новых форм,
- мультипликация и создание узоров.
Различают двумерные ( 2D ) и трехмерные ( 3D) преобразования. Рассмотрим двумерные аффинные преобразования, когда в получаемом новом изображении объекта сохраняется прямолинейность и параллельность прямых, а также деление отрезков в заданных соотношениях.
Общий вид формул двумерных аффинных преобразований:
x1= a11 x + a12 y + a13 или в x1a11 a12 a13 x
матричном y1= a21 a22 a23 * y
y1= a21 x + a22 y + a23 виде: z10 0 1z
Здесь x, y - координаты исходного, а x1, y1 - преобразованного объекта.
Коэффициенты преобразований a I J сохраняют в виде матрицы, расширенной до квадратной, - при для вычисления коэффициентов составного преобразования перемножают соответствующие матрицы коэффициентов типовых преобразований.
Примеры типовых преобразований и соответствующие им матрицы:
( Ф - исходная фигура, Ф1 - преобразованная )
Y
dx Ф1 Параллельный 1 0 dx
dy перенос 0 1 dy
Ф 0 0 1
X
Y
Ф1 Масштабирование Sx 0 0
Sx = x1/x; Sy = y1/y 0 Sy 0
Ф 0 0 1
X
Y
Ф1
Поворот относительно cos a -sin a 0
начала координат sin a cos a 0
Ф 0 0 1
a
X
Зеркальное отображение:
Y
Ф1 cos(2*A) sin(2*A) 0
относительно оси Y=Х sin(2*A) - cos(2*a) 0
Ф проходящей под углом “A” 0 0 1
0 X
Ф1 относительно начала -1 0 0
координат 0 -1 0
0 0 1
Y
Y1
a Ф1
Деформация сдвига : 1 tg(a) 0
Ф X1 в направлении X - a tg(b) 1 0
в направлении Y - b 0 0 1
b
X
Составные преобразования обычно представляют в виде комбинаций типовых преобразований. Например, поворот относительно произвольной точки ( Xc, Yc) можно представить как комбинацию трех преобразований:
- параллельный перенос, переводящий центр поворота в начало координат,
Перемножение матриц выполняется следующим образом:
a11 a12 a13 b11 b12 b13 c11 c12 c13
a21 a22 a23 * b21 b22 b23 = c21 c22 c23
a31 a32 a33 b31 b32 b33 c31 c32 c33
где cI J = aI 1* b1 J+ aI 2* b2 J+ aI 3* bJ 3 , i= 1, 2, 3; j= 1, 2, 3.
то есть элемент матрицы “C”, расположенный в I-строке и J-столбце, равен сумме произведений элементов I -ой строки матрицы “A“ на соответствующие элементы J-го столбца матрицы B.
В приведенной ниже программе плоская фигура задается в виде линий, последовательно соединяющих координаты массива точек (xa, ya) на чертеже ( x, y - в системе координат экрана ). Эти координаты подвергаются аффинным преобразованиям, коэффициенты преобразования хранятся в двумерном массиве r. Начальному положению фигуры соответствует единичная матрица R (единицы на главной диагонали, остальные члены - нули). При очередном преобразовании коэффициенты матрицы R пересчитываются путем умножения на нее матрицы этого преобразования (А), получаемая матрица (В) снова записывается в R. Новые координаты x, y высчитываются в процедуре NEW_XY, которая вызывается непосредственно при выводе фигуры на экран процедурой PICTURE.
NEW_XY; PICTURE;{ расчет и рисование новых координат фигуры}
end;
readln;
CloseGraph;
END.
В первой части программы фигура вращается вокруг точки, перемещающейся по диагонали экрана. Во второй части программы фигура последовательно отображается вокруг осей, проходящих через центр экрана.