在限制任意区域的二维空间中找到有效点

Posted

技术标签:

【中文标题】在限制任意区域的二维空间中找到有效点【英文标题】:finding valid points in 2d space with restrictions on arbitrary regions 【发布时间】:2010-11-18 10:05:16 【问题描述】:

我有一个 2D 双精度空间,其中包含“无效”的区域(任意定义,主要是圆形),可以这么说,我想获得最近的有效点,给定所需的目的地(那不t 必须有效)。现在到目前为止,我已经尝试逐个案例来避免这些区域,但是当有多个限制时(比如必须避免 2-3 个靠近/混合在一起的区域),这种方法不起作用。我考虑过某种搜索,但离散化空间将是另一个问题,因为这些区域不会真正符合它。

我希望你们能给我一些关于如何解决此类问题的建议。一个相关但更简单的案例是this。

谢谢!

【问题讨论】:

【参考方案1】:

这基本上是不可能的,除非你可以对这些无效区域进行一些限制。

考虑一个无效区域(或区域联合),其形式为一个不规则的大斑点,内部某处有一个有效的小针孔。并假设您的目的地在斑点内,靠近针孔,因此所需的点实际上在针孔中。如果检查这个 blob 的唯一方法是使用是/否方法来测试一个点的有效性,那么找到针孔的唯一方法就是穷举搜索,这将花费很长时间。

【讨论】:

【参考方案2】:

如果您的所有无效区域都是不相交的,则问题是可控的。对于给定点,如果它在某个区域内,则在区域边界上查找最近的点。这不一定是微不足道的,但应该有很多参考资料 - 即使在这个网站上 - 考虑到各种类型的边界 - 直线、圆弧、圆、样条曲线等。

如果区域不是不相交的,您可以将它们组合成不相交的区域。 CGAL provides libraries for 2D booleans(特别是联合)。

【讨论】:

对于重叠区域,闭合点要么是一个边界上最近的点,要么是两个边界的交点。

以上是关于在限制任意区域的二维空间中找到有效点的主要内容,如果未能解决你的问题,请参考以下文章

有效查找高密度区域的最佳方法

平面 题解

区域搜索中的点

查找包含点的矩形 - 高效算法

如何获得世界空间中二维点的射线方程

在二维平面中找到K最近点到点P.