Skip to content

Transformation

2D 变换

缩放

[xy]=[sx00sy][xy]

齐次坐标形式:

[xy1]=[sx000sy0001]R(α)[xy1]R(α)=R(α)=R(α)1

切变

shear

[xy]=[1a01][xy]

旋转

shear

[xy]=[cosθsinθsinθcosθ][xy]

齐次坐标形式:

[xy1]=[cosθsinθ0sinθcosθ0001]S(sx,sy)[xy1]

平移

仿射变换(Affine Transformations)形式:

[xy]=[1001][xy]+[txty]

齐次坐标形式:

[xyw]=[10tx01ty001]T(tx,ty)[xy1]

齐次坐标(Homogenous coordinates)

在齐次坐标中,一个 2D 点可以表示为 (x,y,1),一个 2D 向量可以表示为 (x,y,0);

在齐次坐标中,[xyw] 代表的是一个 2D 点 [x/wy/w1]w0

这样就有:

  • vector + vector = vector
  • point - point = vector
  • point + vector = point
  • point - point = point (中点)

Complex Transforms

如何绕指定的点旋转?

shear

T(c)R(α)T(c)

3D 变换

[xyz1]=[abctxdeftyghitz0001][xyz1]

缩放

S(sx,sy,sz)=[sx0000sy0000sz00001]

平移

T(tx,ty,tz)=[100tx010ty001tz0001]

旋转

shear

Rx(α)=[10000cosαsinα00sinαcosα00001]Ry(α)=[cosα0sinα00100sinα0cosα00001]Rz(α)=[cosαsinα00sinαcosα0000100001]

基于欧拉角定义:

Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)

绕任意轴 n 旋转,根据罗德里格斯旋转公式 ‌(Rodrigues' rotation formula):

R(n,α)=cos(α)I+(1cos(α))nn+sin(α)[0nznynz0nxnynx0]N