四元数或 3 角,碰撞反应..3D

Quaternion or 3 Angles, reaction from collision. 3D

本文关键字:3D 碰撞 四元数      更新时间:2023-09-26

我已经用一艘船编写了一个简单的游戏,并且具有基本的碰撞检测功能。 但我正在努力计算碰撞的有效反应。

船舶旋转由四元数 Q(w,x,y,z) 表示。

它的位置是一个坐标P(x,y,z)。

表面上的碰撞是坐标 C(x,y,z)。

碰撞后沿表面滑动的方向是单位向量 S(x,y,z)。

曲面法线是单位向量 N(x,y,z)。

游戏有六个自由度,没有特定的世界"向上"方向。

如何计算正确的旋转以应用于船舶,使其面向方向 S? *同时尽量减少船舶局部"向上"方向的变化。任何伪代码或指向数学解释的指针将不胜感激。

目前,我正在从滑动方向计算四元数并将其应用于船舶,但显然没有保留"向上"方向。

:S

已解决

它现在正在工作。

通过计算两个向量(船舶"Fwd"方向和滑动矢量 (S))之间的四元数来解决,然后将该四元数乘以当前的船舶旋转 (Q)。

// quaternion from two vectors
quat quat::fromtwovectors(vec3 u, vec3 v) {
    vec3 w = cross(u, v);
    quat q = quat( dot(u, v), w.x, w.y, w.z);
    q.w += q.magnitude();
    return normalize(q);
}