ベクトル 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) の平均が与えられます。
私は、yが垂直であるunity3dの左手軸システムで作業しています。
私の現在の方法はこれで、 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;