有效地旋转3d矢量在自己和另一个平面

时间:2013-12-31 01:14:11

标签: 3d geometry

我想知道3d矢量a是否可以在a跨越的平面和标准化矢量b中旋转90度,比直接前进(伪GLSL样式) ):

a=normalize(a);
vec3 axis=cross(a,b);
c=rotate(identity,90,axis)*a;

1 个答案:

答案 0 :(得分:0)

由于a和b跨越平面,因此它们不能共线。因此,b的一部分与a成直角。叫这个b'

na = norm(a)
b' = b - ( dot(a,b)/na ) * A / na
Arot = b' * na / norm(b')

这使得“朝向”旋转b。如果要“离开”旋转,请在最后一行中使用减号。这应该比任意轮换更少的指令。

如果a已经标准化,那么na==1会进一步简化:

b' = b - dot(a,b)* A
Arot = b' / norm(b')