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

转载 2015年07月08日 10:24:40

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

                                By czg1989  date2012-4-24

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

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

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

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

步骤:首先我们将向量v进行分解:vllvT; 分别平行于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相同,wvT同时在垂直于n的平面内。WvTn旋转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,θ) = D3D绕任意轴旋转推导过程及结论,P’,Q’,R’带入即可。

具体参考D3D数学。

相关文章推荐

D3D空间变换和矩阵作用

一.空间变换流程 在渲染流水线中对物件进行空间变换,实现3D坐标转换到屏幕绘制空间的作用; 1 变换过程:局部坐标系→世界坐标系→观察坐标系→投影坐标系→屏幕坐标系 2 采用的变换矩阵:世界矩阵,观察...

绕任意轴旋转的推导

万丈高楼平地起;勿在浮沙筑高台。 暂时放下其他的东西的学习,还不能称之为学习。潜心研究pbrt,看到第二章绕任意轴的旋转一部分,但是只是给了一个大体的推导,最终的推导并没有给出,所以在此做一...

矩阵改变,平移,缩放,旋转(转)

缩放矩阵模型比较大时,就需要把它缩小,这样就需要使用到缩放矩阵。缩放矩阵如下所示:其中的S就是缩放系数,如果要放大,就需要设置S大于0。如果要缩小,就要设置S小于1大于0。D3D里已经准备好一个设置这...

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

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

3D数学基础——复数旋转矩阵的推导

原文链接:http://www.cnblogs.com/glshader/archive/2010/10/23/1858925.html   首先,我要感谢莱昂哈德·欧拉先生,他的智慧之光打破了时...

3D渲染管线中的变换矩阵及推导过程

渲染管线负责执行一系列必要的步骤从而把3D场景转换为可以在显示器上显示的2D图像。在Direct3D中,渲染管线的步骤大致如下: (1)局部坐标系到世界坐标系 假设我们在制作一款游...

已知空间中某个3d物体的欧拉角(p,h,b),求该物体绕固定轴(v)旋转固定角度(theta)后该物体的欧拉角p',h',b'

已知空间中某个3d物体的欧拉角(p,h,b),求该物体绕固定轴(v)旋转固定角度(theta)后该物体的欧拉角p',h',b' 1.矩阵转欧拉角 2.四元数转矩阵 3.轴角对转四元数 4.欧拉角转矩...

3D任意组件的旋转动画

绕任意轴旋转的矩阵推导

绕任意轴旋转的矩阵推导   左手坐标系下,一点绕任意轴旋转θ角的右乘矩阵: 其中C为cosθ,S为sinθ,A为单位化的旋转轴 以下推导均为左手坐标   首先我们将P看成从原点出发的自由向量,将其...

绕任意轴旋转的矩阵推导

左手坐标系下,一点绕任意轴旋转θ角的右乘矩阵: 其中C为cosθ,S为sinθ,A为单位化的旋转轴 以下推导均为左手坐标   首先我们将P看成从原点出发的自由向量,将其分解为平行于轴A...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)