我有一个矢量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;
答案 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