加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在两个物体碰撞的三角洲时间?

发布时间:2020-12-15 23:28:16 所属栏目:百科 来源:网络整理
导读:如果以前发布过,我很抱歉.我似乎无法通过Stackoverflow找到关于这个主题的任何内容,也没有找到任何其他谷歌搜索. 我有两个对象,都包含位置(x和y),以及线速度(x和y).这些物体正在通过2d平面移动.我需要检测这些物体何时碰撞,如果它们会发生碰撞.我的情况最大
如果以前发布过,我很抱歉.我似乎无法通过Stackoverflow找到关于这个主题的任何内容,也没有找到任何其他谷歌搜索.

我有两个对象,都包含位置(x和y),以及线速度(x和y).这些物体正在通过2d平面移动.我需要检测这些物体何时碰撞,如果它们会发生碰撞.我的情况最大的问题是物体的半径,因为它会在触摸时产生影响.

我在一个月的时间内尝试了各种解决方案来解决这个问题,但我只是没有攻击它.我设法做的是计算对象的两个直线公式,最后得到两个的b和c(y = mx c).我试图将这两个公式相互比较,其中x = x和y = y,但最终得到一个非常复杂的方程式,并且不知道如何将其转换为c#.

该功能也需要在<50ms内触发,使问题复杂化.任何建议都会有很长的路要走.

解决方法

您可以将问题表示为两个 vector方程的系统

p1 = u1 + v1 t
p2 = u2 + v2 t

其中p1是给定初始位置u1,速度v1和scalar时间t的第一个对象的位置.我们想要解决物体刚接触的那一刻,描述

r1 + r2 = |p1 - p2|

其中r1和r2是对象的半径.让我们定义一些变量,这样我们的推导就更清晰了:

x  = u1.x - u2.x
y  = u1.y - u2.y
x' = v1.x - v2.x
y' = v1.y - v2.y

然后我们可以继续解决如下:

r1 + r2    = |p1 - p2|
               = sqrt((p1.x - p2.x)^2 + (p1.y - p2.y)^2)                 definition of vector magnitude

=> (r1 + r2)^2 = (p1.x - p2.x)^2 + (p1.y - p2.y)^2                       square both sides
               = (x + x' t)^2 + (y + y' t)^2                             substitute variable definitions
               = x^2 + 2 x x' t + x'^2 t^2 + y^2 + 2 y y' t + y'^2 t^2   expand squares of sums
               = (x'^2 + y'^2) t^2 + 2 (x x' + y y') t + x^2 + y^2       rearrange terms

=> (x'^2 + y'^2) t^2 + 2 (x x' + y y') t + x^2 + y^2 - (r1 + r2)^2 = 0   rearrange terms

这是一个二次方程,所以我们可以找到使用quadratic formula的方法

a = x'^2 + y'^2
b = 2 (x x' + y y')
c = x^2 + y^2 - (r1 + r2)^2

如果物体没有碰撞,则discriminant b ^ 2 – 4 a c将为负.如果对象在过去发生碰撞,则t的值可能为负.

说到这一点,我们如何解释我们获得两个根或两个t值的事实?请考虑以下图像:

enter image description here

如您所见,我们获得了第一次接触的解决方案,“条目”,以及当对象相交和分开时,“退出”.根据您的需要,这可能很有用,但如果您只需要接触时间,请选择较小的t.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读