zoukankan      html  css  js  c++  java
  • 几何变换

    几何变换

    概述

    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轴的方向向量代入,即可得到特定的齐次变换矩阵。

    多个旋转矩阵相乘的技巧:

    若一个旋转轴方向会随着另一个旋转轴方向旋转,那么可以先乘其旋转矩阵再乘另一个旋转矩阵。

    否则,先乘另一个旋转矩阵再乘这个旋转矩阵。

  • 相关阅读:
    P7473 [NOI Online 2021 入门组] 重力球
    CF896D Nephren Runs a Cinema
    [持续更新]一些有趣的数学问题
    [微积分与无穷级数]AMM Problems笔记
    [补题]SWERC-2018
    [补题]Asia Regional Contest, Tokyo, 2014

    [NOI2005]瑰丽华尔兹-单调队列优化DP
    [补题]2017多校D-BD-区间筛/二分+线段树
    [补题]2017多校5A/HDU6085-Rikka with Candies-bitset优化
  • 原文地址:https://www.cnblogs.com/fr-ruiyang/p/14446877.html
Copyright © 2011-2022 走看看