我有一个向量 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) 给定 av 为 (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;