3d 三维非弹性碰撞,穿透超出时间步长之间的对象边界

3d 三维非弹性碰撞,穿透超出时间步长之间的对象边界,3d,collision,3d,Collision,因此,2个圆之间的碰撞检测很容易用简单的条件(如d

因此,2个圆之间的碰撞检测很容易用简单的条件(如d<(r1+r2))覆盖,但是如果对象在2个时间段内相互穿过会发生什么

我想写一个程序,在初始速度和加速度不是0的球池中移动圆柱体。 如果厚度太复杂,那么我可以考虑具有无限厚度的极硬线的细弦

。 碰撞问题已说明,未按比例绘制

圆柱体直立并与z轴对齐。它的底部以恒定速度沿单个任意方向滑动,因此无论碰撞产生多大的力,它的路径都不会改变。球是以随机运动的方式运动的,它们自己的碰撞是单独计算的,这里不需要考虑

我想使用惩罚碰撞响应,但我无法确定穿透深度。如果有更简单的非弹性碰撞反应,我也可以试试

因为它是数值解,所以每个时间步的位置都是离散的。如果速度未被限制,则可能发生以下问题:

对于单个时间步,球和圆柱体都在移动,如果它们的速度足够快,球将从Tn向右穿过圆柱体移动到Tn+1,并通过简单距离测试d<(r1+r2)

如果球和球体正好通过对方,如果附件中出现问题,我应该如何使用一阶近似找到碰撞点?检查它们是否碰撞的正确条件是什么?如何计算惩罚力以反映正确的碰撞


如何计算罚款?对于计算适当的穿透力和碰撞力的适当法线,我也有点困惑。

时间步长可以是离散的,但计算仍然可以是连续的,连续函数可以触发额外的时间点,也可以在内部求解。这个方程结合数值积分并不难解。最简单的解决方案是,当碰撞超过其碰撞点时,触发某种自适应的时间步长减半。但我所做的是数值解而不是解析解,设置只能通过数值解来解决,因为球本身使用数值方法来解算它们自己的运动。确实,时间步长可以是变化的,但我在这方面的经验不足,无法使用常数时间步长以外的任何东西。数值解并不意味着离散解。这些球可能使用的是连续解。例如,Runge-kutta解算器是连续的,而不是离散的。它尝试拟合连续样条曲线进行积分,积分的近似值是精确的。同样,你可以尝试用样条曲线来近似函数,并在该样条曲线上求解精确的碰撞点,例如,使用空间分割方案来进行更精确的碰撞。我将尝试一下,看看它是如何进行的,但是你能告诉我如何计算碰撞点和法向量吗?在我的程序中,我不存储以前的速度,因此只有tn+1对我可用,我将使用当前速度对过去进行线性插值,以计算它们的撞击点,但我不知道如何做到这一点。我有2个速度向量和2个点,这意味着我可以画线并找到交点。这很好,但是球和圆柱体有它们自己的半径,这意味着这不仅仅是一个简单的直线相交计算。再次更新注释你能告诉我如何计算碰撞点和法向量吗?在我的程序中,我不存储以前的速度,只有当前时间可用,我将使用当前速度对过去进行线性插值,以计算它们的撞击点,但我不知道如何做到这一点。我有2个速度向量和2个点,这意味着我可以画线并找到交点。这很好,但是球和圆柱体有它们自己的半径,这意味着这不仅仅是一个简单的直线相交计算。