D3D绕任意轴旋转推导及结论

By czg1989  date:2012-4-24

其实之前一直是记下公式的,今天看书的时候就推导了一下

首先假定任意旋转轴穿过原点,如果不穿过,通过平移就可以搞定。记单位向量n为旋转轴(单位向量方便)。旋转角度使用θ表示。

首先假定旋转矩阵为R(n,θ); v表示旋转前的向量,v’表示v绕轴n旋转θ角度后的向量,那么我们知道有v R(n,θ) = v’;下面就来考虑如果求R。

思路:转化,将问题转化到2D坐标系下进行解决。即我们在垂直于n的2D平面内解决。

步骤:首先我们将向量v进行分解:vll和vT; 分别平行于n和垂直于n。则根据向量分解我们可知vll+ vT = v; 这样分解之后再考虑这个问题就相对简单了,因为对于平行于n的部分,旋转对其不会产生影响,所以只需要考虑垂直部分就ok了。即将垂直部分旋转到vT’,那么

v’ = vll + vT’; 如下图(盗用D3D数学书上的图)

在这个图中,我们首先应该知道以下几个量的含义:

(1)   vll : v在向量n上的投影。vll  = n(v·n);

(2)   vT: v在垂直于n的平面上的投影。vT = v - vll;

(3)   w是一个临时向量,w同时垂直于vll 和vT; 模和vT相同,w和vT同时在垂直于n的平面内。W是vT绕n旋转90度的结果。可以通过n X vT得到。

又知道vT’ = cosθvT + sinθw;

带入已知量可知:

vll = n(v·n);

vT = v - vll = v - n(v·n);

w = n X vT = n X (v - vll) = n X v – n X vll = n X v – 0 = n X v;

vT’ = cosθ(v - n(v·n))+ sinθ(n X v);

带入v’ = vll + vT’ = (v-(v·n)n) cosθ + (n X v) sinθ + n(v·n);

其中我们知道三个基向量可以设定为(1,0,0),(0,1,0),(0,0,1);

令P = (1,0,0);,P’为转换后的基向量

则有P’ = (P-(P·n)n) cosθ + (n X P) sinθ + n(P·n)

=( (1,0,0) –( (1,0,0)·(nx, ny, nz))(nx, ny, nz)) cosθ + ((nx, ny, nz)X(1,0,0)) sinθ+(nx, ny, nz) ((1,0,0)·(nx, ny, nz))

=((1,0,0)- nx(nx, ny, nz))cosθ + (0, nz, -ny) sinθ + nx(nx, ny, nz)

= (1- nx2, -nxny, -nxnz) cosθ + (0, nz, -ny) sinθ + (nx2, nxny, nxnz)

= (cosθ - cosθnx2, -nxny cosθ, -nxnz cosθ) + (0, nz sinθ, -nysinθ) +

(nx2, nxny, nxnz)

= (cosθ - cosθnx2 + nx2, -nxny cosθ+ nz sinθ+ nxny, -nxnz cosθ-ny sinθ+ nxnz)

= (nx2(1-cosθ)+ cosθ, nxny(1- cosθ)+ nz sinθ, nxnz(1- cosθ)- ny sinθ);

P’ = (nx2(1-cosθ)+ cosθ, nxny(1- cosθ)+ nz sinθ, nxnz(1- cosθ)- ny sinθ);

同理令Q=(0, 1, 0), R=(0, 0, 1);Q’和R’分别是变换后的基向量

则有

Q’= (nxny(1- cosθ)-nz sinθ,ny2(1-cosθ)+ cosθ, nynz(1- cosθ)+nx sinθ);

R’= (nxnz(1- cosθ)+ny sinθ, nynz(1- cosθ)-nx sinθ,nz2(1-cosθ)+ cosθ);

由此可以我们需要构造的绕任意轴旋转的矩阵就是有三个变换后的基向量组成,如下:

 

R(n,θ) = ,将P’,Q’,R’带入即可。

具体参考D3D数学。

