Color Scheme
Find People
Username
Password
Sign Up
old site http://222.195.74.11/
中文版 Location: Homepage >> Yanqing Su : CV - Blog

Ubuntu

Poster:

1. 三维坐标旋转
对3维坐标变换应该用4*4的矩阵,这样可以把平移、旋转、缩放等操作都用4*4的矩阵表示。
相应的坐标向量就加一个量w,即X   =   [x   y   z   w]^T,w=1
平移操作
[1   0   0   Tx]
[0   1   0   Ty]   =   T
[0   0   1   Tz]
[0   0   0   1]
上面的矩阵T左乘坐标向量X就得平移后的向量X ',X '   =   T   X
绕x轴旋转
[1   0   0   0]
[0   cos   t   -sin   t   0]   =   Rx
[0   sin   t   cos   t   0]
[0   0   0   1]
绕y轴旋转
[cos   t   0   sin   t   0]
[0   1   0   0]   =   Ry
[-sin   t   0   cos   t   0]
[0   0   0   1]
绕z轴旋转
[cos   t   -sin   t   0   0]
[sin   t   cos   t   0   0]   =   Rz
[0   0   1   0]
[0   0   0   1]

然后就根据操作顺序,把矩阵依次相乘就得变化后的坐标。
比如先沿x轴平移10个单位,再绕x轴旋转30,再绕y轴选择-30度,那变换就是
Ry   *   Rx   *   T   *   X
其中矩阵中Tx   =   10,Rx中的t=30,Ry中的t=-30


2.三维坐标旋转

在处理三维坐标旋转时,使用标准的数学公式是没有问题的。可是把二维坐标旋转调用三次,也可以实现三维坐标的旋转,并且有易读易懂,処理速度快的优点。

void Rotate3(double x1, double y1, double z1,
            double alphaX,double alphaY,double alphaZ,
            double& x2, double& y2, double& z2)
{
//Z Axis Rotation
double x3 = x1 * cos(alphaZ) - y1 * sin(alphaZ);
double y3 = x1 * sin(alphaZ) + y1 * cos(alphaZ);
double z3 = z1;

//Y Axis Rotation
double z4 = z3 * cos(alphaY) - x3 * sin(alphaY);
double x4 = z3 * sin(alphaY) + x3 * cos(alphaY);
double y4 = y3;

//X Axis Rotation
y2 = y4 * cos(alphaX) - z4 * sin(alphaX);
z2 = y4 * sin(alphaX) + z4 * cos(alphaX);
x2 = x4;
}


求向量夹角(0,2!pi)
在三维空间当中,经常涉及到计算两个向量之间的角度问题,而且这个角度是特定的方向角度

也就是说,围绕他们的公共法向量旋转的角度

假定这两个向量是a和b

我们知道 c=a×b是一个向量,方向是按照右手坐标系生成的,垂直于ab所在平面的向量,c向量的模是|c|=|a|*|b|*sinCita

同时,我们知道,向量a*b是一个数,它的大小是是 |a|*|b|*cosCita

根据这两个表达式,我们似乎可以用  tanCita = |a×b|/(a*b)来计算夹角

但是,这个计算是有问题的,因为|c|这个求模运算,永远返回的是一个整数,体现不出方向的问题

为了解决这个问题,我们可以把c向量和ab的转轴也是法向量N进行点乘来解决

假定b是围绕N这个单位向量旋转了cita角达到了b

那么显然(a×b)*N就是我们需要的c的模了

另外,我们需要知道的是,从a到b的旋转角度是0到360度范围的

借助atan2函数,可以完美的计算出这个旋转角度

cita = atan2( (a×b)*N,  a*b)

这个计算当中,a和b的模长可以是任意的,只要非0即可

无需对他们进行单位化处理,唯一需要单位化的转轴(法向量)N

附注:这个技术在物体的运动控制,比如导弹跟踪的算法当中会用到
Yanqing Su
Posted at 2011-05-24 19:44 CST
Last modified at 2011-05-24 20:12 CST
Link to this poster
Top


Locations | Statistics | FAQ
Best view under the 1024x768 resolution and with the normal size of fonts.
Designed & developed by Yuming Wang, run for 6350 days since December 15, 2006, and last upgraded on May 28th, 2009.
Powered by Apache + PHP coded cOpfOs 3.11.1 last upgraded on February 22nd, 2010.
Copyright © 2006, all rights reserved.