Основы компьютерной графики/§2

Материал из testwiki
Перейти к навигации Перейти к поиску

2D-Преобразования

Начнем 2D-преобразования, т.е. преобразования на плоскости. допустим у нас есть точка P с координатами x,y P=(x,y,)
у нас есть некий оператор T, который равен T=(abcd) и наша точка, после воздействия на неё оператором Т перейдет уже в другие координаты P*=PT они будут равны P*=(ax+yc;bx+dy)=(x*,y*)

Рассмотрим некоторые операторы преобразования:

  • T=(1001) - отразить по оси Х
  • T=(1001) - Ничего не делать =)))
  • T=(a001) - масштабирование по Х
  • T=(1b01) - Сдвиг , т.е. (x,bx+y)

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

теперь возьмём для примера уже не точку, а отрезок L=(P1P2)

Пусть для конкретности P1=(1,1) P2=(2,3) тогда L=(1123) и исходя их преобразования для точки, сделаем тоже самое для отрезка. LT=L*, где T=(x1y1x2y2) Тогда:

L*=LT=(x1y1x2y2)(abcd)=(ax1+cy1bx1+dy1ax2+cy2bx2+dy2)

Отсюда видно, что это верно для любой точки на плоскости. если мы просчитаем отдельно P1 и P2 то получим такой же результат.

рассмотрим пример: T=(1201) L1=(2124) и L2=(1232)


L1*=L1T=(2528)
L2*=L2T=(1638)

Поворот

Теперь рассмотрим Матрицу поворота T=(cosϕsinϕsinϕcosϕ) Поворот на 90° градусов можно осуществить с помощью такой вот матрицы T=(0110) что соответствует ϕ=π/2

T90=T90T=T901Tϕ - ортогональный оператор

Перейдем к однородным координатам

  • p=(x',y',h)
  • x=x'/h
  • y=y'/h

x*=x+m и y*=y+n отсюда (xy1)(100010nm1) - для переноса

  • Tm,n=(100010nm1)
  • Tm,n1=(100010nm1)
  • Tϕ=(cosϕsinϕ0sinϕcosϕ0001)

и наконец выведем оператор поворота R для произвольной точки : R=TTϕT1 R=TTϕT1=(100010nm1)(100010nm1)(cosϕsinϕ0sinϕcosϕ0001)=(cosϕsinϕ0sinϕcosϕ0mmcosϕ+nsinϕnmsinϕncosϕ1)


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

Возьмем например квадрат с вершинами A,B,C,D и запишем для него матрицу, возьмем для наглядности числа (ABCD)=(00101101) и оператор T - матрица преобразования. T=(abcd) Тогда :

(A*B*C*D*)=(00101101)(abcd)=(00aba+cb+dcd)

Вообще не трудно догадаться, исходя из координат, что это единичный квадрат, а следовательно его площадь равна единице S=1. Если же мы подействуем на этот квадрат оператором Т, то площадь такого "Квадрата" (скорее уже просто четырехугольника) будет равна S*=detTS

Рассмотрим оператор преобразования, в более широком смысле т.е. T=(abpcdqmns)

Что же мы тут видим вглядывается старая матрица a,b,c,d, эти элементы отвечают все так же за отображение, за масштабирование по оси, за сдвиг... , ничего не поменялось. Теперь рассмотрим дополнительные элементы: m,n - они отвечают за перенос начала координат (m за x, n за y); Элемент s - отвечает за масштабирование, но не так как в прошлом варианте, а сразу по всем координатам. ну и наконец p,q - они впринцыпе отвечают за перспективу, т.ч. в 2D преобразованиях это не очень можно вообразить и объяснить.