C++ 在具有任意区域限制的二维空间中查找有效点

C++ 在具有任意区域限制的二维空间中查找有效点,c++,algorithm,geometry,C++,Algorithm,Geometry,我有一个二维双精度空间,其中区域(任意定义,大部分是圆)是“无效的”,也就是说,我想得到最近的有效点,给定一个期望的目的地(不一定是有效的)。现在到目前为止,我已经尝试从个案的基础上避免这些区域,但当存在多个约束时(比如必须避免2-3个紧密/混合在一起的区域),这种方法不起作用。我曾考虑过某种搜索,但将空间离散化将是另一个问题,因为这些区域不会真正与之匹配 我希望你们能就如何解决这样的问题给我一些建议。一个相关但简单得多的案例是 谢谢 这基本上是不可能的,除非您可以对这些无效区域设置一些约束 考

我有一个二维双精度空间,其中区域(任意定义,大部分是圆)是“无效的”,也就是说,我想得到最近的有效点,给定一个期望的目的地(不一定是有效的)。现在到目前为止,我已经尝试从个案的基础上避免这些区域,但当存在多个约束时(比如必须避免2-3个紧密/混合在一起的区域),这种方法不起作用。我曾考虑过某种搜索,但将空间离散化将是另一个问题,因为这些区域不会真正与之匹配

我希望你们能就如何解决这样的问题给我一些建议。一个相关但简单得多的案例是


谢谢

这基本上是不可能的,除非您可以对这些无效区域设置一些约束


考虑一个无效区域(或区域的联合),它是一个不规则的大水滴,内部某处有一个有效的小孔。假设你的目的地在水滴内部,靠近针孔,所以你想要的点实际上在针孔中。如果检查此斑点的唯一方法是使用“是/否”方法来测试点的有效性,则找到针孔的唯一方法将是彻底搜索,这将花费很长时间。

如果所有无效区域都不相交,则问题可以处理。对于给定的点,如果它位于其中一个区域内,请在区域边界上查找最近的点。这不一定是琐碎的,但应该有很多参考-即使在这个网站上-为这样做,考虑到各种类型的边界-直线,圆弧,圆,样条曲线等


如果这些区域不是不相交的,则可以将它们合并为不相交的区域。(特别是并集)。

对于重叠区域,闭合点将是一个边界上最近的点,或在两个边界的交点处。