【问题标题】:Placing a circle so that it does not collide with any other circles放置一个圆圈,使其不会与任何其他圆圈碰撞
【发布时间】:2015-06-01 14:19:02
【问题描述】:

给定一个画布,其中包含一堆半径为 50 的圆,我如何将另一个半径为 10 的圆放置在随机位置,使其不会与任何现有的圆发生碰撞或重叠?

我知道我可以放置圆圈,然后检查是否有任何碰撞并重试,但是我需要放置很多圆圈,这可能会卡住。想知道是否有更好的方法来解决这个问题。

【问题讨论】:

  • 您好,欢迎来到 Stackoverflow。您能否向我们展示一些您迄今为止尝试过的代码?
  • 基本方法是定位它 - 然后检测碰撞(使用基本的圆-圆碰撞检测)。如果有碰撞,请将其放在其他地方。重复。 (如果失败次数过多;中止和/或重新启动该过程。)
  • 这将用于模拟,可能会有很多碰撞,所以我只是想知道有什么比测试随机点更好,直到一个点成功。
  • @user3130915 - 如果您“预先映射”了一个潜在圆圈位置的网格,您可以将这些位置放在一个数组中,然后随机将它们拉出来并使用它们。但圆圈位置将仅限于您存储的位置。
  • 如何在不尝试画布上的每个像素的情况下创建潜在位置网格。

标签: javascript 2d collision-detection game-physics


【解决方案1】:

将要使用的解决方案是创建另一个具有相同大小的图像,然后将每个圆渲染到该图像上,但新半径等于现有圆半径加上我想要放置的半径。然后每个没有圆圈的像素都是一个可能的位置,我可以从这些位置中选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多