从4个点计算旋转矩阵

时间:2015-11-13 23:14:42

标签: c++ opengl 3d

我想把一辆行驶的汽车贴在弯曲的土地上。我可以计算每个车轮的y坐标(在我的情况下是高度)。这4个点形成一个平面。我不知道如何从这4个品脱计算旋转矩阵,所以我可以将它应用到汽车上。所以这就是我想要实现的目标:

calculateRotationMatrix(P1,P2,P3,P4);

BTW我正在使用c ++和openGL。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

如果你保证所有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旋转α角的矩阵。如果矩阵库不支持围绕任意轴创建旋转轴,则可以找到here形式。

请注意,当alpha非常小时会出现奇点(N会消失),因此只有在alpha足够大时才应计算矩阵。也可能是这样的情况,一些矢量指向相反的方向,这取决于定义点的缠绕顺序。在这种情况下,只需切换交叉函数的两个参数。