Vector 围绕原点旋转三维点/倾斜三维向量

Vector 围绕原点旋转三维点/倾斜三维向量,vector,3d,rotation,translation,Vector,3d,Rotation,Translation,我有一个指向某个方向的3D单位向量。现在我想得到一个新的单位向量,它与向量的方向成45度角,这个方向必须是随机的。有人知道计算新向量的方法吗 (或者,这可以表示为3D点围绕原点沿随机方向旋转45度。) 删除“随机”分量:如果我能找到任何与旧向量成45度倾斜的向量,我会很高兴,因为这样我就可以将该向量的端点绕旧向量旋转随机距离。假设你有一个向量v1。首先,你应该找到一个向量v2,它垂直于v1。然后你想找出的向量是v1和v2之间的一半,也就是说,v3=norm(norm(v1)+norm(v2))。

我有一个指向某个方向的3D单位向量。现在我想得到一个新的单位向量,它与向量的方向成45度角,这个方向必须是随机的。有人知道计算新向量的方法吗

(或者,这可以表示为3D点围绕原点沿随机方向旋转45度。)


删除“随机”分量:如果我能找到任何与旧向量成45度倾斜的向量,我会很高兴,因为这样我就可以将该向量的端点绕旧向量旋转随机距离。

假设你有一个向量v1。首先,你应该找到一个向量v2,它垂直于v1。然后你想找出的向量是v1和v2之间的一半,也就是说,
v3=norm(norm(v1)+norm(v2))
。如何找到v2?可以取v1和任何不平行于v1的向量的叉积。所以你可以这样做:

v2 = cross(v1, (1,0,0));
if (dot(v2, v2) < 0.001) v2 = cross(v1, (0,1,0));
v3 = normalize(normalize(v1)+normalize(v2));
v2=交叉(v1,(1,0,0));
如果(点(v2,v2)<0.001)v2=cross(v1,(0,1,0));
v3=标准化(标准化(v1)+标准化(v2));

最后,v1和v3之间的角度是45度。

您应该阅读有关四元数的内容。他们会帮你的。