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

时间:2015-03-09 13:11:13

标签: javascript math 3d geometry game-physics

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

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

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

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

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

表面法线是单位矢量N(x,y,z)。

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

如何计算适用于船舶的正确旋转,使其朝向方向S? *同时尽量减少船舶当地“向上”方向的变化。 任何伪代码或指向数学解释的指针都将非常感激。

目前我正在从滑动方向计算四元数并将其应用到船上,但显然“向上”方向未被保留。

:S

1 个答案:

答案 0 :(得分:0)

<强>解决

现在正在运作。

通过计算两个向量之间的四元数(船舶的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);

}