如何为避免指定区域的圆生成一组坐标



我正在做一个2D游戏,安全生成不是很好。当前系统获取随机坐标并检查碰撞,如果位置与另一个对象碰撞,则重试。在 15 次尝试失败后,它将放弃并在另一个对象之上生成。我想知道是否有办法创建一个公式来计算仓位数组之外的位置。例如,假设我有这个数组:

var coveredArea = [
{x: 200, y: 100, r: 50}
{x: 100, y: 300, r: 50}
{x: 300, y: 200, r: 50}
];

对于视觉表示,假设画布如下所示:https://i.stack.imgur.com/9cZXM.png

我想制作一个公式来计算这些对象之外的位置,而无需随机猜测和检查。这可能吗?我希望在这里得到一个基本的想法,如果解决方案太复杂而无法放弃,它将引导我朝着正确的方向前进。

如果场景尺寸合理,禁止对象不会频繁改变位置,并且必须执行许多查询,则最简单,最快的是映射方法:

制作位图,用黑色填充并绘制所有用白色填充的对象(如果需要区分不同的对象,请按特定颜色#000001,#000002等绘制每个对象)。

然后只需检查所需坐标中的像素颜色。

如果您有特定的圆半径(不仅仅是点),则使用宽笔作为图形边框(lineWidth = 2*R+1,lineJoin = 圆形)

最新更新