我想把一辆行驶的汽车贴在弯曲的土地上。我可以计算每个车轮的y坐标(在我的情况下是高度)。这4个点形成一个平面。我不知道如何从这4个品脱计算旋转矩阵,所以我可以将它应用到汽车上。所以这就是我想要实现的目标:
calculateRotationMatrix(P1,P2,P3,P4);
BTW我正在使用c ++和openGL。
有人可以帮助我吗?
答案 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足够大时才应计算矩阵。也可能是这样的情况,一些矢量指向相反的方向,这取决于定义点的缠绕顺序。在这种情况下,只需切换交叉函数的两个参数。