我有一个2D双精度空间,区域(任意定义,大多数是圆圈)是“无效”,所以说,我想得到最近的有效点,给定一个理想的目的地(没有'必须有效)。到目前为止,我已经尝试逐个避免这些区域,但是当存在多个约束时(比如必须避免2-3个区域紧密/混合在一起),这种方法不起作用。我考虑过某种搜索,但是对空间进行离散化将是另一个问题,因为这些区域不会真正与之相符。
我希望你们能就如何解决这样的问题给我一些建议。一个相关但更简单的案例是this。
谢谢!
答案 0 :(得分:1)
这基本上是不可能的,除非你可以对这些无效区域设置一些约束。
考虑一个大的不规则斑点形式的无效区域(或区域联合),内部有一个小小的有效针孔。假设您的目的地位于针孔附近的斑点内,因此所需的点实际上位于针孔中。如果检查这个blob的唯一方法是使用是/否方法测试有效点,找到针孔的唯一方法是通过穷举搜索,这将需要永远。
答案 1 :(得分:1)
如果所有无效区域都不相交,则问题可以解决。对于给定点,如果它位于其中一个区域内,请查找区域边界上的最近点。这不一定是微不足道的,但是应该有很多参考 - 甚至在这个网站上 - 这样做,给定了各种类型的边界 - 直线,圆弧,圆,样条等。
如果区域不是不相交的,您可以将它们组合成区域。 CGAL provides libraries for 2D booleans(特别是工会)。