从 4 个点计算旋转矩阵

calculate rotation matrix from 4 points

我想把一辆移动的汽车粘到一个弯曲的泰拉瑞安上。我可以计算每个轮子的 y 坐标(在我的例子中是高度)。这 4 个点构成一个平面。我不知道如何计算这 4 品脱的旋转矩阵,所以我可以将它应用到汽车上。所以这就是我想要实现的目标:

计算旋转矩阵(p1,p2,p3,p4);

顺便说一句,我正在使用 c++ 和 openGL。

有人可以帮我吗?

如果你保证所有 4 个点都在一个平面上,那么问题就不难解决:我们将这些点称为 (A,B,C,D) 并定义一个上向量 (UP = [ 0,1,0])

1) 计算平面法线(N)

N = normalize(cross(B-A, C-A));

2) 计算旋转轴(R)

R = normalize(cross(N,UP))

3) 计算旋转角度(alpha)

alpha = dot(N, UP)

生成的矩阵就是围绕 R 旋转一个 alpha 角的矩阵。如果您的矩阵库不支持围绕任意轴创建旋转轴,您可以找到 here.

的形式

请注意,当 alpha 非常小时(N 将消失)时存在奇点,因此您应该仅在 alpha 足够大时才计算矩阵。也可能是某些矢量指向相反方向的情况,具体取决于定义点的缠绕顺序。这种情况只要调换交叉函数的两个参数即可。