图形学笔记——矩阵变化

一、Scale、Rotate、Translation

对于拉伸和旋转变化基本形式为:
[x′y′z′]=P[xyz] \left[\begin{matrix} x' \\ y' \\ z' \end{matrix}\right] =P\left[\begin{matrix} x \\ y \\ z \end{matrix}\right] xyz=Pxyz
其中PPP是变化矩阵,对于拉伸变化来讲,需要具体根据拉伸后以及拉伸前的图形求解该矩阵。

对于旋转变化来讲,只有对于x,y,z三个轴的旋转的组合为其他变化,如果旋转轴不过原点,可以先做平移变化移到过原点,然后再进行旋转变化,最后再平移回去。具体的对于x,y,z的旋转矩阵如下:
Rx=[1000cosθ−sinθ0sinθcosθ]Ry=[cosθ0sinθ010−sinθ0cosθ]Rz=[cosθ−sinθ0sinθcosθ0001] R_x=\left[\begin{matrix} 1 &0 &0\\ 0 &cos\theta &-sin\theta \\ 0 &sin\theta &cos\theta \end{matrix}\right]\\ R_y=\left[\begin{matrix} cos\theta &0 &sin\theta\\ 0 &1 &0 \\ -sin\theta &0 &cos\theta \end{matrix}\right]\\ R_z=\left[\begin{matrix} cos\theta &-sin\theta &0\\ sin\theta &cos\theta &0 \\ 0 &0 &1 \end{matrix}\right] Rx=1000cosθsinθ0sinθcosθRy=cosθ0sinθ010sinθ0cosθRz=cosθsinθ0sinθcosθ0001
本身旋转矩阵就是正交矩阵,所以如果顺时针旋转θ\thetaθ角,只需求旋转矩阵的转置(也就是逆)即可。

对于平移变化来讲,是不能用矩阵乘法表示的,只能用矩阵加法表示:
[x′y′z′]=[xyz]+[x0y0z0] \left[\begin{matrix} x'\\ y' \\ z' \end{matrix}\right]=\left[\begin{matrix} x\\ y \\ z \end{matrix}\right]+\left[\begin{matrix} x_0\\ y_0\\ z_0 \end{matrix}\right] xyz=xyz+x0y0z0

二、Homogenous Coordinate

齐次坐标系把平移变化和拉伸/旋转变化同时用一次乘法完成,三维情况下形式如下
[x′y′z′w′]=[P3∗3tXtytX01][xyzw] \left[\begin{matrix} x' \\ y' \\ z' \\ w' \end{matrix}\right]=\left[\begin{matrix} P_{3*3} &t_X\\ &t_y\\ &t_X\\ 0 &1 \end{matrix}\right]\left[\begin{matrix} x \\ y \\ z \\ w \end{matrix}\right] xyzw=P330tXtytX1xyzw
其中PPP为拉伸/旋转的变化矩阵,t⃗\vec tt为平移向量,w在表示点的时候是1,表示向量的时候是0,本身w并没有特殊含义,只是为了运算方便加的一个量,当w不为1时,可以同除w进行归一。

特别注意齐次坐标系先进行拉伸/旋转在进行平移,如果你的变化需要先平移然后再拉伸/旋转,需要写成以下形式:
x⃗′=R⋅T⋅x⃗ \vec x' = R\cdot T \cdot \vec x x=RTx
T为平移变化,R为旋转/拉伸变化,可以应用结合律既RT合并成一个矩阵再作用,但不能交换顺序

三、Rodrigues旋转公式

具体推导和内容见:https://www.cnblogs.com/wtyuan/p/12324495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值