几何变换
概述
XYZ坐标系中的坐标和位移都可以用向量表示,将向量进行平移、缩放、旋转等几何变换操作可以用齐次变换矩阵相乘得到结果,而其反向操作可以用其逆矩阵相乘来实现,多次操作可以通过矩阵相乘来实现。
本文使用情景:以右手坐标系为基准,向量均为列向量,变换时矩阵左乘。
平移
平移向量 (t=(tx,ty,tz))
平移的齐次变换矩阵:
[T(t)= left(
egin{matrix}
1&0&0&tx\
0&1&0&ty\
0&0&1&tz\
0&0&0&1\
end{matrix}
ight)
]
其逆矩阵:
[T^{-1}(t)=T(-t)= left(
egin{matrix}
1&0&0&-tx\
0&1&0&-ty\
0&0&1&-tz\
0&0&0&1\
end{matrix}
ight)
]
缩放
缩放倍率 (s=(sx,sy,sz))
缩放的齐次变换矩阵:
[S(s)= left(
egin{matrix}
sx&0&0&0\
0&sy&0&0\
0&0&sz&0\
0&0&0&1\
end{matrix}
ight)
]
其逆矩阵:
[S^{-1}(s)=S(1/s)= left(
egin{matrix}
1/sx&0&0&0\
0&1/sy&0&0\
0&0&1/sz&0\
0&0&0&1\
end{matrix}
ight)
]
旋转
旋转轴方向 (r=(n_1,n_2,n_3))
旋转角度 ( heta)
旋转的齐次变换矩阵:
[R(r, heta)= left(
egin{matrix}
n_1^2+(1-n_1^2)cosθ&n_1n_2(1-cosθ)-n_3sinθ&n_1n_3(1-caosθ)+n_2sinθ&0\
n_1n_2(1-cosθ)-n_3sinθ&n_2^2+(1-n_2^2)cosθ&n_2n_3(1-caosθ)+n_1sinθ&0\
n_1n_3(1-cosθ)-n_2sinθ&n_2n_3(1-caosθ)+n_1sinθ&n_3^2+(1-n_3^2)cosθ&0\
0&0&0&1\
end{matrix}
ight)
]
其逆矩阵:
[R^{-1}(r, heta)=R(r,- heta)
]
将X、Y、Z轴的方向向量代入,即可得到特定的齐次变换矩阵。
多个旋转矩阵相乘的技巧:
若一个旋转轴方向会随着另一个旋转轴方向旋转,那么可以先乘其旋转矩阵再乘另一个旋转矩阵。
否则,先乘另一个旋转矩阵再乘这个旋转矩阵。