我有两个三角形朝向任意方向。我有两个三角形的前向矢量,我想对齐每个前向矢量以面向相同的方向。我只能绕世界x,y和z轴进行旋转(我使用的软件API非常有限)。
因此,设A =第一个三角形的前向矢量,B =第二个三角形的前向矢量。 我能够使用以下等式找到旋转矩阵:
v = B X A
s = ||v||
c = A dot B
vx = skew-symmetric cross-product matrix of v
R = I + [vx] + [vx]^2 * (1-c)/s^2
我能找到R。
我不知道如何使用R以便我可以移动三角形B的顶点,使得三角形B和三角形A朝向相同的方向。
参考图片:
先谢谢大家的帮助。
答案 0 :(得分:1)
您可以使用标准化矢量v作为轴,使用A和B之间的角度T,通过以下方式从轴角计算旋转矩阵(右手规则):
| cosT + x*x*(1 - cosT) y*x*(1 - cosT) + z*sinT z*x*(1 - cosT) - y*sinT |
| x*y*(1 - cosT) - z*sinT cosT + y*y*(1 - cosT) z*y*(1 - cosT) + x*sinT |
| x*z*(1 - cosT) + y*sinT y*z*(1 - cosT) - x*sinT cosT + z*z*(1 - cosT) |
x,y,z值是指归一化的v坐标。
现在,将此矩阵应用于B中的每个顶点。
PS:此矩阵按列主顺序排列,您可能想要转置它。
答案 1 :(得分:0)
首先通过计算角度between to forward vectors,您可以更轻松地完成此任务:
theta = arccos(dot(A, B)/(length(A)*length(B)))
这将为您提供旋转三角形的角度。然后你可以将这个角度放在2D rotation matrix中并用它来计算每个顶点的新位置:
vector2 newPos = R*oldPos, Where R is the rotation matrix