在限制任意区域的二维空间中找到有效点
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(特别是联合)。
【讨论】:
对于重叠区域,闭合点要么是一个边界上最近的点,要么是两个边界的交点。以上是关于在限制任意区域的二维空间中找到有效点的主要内容,如果未能解决你的问题,请参考以下文章