zoukankan      html  css  js  c++  java
  • 3D 矩阵旋转

    如图,需要将点(向量) v(x, y, 0) 绕 z 轴旋转角度 θ,求旋转后的点(向量) v'(x', y', 0)。

    大概思路:

    1. 将 v(x, y, 0) 分解, v(x, y, 0) = x * p(1, 0, 0) + y * q(0, 1, 0) + 0 * r(0, 0, 1)   -   r 为 z 轴方向基向量

    2. 绕 z 轴旋转基向量 p(1, 0, 0) 为 p'(cos(θ), sin(θ), 0), q(0, 1, 0) 为 q'(cos(90 + θ), sin(90 + θ), 0)

    3. 由向量 p' 和 q' 可以表示 v',即 v'(x', y', 0) = x * p'(cos(θ), sin(θ), 0) + y * q'(cos(90 + θ), sin(90 + θ), 0) + 0 * (0, 0, 1)

    用公式写一下逻辑:对一个点(向量)v, 可以用基向量表示为

    其中,p, q, r 分别表示为 x, y, z 轴上基向量。让 v 绕 z 轴旋转角度 θ,可以表示为

    其中 v' 表示旋转后的点(向量), p' 表示基向量 p 绕 z 轴旋转角度 θ, q' 表示基向量 q 绕 z 轴旋转角度 θ。3D坐标系以右手坐标系为准,即 x轴正方向右,y轴正方向上,z正方向外。p', q' 分别为

    最后得到旋转后的点 v' 表示为

    最后得到一个点(向量)绕 z 轴旋转的矩阵 Mz 为 

    同理可得到绕 x 轴和绕 y 轴的旋转矩阵 MxMy 分别为

    ,  

    懒是一种态度
  • 相关阅读:
    文件的基本操作
    ps工作界面
    HDU 6300
    HDU 6298
    HDU 2037
    HDU 2036
    Tesseract OCR
    What is the difference between position: static,relative,absolute,fixed
    How to Call a synchronize function asynchronizly in C#
    WCF note1
  • 原文地址:https://www.cnblogs.com/idoublewei/p/3634282.html
Copyright © 2011-2022 走看看