【问题标题】:Programming to find if a 2D circle is obstacle-free编程以查找 2D 圆是否无障碍
【发布时间】:2013-02-01 08:18:35
【问题描述】:

在 2D 平面中,有一个圆心 (x,y) 和半径 r。如果圆圈内有障碍物,程序化查找的有效方法是什么?

当然,解决问题的一种方法是遍历圆中的每个点以检查该位置是否有障碍物 (How do you loop through a circle of values in a 2d array?),但有没有更好的方法呢?

谢谢!

【问题讨论】:

  • 你制定它的方式将是相当密集的计算。您要么需要一个数组,其中包含 2D 平面中的每个坐标的所有元素的 id 占据它 要么 您需要一个数组,其中包含平面中存在的所有元素并检查它们中的任何一个是否交叉任何坐标圈。在我看来,这两种选择都远非理想。
  • 说明如何在平面中生成几何对象和/或跟踪它们可能会有所帮助
  • 嗨,Pankrates,感谢您的评论,平面上已经存在一些几何对象(障碍物),这些障碍物可能不是静态的。现在我在平面上随机生成一个圆心(x,y)和半径为r的圆,但我必须提出一种算法来确保随机生成的圆应该是无碰撞的。
  • 好的,这已经很有帮助了。您如何定义坐标,它们是连续的还是(如我所料)您是否定义了一个在点之间具有特定有限步长的网格?
  • 基本上坐标只是基于计算机图形上的像素。所以每个有限步长都是 1px。

标签: math graphics 2d collision-detection game-physics


【解决方案1】:

是的。圆有一个中心和一个半径。检查平面内是否有一个点(x0, y0),使得:

(x0 - x)2 + (y0 - y)2 ≤ r2

【讨论】:

  • 应该是 x^2+y^2 的平方根
  • 半径应该是公式中的平方。
  • 已修复。感谢您的帮助。
  • 我想你误解了我的问题,请查看我的更新评论和 Pankrates 的回复。
猜你喜欢
  • 2011-08-25
  • 2021-07-15
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2022-11-10
  • 1970-01-01
  • 2015-10-17
相关资源
最近更新 更多