在带有圆的2D空间中找到任意点[x,y]的圆的最近自由位置

沃尔明克

我正在制作一个游戏,其中用户玩家在屏幕上放置圆圈。重要的是,圆圈切勿重叠,因此我需要找出光标附近最可能的自由点。我发现了圆形填充算法,但是它们似乎不适合我的问题。过去,我也为box(here解决了类似的问题,但是对于圆圈,我似乎无法弄清楚。

我想出了如何在与一个圆相交甚至是两个圆相交时找到最近的自由位置。但是,我找不到能够处理复杂情况的健壮算法,该复杂情况具有任意排列的任何数量的圆圈

问题的精确描述:我有一个2D空间,其中包含任意数量的不相交的圆,并且所有圆都具有相同的半径(尽管这可能无关紧要)。我想找到下一个圆的位置,该位置将使其不与任何其他圆相交,并且其中心[x,y]最接近指定的位置[x,y]。

任何形式的建议都值得赞赏(参考,方法或(Java)库)。

ps奖励积分,如果解决方案包括确保圆保持在特定的边界框内(即显示)。

我的最终解决方案:(基于David Wallace的建议)

  • 计算两个圆心之间的最小距离(在我的情况下,所有圆的大小相同,因此始终为2 *半径)
  • 列出所有比最小距离更接近鼠标位置的圆
  • 如果0重叠:一切都很好!
  • 如果1重叠:沿着从比较圆的中心到鼠标位置的矢量,将新圆的中心移动到与比较的圆的中心的最小距离。
  • 如果2重叠:找出两个重叠的圆相交的位置。将新圆放置在最接近鼠标位置的交点上。如果此位置仍与任何圆圈重叠,请移至另一个交点。如果那不起作用,请离开新圈子。
  • 如果3个重叠:与2个重叠相同,则取最接近新圆圈的两个圆圈。

请注意,这并不完美,但在我的情况下(用户在屏幕上拖动新圆圈)就足够了。它在大多数情况下都起作用,而在大多数情况下却不起作用,通常是当有许多非常靠近的圆圈时,新圆圈仅停留在最后一个位置(有效)。然后,用户可以决定将其进一步拖动为适合,并更加精确地将其拖动到新的圆弧所在的位置。

达伍德·伊本·卡里姆

这不是一个完整的答案,但是您可以将其合并为一个。

假设您已经放置了半径为r1,r2,r3 ... rn的圆,其圆心分别为C1,C2,C3 ... Cn,并且您想放置一个半径为rz的新圆,则新圆的中心将具有位于一组以C1,C2,C3 ... Cn为中心的所有“放大”圆之外;半径(r1 + rz),(r2 + rz),(r3 + rz)...(rn + rz)。因此,如果光标位于P点,则需要考虑一些情况。

(1)如果P不在任何放大的圆中,则该问题得以解决。

(2)如果P只是在一个扩大的圆中,则沿该圆的半径向外移动,直到到达所有扩大的圆之外的点,或者直到到达另一个扩大的圆。前一种情况简化为方案(1);后者简化为方案(2)。如果P恰好是圆心,则选择任意方向。

(3)如果P在多个圆中,则找到从P到其所在圆的每个中心的方向。找到一对之间间隔最大的方向,并将该角度二等分,算出哪个方向前进的方向。例如,如果到圆心的方向是30deg,120deg和330deg,则将等分120deg和330deg之间的角度-然后朝225deg的方向前进。朝那个方向前进,直到到达圆的边缘,然后重新计算。继续执行此操作,直到返回场景(2)。

如果您陷入场景(3),该怎么办呢?也许只允许一定数量的步骤,然后退出。毕竟,可能没有合适的位置放置圆圈。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在3D空间中找到圆与无限圆柱的交点

来自分类Dev

检查圆是否适合非量化2D空间中的迷宫

来自分类Dev

如何在地图上找到任意点最近的位置?

来自分类Dev

D3js在圆上找到最近的点

来自分类Dev

在 3D 空间中绘制 (x,y,z) 点的 2D 数组 (Matplotlib)

来自分类Dev

在Python中找到曲线上最接近的点到有界n维空间中任意点的距离

来自分类Dev

将 2D 点投影到圆/曲线上

来自分类Dev

(C++) 夹住圆内的 2D 位置(使用中点圆算法绘制)

来自分类Dev

绘制包含80%(x,y)点的圆

来自分类Dev

如何在x,y点的2D数组中找到第一个极值?

来自分类Dev

在圆内找到最近的坐标

来自分类Dev

根据两点找到曲线的圆的半径和位置

来自分类Dev

在d维空间中找到一组n个点的直径

来自分类Dev

在3D空间中的一组点中找到两个最远的点

来自分类Dev

如何编写一个函数来在 Java 中的 2D 维数组中找到 2 个最近的点?

来自分类Dev

WebGL 2D圆作为精灵

来自分类Dev

从数组中找到2个最近的点

来自分类Dev

从数组中找到2个最近的点

来自分类Dev

D3js在圆上找到最接近的点

来自分类Dev

在Android中创建带有可点击点的圆

来自分类Dev

带有散景的 3 维圆(散点)图

来自分类Dev

如何绘制以给定的X和Y坐标为圆的中间点的圆?

来自分类Dev

如何为带有openlayers的圆设置新的位置/半径?

来自分类Dev

DFS,在无向图中找到圆

来自分类Dev

在Pygame中找到圆的圆周坐标

来自分类Dev

根据高度计算圆上的位置(X,Y)

来自分类Dev

仅给出点和距离时,如何在3D空间中获得圆路径?

来自分类Dev

在3D空间中绘制空心圆时出现奇怪的错误

来自分类Dev

是否有一种算法可以为避障机器人在自由空间中找到最短路径?

Related 相关文章

  1. 1

    在3D空间中找到圆与无限圆柱的交点

  2. 2

    检查圆是否适合非量化2D空间中的迷宫

  3. 3

    如何在地图上找到任意点最近的位置?

  4. 4

    D3js在圆上找到最近的点

  5. 5

    在 3D 空间中绘制 (x,y,z) 点的 2D 数组 (Matplotlib)

  6. 6

    在Python中找到曲线上最接近的点到有界n维空间中任意点的距离

  7. 7

    将 2D 点投影到圆/曲线上

  8. 8

    (C++) 夹住圆内的 2D 位置(使用中点圆算法绘制)

  9. 9

    绘制包含80%(x,y)点的圆

  10. 10

    如何在x,y点的2D数组中找到第一个极值?

  11. 11

    在圆内找到最近的坐标

  12. 12

    根据两点找到曲线的圆的半径和位置

  13. 13

    在d维空间中找到一组n个点的直径

  14. 14

    在3D空间中的一组点中找到两个最远的点

  15. 15

    如何编写一个函数来在 Java 中的 2D 维数组中找到 2 个最近的点?

  16. 16

    WebGL 2D圆作为精灵

  17. 17

    从数组中找到2个最近的点

  18. 18

    从数组中找到2个最近的点

  19. 19

    D3js在圆上找到最接近的点

  20. 20

    在Android中创建带有可点击点的圆

  21. 21

    带有散景的 3 维圆(散点)图

  22. 22

    如何绘制以给定的X和Y坐标为圆的中间点的圆?

  23. 23

    如何为带有openlayers的圆设置新的位置/半径?

  24. 24

    DFS,在无向图中找到圆

  25. 25

    在Pygame中找到圆的圆周坐标

  26. 26

    根据高度计算圆上的位置(X,Y)

  27. 27

    仅给出点和距离时,如何在3D空间中获得圆路径?

  28. 28

    在3D空间中绘制空心圆时出现奇怪的错误

  29. 29

    是否有一种算法可以为避障机器人在自由空间中找到最短路径?

热门标签

归档