D3D绕任意轴旋转推导过程及结论
来源:互联网 发布:windows平板手势 编辑:程序博客网 时间:2024/05/01 21:14
D3D绕任意轴旋转推导及结论
首先假定任意旋转轴穿过原点,如果不穿过,通过平移就可以搞定。记单位向量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)
(2)
(3)
又知道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数学。
- D3D绕任意轴旋转推导过程及结论
- 绕任意轴旋转的矩阵推导
- 绕任意轴旋转的矩阵推导
- 空间向量绕任意轴旋转推导
- 绕任意轴旋转的矩阵推导
- 绕任意轴旋转的推导
- 绕任意轴旋转的矩阵推导
- 绕任意轴旋转的矩阵推导
- 绕任意轴旋转的变换矩阵的推导
- 利用四元树来计算一个坐标点绕任意轴旋转后,新坐标点的推导过程
- 任意轴旋转的矩阵推导
- 矩阵变换:沿任意轴旋转及其推导
- 矩阵变换:沿任意轴旋转及其推导
- 矩阵变换:沿任意轴旋转及其推导
- 阵变换:沿任意轴旋转及其推导
- 矩阵变换:沿任意轴旋转及其推导
- 绕任意轴旋转
- 绕任意轴旋转
- ddraw入门实例
- WebLogic11g-创建域(Domain)
- easyui datagrid checkbox单选时表头的checkbox不起作用,将其隐藏
- Count Complete Tree Nodes
- OpenGL 中文教程
- D3D绕任意轴旋转推导过程及结论
- 关闭 window 7 映射网络驱动器后,打开里面任何文件的提弹出安全提示的功能
- 代理模式原理及实例讲解
- Linux设备驱动——I2C总线
- Python笔记:反射(自省)指南
- 修改SQL sa密码
- 机器视觉在物联网中的应用
- 几个常用的函数原型
- 0-C语言-学习目的-为什么学习这门语言