我有一个向量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),给定v (1,1,0)。
我在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;发布于 2012-08-01 22:59:04
我找到了答案,通过取(0,0,1)的叉积找到旋转轴,然后用它作为旋转轴,角度是向量(0,0,1)和(vx,vy,vz)之间的角度。
http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle
发布于 2012-07-31 05:18:28
您正在寻找一个具有fv=(0,0,1),|x|=|fx|的3x3矩阵f;这需要
( t1 t2 t3 )
f = ( u1 u2 u3 )
( w1 w2 w3 )其中w和v/ |v|,t,u,w是成对正交和|t|=|u|=|w|=1。
选择t和u取决于你想要做什么,但如果你只需要任何t和u,可以通过3d cross product获得一些。
https://stackoverflow.com/questions/11729587
复制相似问题