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数学。

DirectX 让物体绕任意轴旋转

 D3D是通过Device的SetTransform来设置世界变换矩阵的。物体默认是在D3D的世界坐标原点上。如果我们要把它做一些变换再显示出来,就要计算一个该物体的世界矩阵matWorld,再...
  • xiaoyafang123
  • xiaoyafang123
  • 2017年09月28日 20:14
  • 205

绕任意轴旋转的矩阵推导

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

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

1. 2D中绕原点旋转 设基向量p,q和r分别是朝向+x,+y和+z方向的单位向量。 旋转角度为θ,基向量p,q绕原点旋转,得到新的基向量p`和q` 即旋转矩阵R(θ)为 ...
  • zsq306650083
  • zsq306650083
  • 2013年04月08日 19:30
  • 21425

绕任意轴旋转的推导

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

3D数学--学习笔记(三):3D中绕任意轴的旋转

本文转自:http://blog.csdn.net/zjc_game_coder/article/details/24269757 不要小看我们在Unity或者3DMAX中的一个简单的旋转物体操作。...
  • FightForFuture2013
  • FightForFuture2013
  • 2014年04月22日 11:39
  • 1746

空间向量绕任意轴旋转推导

空间向量绕任意轴旋转推导 From: http://www.zoditech.com/article.asp?id=14 左手坐标系下,一点绕任意轴旋转θ角的右乘矩阵: ...
  • ZGJORSON
  • ZGJORSON
  • 2013年05月12日 20:33
  • 2291

3D中绕任意轴旋转的推断问题

当然也能绕3D中任意轴旋转。因为这里不考虑平移,可以假设旋转轴通过原点。这种旋转比绕坐标轴的旋转更复杂也更少见。用单位向量n描述旋转轴,和前面一样的θ描述旋转量。让我们导出绕轴n旋转角度θ的矩阵。也就...
  • L_Andy
  • L_Andy
  • 2016年08月19日 09:50
  • 2241

3D数学--学习笔记(三):3D中绕任意轴的旋转

3D游戏开发基础--3D中绕任意坐标轴的旋转
  • huiguimoyu
  • huiguimoyu
  • 2014年04月21日 20:58
  • 2033

绕任意向量旋转分解到坐标系旋转

如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 一、原理解析 假设向量为(x,y,z),旋转角度为θ。 绕任意向量旋转的过程分...
  • itas109
  • itas109
  • 2015年06月26日 16:04
  • 2992

opencv——图像的旋转(绕X轴、Y轴、原点旋转)

#include #include int main(int argc ,char* argv[]) { //读取图像 IplImage* src1 = cvLoadImage("2.jpg"...
  • sinat_21119417
  • sinat_21119417
  • 2014年10月15日 22:23
  • 1507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:D3D绕任意轴旋转推导过程及结论
举报原因:
原因补充:

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