Algorithm 测试多边形周围区域是否无障碍物

Algorithm 测试多边形周围区域是否无障碍物,algorithm,Algorithm,我在笛卡尔网格上绘制了一组任意旋转填充矩形(2D整数数组,每个单元格要么是0-空白空间,要么是1-矩形像素),并想测试一个特定的矩形周围是否有障碍物,因为矩形的中心及其四条边的坐标已知 例如,假设我们想测试矩形是否距离其任一边5个单位没有障碍物。 用绿点标记的矩形是可以的,而未标记的矩形则明显碰撞。 对于非旋转矩形来说,这似乎微不足道,但是,我很难想出能够处理旋转矩形的算法。 如果矩形相互接触,简单地从中心开始循环直到我们到达空白区域,然后检查空白区域中的障碍物似乎不起作用。由于您似乎是以图像

我在笛卡尔网格上绘制了一组任意旋转填充矩形(2D整数数组,每个单元格要么是0-空白空间,要么是1-矩形像素),并想测试一个特定的矩形周围是否有障碍物,因为矩形的中心及其四条边的坐标已知

例如,假设我们想测试矩形是否距离其任一边5个单位没有障碍物。 用绿点标记的矩形是可以的,而未标记的矩形则明显碰撞。

对于非旋转矩形来说,这似乎微不足道,但是,我很难想出能够处理旋转矩形的算法。
如果矩形相互接触,简单地从中心开始循环直到我们到达空白区域,然后检查空白区域中的障碍物似乎不起作用。

由于您似乎是以图像为导向的思维方式操作,因此可以使用图像处理

  • 对图像应用半径为2.5的膨胀过滤器
  • 如果两个像素的红色值都高于某个阈值,则将图像视为两个像素之间存在边缘的图形
  • 任何在它们之间有路径的矩形之间的间距最多为5。(尽管如此,请注意,这将为您提供“过于密切”关系的传递闭包。)

  • 由于您似乎是以图像为导向的心态进行操作,因此可以使用图像处理

  • 对图像应用半径为2.5的膨胀过滤器
  • 如果两个像素的红色值都高于某个阈值,则将图像视为两个像素之间存在边缘的图形
  • 任何在它们之间有路径的矩形之间的间距最多为5。(尽管如此,请注意,这将为您提供“过于密切”关系的传递闭包。)

  • 计算每个矩形从每个顶点到每个边的距离怎么样?这假设您可以轻松访问矩形的每个顶点,我不知道这是否正确。如果您愿意使用L1范数(曼哈顿距离),那么您可以运行泛洪填充算法,该算法将为您正在检查的矩形提供距离缓冲区。然后,您只需检查距离小于6的单元格中是否设置了位。这比我之前的评论快还是慢取决于你的设置。我认为混合像素和向量会引起一些混乱。仅使用边缘线段的坐标,您就可以轻松计算两个矩形是否相交,无需查阅像素数据。@biziclop问题不完全是关于相交矩形,但您的点仍然有效。@GuyGreer泛光填充技巧似乎可以奏效。谢谢计算每个矩形从每个顶点到每个边的距离怎么样?这假设您可以轻松访问矩形的每个顶点,我不知道这是否正确。如果您愿意使用L1范数(曼哈顿距离),那么您可以运行泛洪填充算法,该算法将为您正在检查的矩形提供距离缓冲区。然后,您只需检查距离小于6的单元格中是否设置了位。这比我之前的评论快还是慢取决于你的设置。我认为混合像素和向量会引起一些混乱。仅使用边缘线段的坐标,您就可以轻松计算两个矩形是否相交,无需查阅像素数据。@biziclop问题不完全是关于相交矩形,但您的点仍然有效。@GuyGreer泛光填充技巧似乎可以奏效。谢谢谢谢,我已经按照GuyGreer的建议使用了flood fill来解决这个问题,但是这个图像处理的想法非常有趣,对于任何遇到这个问题的人来说绝对值得检查,所以我将接受它作为一个答案。谢谢,我已经按照GuyGreer的建议使用flood fill来解决这个问题,但是这个图像处理的想法非常有趣,对于任何遇到这个问题的人来说绝对值得一试,所以我接受它作为一个答案。