gpt4 book ai didi

math - 2D 碰撞响应 - 旋转、移动的多边形撞击墙壁

转载 作者:行者123 更新时间:2023-12-05 01:03:20 25 4
gpt4 key购买 nike

当其中一个顶点与它发生碰撞时,我试图将具有速度和角速度的多边形从(不可移动的)墙上弹开。我可以检测到碰撞,我已经弄清楚如何计算输入并知道我需要什么输出,但还没有找到或制定出响应的实现。任何帮助将不胜感激。

function collisionResponse(
c, // object center of mass position
v, // velocity of object
a, // the angular velocity of the object
p, // point of contact with line
n // normalized normal of line
) {
// Make a vector from center mass to contact point
cp = p - c;

// Total velocity at contact point (add angular effect)
pv.x = v.x - cp.y * a;
pv.y = v.y + cp.x * a;

// Reflect point of contact velocity off the line (wall)
rv = reflect( pv, n );

// ..magic happens.. ??

result.v = ?? // resulting object velocity
result.a = ?? // resulting object angular velocity
return result;
}

最佳答案

虽然并非完全微不足道,但计算可以简化为高中数学水平。我会走大部分——但不是全部——路:我留给你写下并求解的最终二次方程。 There is no LateX on SO ,所以请耐心等待。

答案取决于几个附加参数:(1) 物体 M 的质量,(2) moment of inertia对象的,表示为 I,(3) An elasticity coefficient for the collision ,说 alpha - 意思是,在碰撞中保留了多少动能:0 表示能量完全损失(塑性碰撞),1 表示动能完全保存(完美弹性碰撞)。

这堵墙运作着一些未知的impulse根据牛顿力学规则,物体上的 J(基本上是 F dt)沿着 rv(用您的符号),导致直线动量和角动量的变化:

J x cp = I * diff(a) (this is a cross product, more below)

J = M * diff(v)

假设初始速度为 Vi,最后一个速度为 Vf,同样,初始角速度为 Ai,最后一个角速度为 Af。所以:

Vf = Vi + J/m

Af = Ai + (J x cp) / I

初始动能和最终动能为:

Ei = 0.5 * M * Vi^2 + 0.5 * I * Ai^2 Ef = 0.5 * M * Vf^2 + 0.5 * I * Af^2

让 Vf 和 A​​f 进入:

= 0.5*M*(Vi + J/m)^2 + 0.5*I*(Ai + (J x cp) / I)^2

现在我们要求最终动能是初始动能的 alpha 倍(这是碰撞弹性的定义)。如果您将这两个表达式等同,您将得到 J 中的二次方程 - 记下解决方案,您将获得所要求的 Vf 和 A​​f。

关于叉积的注意事项:在 2D 中,乘积 J x cp 可以简化为以 J*cp*sin(theta) 形式获得的标量,其中 theta 是cp与rv的夹角。

Theta 已签名,必须注意其符号!简而言之,如果你的 a(角动量)对于逆时针旋转是正的 - 那么 theta,即 J 和 cp 之间的角度,应该是从 J 到 cp 的逆时针角度。例如+45 当 cp 从 J 逆时针旋转 45 度时。(当然是弧度)

这大概是我在 SO 的 markdown 中所能做的最好的了。随时询问是否需要更多说明。

[编辑:](1) 我将 -cp 改回 cp。这个乘法顺序 (Jxcp) 已经翻转了符号,不需要额外翻转。

(2) 这是一个无 LateX 的图形尝试: J cp

(3) 仅当假设质量密度均匀时,m 和 I 才与常乘系数相关。如果您确实假设可以删除其中一个输入 - 但它们通常保留为两个,因为它们形成了一种更直接的描述对象的方式。

(4) 澄清:moment of inertia I 不是要从等式中推导出来的变量,它是问题的参数。就像质量 M - 本质上,加速物体的难度 - 它描述了旋转物体的难度。详细(不复杂)的积分计算在维基百科链接上,对于简单的物体——球、圆柱体、立方体——你可以很容易地在网上找到预制结果。

关于math - 2D 碰撞响应 - 旋转、移动的多边形撞击墙壁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30851394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com