D3D绕任意轴旋转推导过程及结论相关推荐

  1. VTK笔记-几何变换-绕任意轴旋转

    绕任意轴旋转思路 中心轴与坐标轴平行   1.将旋转轴平移与坐标轴重合,物体也做平移操作:   2.物体绕坐标轴旋转:   3.执行步骤1的逆操作,将旋转轴平移回到原来位置,物体也对应平移: 中心轴与 ...

  2. 绕任意轴旋转矩阵推导

    该文是在学习 Physically Based Rendering 第2.7.6节绕任意轴旋转时对其公式的推导产生了兴趣. 首先,如图所示: 已知条件: 1). v \mathbf{v} v 是被旋转 ...

  3. open3d显示pcd点云并读取任意点的坐标+生成点云绕任意轴旋转的transformation matrix

    为了对点云进行旋转操作,达到各点云之间不对齐的效果,找到了生成点云绕任意轴旋转的矩阵的代码. 链接: https://blog.csdn.net/u010848251/article/details/ ...

  4. 三维坐标点绕任意轴旋转的新坐标计算

    任意轴可以用一个起点一个方向向量来表示.那么绕任意轴旋转就可以先将此轴移到通过原点,然后再旋转,再将旋转完的新坐标做反向平移. 则问题化为 计算绕通过原点的向量旋转任意角度后的新点.假设单位向量为(r ...

  5. CocosCreator | 绕任意轴旋转/绕任意点旋转/平滑旋转/自定义环形体、胶囊体/面向目标位置

    01 效果演示 Cocos Creator 版本:3.4.1 该 demo 演示了行星自转(绕任意轴旋转).行星公转(绕任意点旋转).镜头拉近/复位(平滑旋转).行星环(自定义环形体).行星轴(自定义 ...

  6. Unity3D鼠标&Touch拖拽控制节点绕任意轴旋转的实现

    这个拖拽最明显的一个优点就是有阻尼的效果 阻尼(damping)是指摇荡系统或振动系统受到阻滞使能量随时间而耗散的物理现象 using UnityEngine; using System.Collec ...

  7. 旋转——绕原点二维旋转,绕任意点的二维旋转,三维基本旋转,绕任意轴的三维旋转

    1 简介 计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移.旋转.缩放.剪切这几种.本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换. ...

  8. 沿任意轴旋转及其推导

    原博客地址:https://blog.csdn.net/zsq306650083/article/details/8773996 1. 2D中绕原点旋转 设基向量p,q和r分别是朝向+x,+y和+z方 ...

  9. 矩阵变换:沿任意轴旋转及其推导

    1. 2D中绕原点旋转 设基向量p,q和r分别是朝向+x,+y和+z方向的单位向量. 旋转角度为θ,基向量p,q绕原点旋转,得到新的基向量p`和q` 即旋转矩阵R(θ)为 2. 3d中绕坐标轴旋转 0 ...

最新文章

  1. Python/Jupyter Notebook以及可视化的运用
  2. java:不同数据类型的转换规则
  3. 2018.08.02 hdu1558 Segment set(并查集+计算几何)
  4. LeetCode MySQL 569. 员工薪水中位数(over窗口函数)
  5. 带你了解FPGA(1)--一些需要了解的概念
  6. sql 日期和当前日期时间差_SQL基础进阶16日期处理
  7. 基于Bayes和KNN的newsgroup 18828文本分类器的Python实现
  8. autohotkey循环
  9. PCD与STL格式及其内涵
  10. 英语口语收集(二十五)
  11. word 插入目录及错误!未找到目录项
  12. 数字信号处理学习笔记[1] 离散信号 奇异信号 抽样定理
  13. ESP32+阿里云+vscode_Pio
  14. 广告中的DSP、SSP和ADX
  15. 【朝花夕拾】Android性能篇之(四)Apk打包
  16. 高可用集群下的负载均衡(8):pacemaker + corosync + haproxy 实现高可用
  17. 格子路径问题-施罗德数
  18. 实体关系抽取几篇论文
  19. mysql geohash_算法:geohash
  20. 个人对于“初链”白皮书和黄皮书的解读

热门文章

  1. 哪里能够下载任意地区的高清卫星影像/地图?
  2. Skype拟1.21亿美元收买Qik 客岁净亏700万美元
  3. 阿里云发布ET工业大脑开放平台,交付只需6天!
  4. 在虚拟看透现实,「数字孪生」承载人类多大的野心?
  5. 20秋PHP作业3,大工20秋《模拟电子技术》在线作业3答案
  6. spark3.x 《自我总结》
  7. python海龟绘图小猪佩奇_宝宝爱看小猪佩奇,很简单,让我们用python搞定它
  8. 和chatgpt一起学天线概念----驻波比、方向系数、辐射电阻、辐射效率、主瓣宽度
  9. 寻找中位数(利用快速排序来寻找中位数)
  10. 从Linux源码看Socket(TCP)的bind