【问题标题】:circle vs circle sweep test that returns touch point返回接触点的圆形与圆形扫描测试
【发布时间】:2018-03-31 01:07:54
【问题描述】:

我正在寻找一种算法,它采用两个动态圆圈并返回接触点。出于某种原因,在尝试搜索此内容时,我只能找到以下资源:http://ericleong.me/research/circle-circle/,它描述了返回结果速度的算法。

【问题讨论】:

  • 这似乎是一些非常基本的东西,所以我可能只是遗漏了一些东西,或者我在错误的名称下查找它。当这被标记为重复时,我会释放业力:(

标签: language-agnostic geometry collision-detection collision


【解决方案1】:

你没有很好地定义问题。

让圆心随着方程移动

cx1 = cx1_0 + t * vx1
cx2 = cx2_0 + t * vx2
cy1 = cy1_0 + t * vy1
cy2 = cy2_0 + t * vy2

其中 cx1_0 是第一个圆的起始 X 坐标,vx1 是其速度的 x 分量。

当中心距等于半径之和时,圆相互接触。我们可以使用平方值:

(cx1 - cx2)^2 + (cy1 - cy2)^2 = (r1 + r2)^2

代入上面的表达式,开括号,求解未知参数t的二次方程。可以得到 0、1 或两种解(无交互、一触、存在交叉期)。然后计算触摸时刻的中心坐标并获取外部触摸的触摸点:

x_touch = (cx1 * r1 + cx2 * r2) / (r1 + r2)
similar for y

请注意,我强调外部,因为可能会发生内部接触(在这种情况下,距离等于半径的差异,但我认为这种情况对你来说并不有趣)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多