700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > D3D绕任意轴旋转推导过程及结论

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

时间:2022-06-08 17:02:57

相关推荐

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

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

By czg1989date:-4-24

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

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

首先假定旋转矩阵为R(n,θ); v表示旋转前的向量,v’表示v绕轴n旋转θ角度后的向量,那么我们知道有vR(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, -nxnycosθ,-nxnzcosθ) + (0,nzsinθ,-nysinθ) +

(nx2, nxny, nxnz)

= (cosθ-cosθnx2+ nx2, -nxnycosθ+nzsinθ+nxny, -nxnzcosθ-nysinθ+nxnz)

= (nx2(1-cosθ)+cosθ,nxny(1-cosθ)+ nzsinθ,nxnz(1-cosθ)- nysinθ);

P’ =(nx2(1-cosθ)+cosθ,nxny(1-cosθ)+ nzsinθ,nxnz(1-cosθ)- nysinθ);

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

则有

Q’=(nxny(1-cosθ)-nzsinθ,ny2(1-cosθ)+cosθ,nynz(1-cosθ)+nxsinθ);

R’= (nxnz(1-cosθ)+nysinθ,nynz(1-cosθ)-nxsinθ,nz2(1-cosθ)+cosθ);

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

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

具体参考D3D数学。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。