zoukankan      html  css  js  c++  java
  • 矩阵运算(平移、缩放、旋转)

    (x',y',z')表示新的位置,
    (x,y,z)表示当前位置,
    (dx,dy,dz)平移的量。

    加法2D平移

    [egin{bmatrix} x' \ y' \ end{bmatrix} = egin{bmatrix} x \ y \ end{bmatrix} + egin{bmatrix} dx \ dy \ end{bmatrix} ]

    加法3D平移

    [egin{bmatrix} x' \ y' \ z' \ end{bmatrix} = egin{bmatrix} x \ y \ z \ end{bmatrix} + egin{bmatrix} dx \ dy \ dz \ end{bmatrix} ]

    乘法2D平移

    [egin{bmatrix} x' \ y' \ 1 \ end{bmatrix} = egin{bmatrix} 1 & 0 & dx \ 0 & 1 & dy \ 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ 1 \ end{bmatrix} = egin{bmatrix} 1(x) + 0(y) + dx(1) \ 0(x) + 1(y) + dy(1) \ 0(x) + 0(y) + 1(1) \ end{bmatrix} ]

    乘法3D平移

    [egin{bmatrix} x' \ y' \ z' \ 1 \ end{bmatrix} = egin{bmatrix} 1 & 0 & 0 & dx \ 0 & 1 & 0 & dy \ 0 & 0 & 1 & dz \ 0 & 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ z \ 1 \ end{bmatrix} = egin{bmatrix} 1(x) + 0(y) +0(z) + dx(1) \ 0(x) + 1(y) +0(z) + dy(1) \ 0(x) + 0(y) +1(z) + dz(1) \ 0(x) + 0(y) +0(z) + 1(1) \ end{bmatrix} ]


    (x',y',z')表示一个点经过缩放后的新位置,
    (x,y,z)表示未缩放前的原始位置,
    Sx、Sy、Sz分别表示在x轴、y轴和z轴方向上的缩放因子。
    注意:计算多个点的缩放,需要将每个点位置分别代入公式计算。

    2D缩放

    [egin{bmatrix} x' \ y' \ 1 \ end{bmatrix} = egin{bmatrix} Sx & 0 & 0 \ 0 & Sy & 0 \ 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ 1 \ end{bmatrix} = egin{bmatrix} Sx(x) + 0(y) + 0(1) \ 0(x) + Sy(y) + 0(1) \ 0(x) + 0(y) + 1(1) \ end{bmatrix} ]

    3D缩放

    [egin{bmatrix} x' \ y' \ z' \ 1 \ end{bmatrix} = egin{bmatrix} Sx & 0 & 0 & 0 \ 0 & Sy & 0 & 0 \ 0 & 0 & Sz & 0 \ 0 & 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ z \ 1 \ end{bmatrix} = egin{bmatrix} Sx(x) + 0(y) +0(z) + 0(1) \ 0(x) + Sy(y) +0(z) + 0(1) \ 0(x) + 0(y) +Sz(z) + 0(1) \ 0(x) + 0(y) +0(z) + 1(1) \ end{bmatrix} ]


    2D旋转

    (x',y',z')表示一个点经过旋转后的新位置,
    (x,y,z)表示未旋转前的原始位置,
    ( heta)为旋转角度(编程中以弧度为单位)
    注意:计算多个点的旋转,需要将每个点位置分别代入公式计算。

    [egin{bmatrix} x' \ y' \ 1 \ end{bmatrix} = egin{bmatrix} cos heta & -sin heta & 0 \ sin heta & cos heta & 0 \ 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ 1 \ end{bmatrix} ]

    绕Z轴3D旋转

    [egin{bmatrix} x' \ y' \ z' \ 1 \ end{bmatrix} = egin{bmatrix} cos heta & -sin heta & 0 & 0 \ sin heta & cos heta & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ z \ 1 \ end{bmatrix} ]

    绕X轴3D旋转

    [egin{bmatrix} x' \ y' \ z' \ 1 \ end{bmatrix} = egin{bmatrix} 1 & 0 & 0 & 0 \ 0 & cos heta & -sin heta & 0 \ 0 & sin heta & cos heta & 0 \ 0 & 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ z \ 1 \ end{bmatrix} ]

    绕Y轴3D旋转

    [egin{bmatrix} x' \ y' \ z' \ 1 \ end{bmatrix} = egin{bmatrix} cos heta & 0 & sin heta & 0 \ 0 & 1 & 0 & 0 \ -sin heta & 0 & cos heta & 0 \ 0 & 0 & 0 & 1 \ end{bmatrix} egin{bmatrix} x \ y \ z \ 1 \ end{bmatrix} ]


    四元数实现旋转

    https://zhuanlan.zhihu.com/p/27471300?group_id=862339882582945792
    https://www.cnblogs.com/hjlweilong/p/6018213.html
    https://blog.csdn.net/linyijiong/article/details/79777399
    https://www.cnblogs.com/jins-note/p/9512753.html

  • 相关阅读:
    设置共享文件夹大小
    About IConfigurationSectionHandler Interface
    zoj 1050
    SQL Server 数据库优化经验总结
    一、页面输出缓存
    [转]深入解读 ADO.NET 2.0 的十大最新特性
    ASP.NET 缓存学习
    [转]写给ASP.NET程序员:网站中的安全问题
    [转] ASP.NET 性能提升秘诀之管道与进程优化
    实战 SQL Server 2005 镜像配置
  • 原文地址:https://www.cnblogs.com/kingBook/p/13556910.html
Copyright © 2011-2022 走看看