Матричное преобразование двумерного пространства
При построении графических объектов на экране, всегда возникает задача с
их перемещением или трансформацией. Как правило, это остаётся только на
уровне вопроса. Попробуем продвинуться немного дальше.
Любой обьект на плоскости можно представить в виде множества точек на
плоскости, каждая из которых будет являться одной из вершин объекта. Пока под
объектом будем понимать любой n-угольник произвольной формы.
Любое естественное преобразование плоскости можно представить в виде
произведения трёх преобразований: переноса, растяжения и вращения
относительно начала координат. Соответственно эти преобразования можно
записать в виде произведения матрицы на вектор-столбец, или вектор-строку.
Так как сейчас рассматриваем преобразования плоскости или двумерного
пространства, то такие действия можно описать матрицей 3х3, для
преобразований в пространстве используется матрица 4х4.
Лирическое отступление. Что такое матрица и с чем её едят.
Матрица 3х3 ничто иное как таблица чисел, состоящая из 3х стобцов и 3х
строк, а вектор-столбец это столбец из 3х чисел.
Числа в скобках означают позицию, в которой находится этот элемент,
номер строки и столбца соответственно. В общем виде, любой элемент матрицы A
можно записать как A(I,J), где I - строка, J - столбец.
С матрицами можно выполнять математические операции, рассмотрим
некоторые из них.
- Сложение
C(I,J)=A(I,J)+B(I,J)
- Умножение матрицы A на некоторое число K (скаляр)
B(I,J)=K*A(I,J)
- Умножение матрицы A на вектор-столбец E, в результате получится
вектор-столбец D
E(I)=A(I,1)*D(1)+A(I,2)*D(2)+A(I,3)*D(3)=SUM(K)(A(I,K)*D(K))
- Умножение матрицы A на матрицу B
C(I,J)=A(I,1)*B(1,I)+A(I,2)*B(2,I)+A(I,3)*B(3,I)=SUM(K)(A(I,K)*B(K,J))
Перенос.
Точка с координатами (X,Y) переводится в точку с новыми координатами
(X',Y') с помощью вектора (TX,TY):
- X' = 1 * X + 0 * Y + TX
- Y' = 0 * X + 1 * Y + TY
матрица этого преобразования:
Растяжение
При таком преобразовании координата X умножается на SX, а Y - координата
точки на SY:
- X' = SX * X + 0 * Y + 0
- Y' = 0 * X + SY * Y + 0
этому преобразованию соответсвует матрица:
Обычно SX и SY положительны, но если одно из них отрицательно, то это
приводит дополнительно к отражению, напирмер, если SX=-1 и SY=1, то точка
отражается относительно оси Y.
Вращение относительно начала координат
Если необходимо повернуть плоскость на некоторый угол TETA против
часовой стрелки (как это принято в математике) относительно начала координат,
то уравнения, определяющие такие преобразования, имеют вид:
- X' = COS(TETA) * X - SIN(TETA) * Y + 0
- Y' = SIN(TETA) * X + COS(TETA) * Y + 0
и матрица:
Обратное преобразование
Для каждого преобразования существует обратное преобразование, которое
восстановит первоначальные позиции точек. Исходя из теории матрице A
соответсвует матрица A^(-1). Предыдущие преобразования настолько элементарны,
что нет необходимости обращать матрицу, достаточно выполнить аналогичные
преобразования с инверсным параметром.
- перенос точки (TX,TY) и противоположные ему (-TX,-TY);
- растяжение плоскости (SX,SY) и уменьшение размера (1/SX,1/SY),
обратите внимание на то что на ноль делить нельзя, хотя растяжение по одной
из координат на 0 - ничего хорошего не даёт. Наверняка такого не случится
иначе плоскость просто превратится в прямую;
- поворот на угол TETA и противоположный ему -TETA;
Вращение плоской (2D) фигуры.
Вращение объемной (3D) фигуры.
Лень учить? Смотри pascal на видео
Пахтусов Сергей, 02.03.2006
|