理论部分📖
仿射变换包括缩放、平移、旋转、反射、错切,仿射变换后保持不变的性质:
- 凸性:原来是直线仿射变换后还是直线
- 共线性:若几个点变换前在一条线上,则仿射变换后仍然在一条线上
- 平行性:若两条线变换前平行,则变换后仍然平行
- 共线比例不变性:变换前一条线上两条线段的比例,在变换后比例不变
最基础的仿射变换就是线性变换+平移,可以写成如下形式:
这显然不是线性的,为了把仿射变换变成线性变换,或者说统一变换矩阵的格式,重新定义2D中的点和向量,给它们增加一个维度,那么上面的仿射变换就可以用一个变换矩阵来表示。
🧐为什么点的第三维是1,而向量的第三维是0?
- 两个点做差即可得到向量。(x1,y1,1)-(x2,y2,1)=(x1-x2,y1-y2,0)
- 向量具有方向性,平移向量不改变其坐标值。tx,ty应该和0相乘
- 两个点相加是它们的中点。(x1,y1,1)+(x2,y2,1)=(x1+x2,y1+y2,2)=((x1+x2)/2,(y1+y2)/2,1)
因此,2D的缩放、旋转、平移矩阵分别如下所示:
对一个点要做什么变换就把变换矩阵