在给定旋转矩阵的情况下找到顶点的新位置

时间:2014-10-02 15:54:14

标签: math graphics geometry rotational-matrices

我有两个三角形朝向任意方向。我有两个三角形的前向矢量,我想对齐每个前向矢量以面向相同的方向。我只能绕世界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朝向相同的方向。

参考图片:

enter image description here

先谢谢大家的帮助。

2 个答案:

答案 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