旋转所有点以与矢量对齐

时间:2012-07-30 21:06:38

标签: vector rotation

我有一个矢量v =(x,y,z),我想旋转所有点,使点(x,y,z)=(0,0,sqrt(x ^ 2 + y ^ 2) + z ^ 2)。换句话说,我想让矢量v的方向为z轴,并旋转所有点,使其成立。

我希望点(1,1,0)转到(0,0,sqrt(2)),而点(0,0,1)转到(-1 /(sqrt(2)) ), - 1 / sqrt(2),0)给出(1,1,0)的av。

我在unity3d的左手轴系统中工作,其中y是垂直的。

我当前的方法是这样的,使用v =(vx,vy,vz)和x,y,z是要旋转的点。

float vx = 1;
float vy = 1;
float vz = 0;



float c1 = -vz/(sqrt(vx*vx + vz*vz));
float c2 = -sqrt(vx*vx + vz*vz)/sqrt(vx*vx + vy*vy + vz*vz);
float s1 = -vx/(sqrt(vx*vx + vz*vz));
float s2 = -vy/sqrt(vx*vx + vy*vy + vz*vz);


float rx = x * c1  + y*s1*s2 - z*s1*c2;
float ry = x * 0 + y*c2 + z * s2;
float rz = x * s1 - y*s2*c1 + z*c1*c2;

2 个答案:

答案 0 :(得分:0)

您正在寻找带有 fv =(0,0,1),| x | = | f > FX |;这需要

      ( t1  t2  t3 )
f =   ( u1  u2  u3 )
      ( w1  w2  w3 )

其中 w := v / | v |,t,u,w是成对正交且| t < / EM> | = | û | = | 瓦特 | = 1。

选择 t u 取决于您想要做什么,但如果您只需要 t u ,通过3d cross product得到一些。

答案 1 :(得分:0)

我找到答案,通过取(0,0,1)的叉积来找到旋转轴,然后使用它作为旋转轴,角度是矢量(0,0,1)和()之间的角度。 VX,VY,VZ)。

http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle