Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 计算邻域距离_Delphi_Geometry_Computational Geometry - Fatal编程技术网

Delphi 计算邻域距离

Delphi 计算邻域距离,delphi,geometry,computational-geometry,Delphi,Geometry,Computational Geometry,在给定的2D地图中,您将使用什么方法来计算表示从一个区域到另一个区域的“跳跃”次数的距离 以下面的地图为例: (来源:) 计算的最终结果将是这样一个三角形: A B C D E F A B 1 C 2 1 D 2 1 1 E . . . . F 3 2 2 1 . 这意味着从A到D需要两次跳跃。 然而,从任何地方到E,这是不可能的,因为“间隙”太大,所以值是“无限的”,这里用一个点表示,以便于简化 正如你在这个例子中看到的那样,多边形可以共享点,但通常它们只是紧密地结合在一起,所以应该

在给定的2D地图中,您将使用什么方法来计算表示从一个区域到另一个区域的“跳跃”次数的距离

以下面的地图为例:


(来源:)

计算的最终结果将是这样一个三角形:

  A B C D E F
A 
B 1
C 2 1
D 2 1 1
E . . . .
F 3 2 2 1 .
这意味着从A到D需要两次跳跃。
然而,从任何地方到E,这是不可能的,因为“间隙”太大,所以值是“无限的”,这里用一个点表示,以便于简化

正如你在这个例子中看到的那样,多边形可以共享点,但通常它们只是紧密地结合在一起,所以应该允许最大的间隙来考虑两个相邻的多边形。 显然,这是一个简化的例子,但在实际情况中,我面对大约60000个多边形,我只对跳跃值高达4感兴趣

作为输入数据,我将多边形顶点作为坐标数组,从中我已经知道如何计算质心

我最初的方法是在白色背景画布上“绘制”多边形,每个多边形都有自己的颜色,然后沿着两个候选多边形质心之间的直线行走。计算我遇到的颜色可以得到跳跃的次数。
然而,这并不是真正可靠的,因为它没有考虑到凹面布置,在凹面布置中,一个人必须绕着“凹口”从一个多边形走到另一个多边形,从A到F可以看到这一点

我试图寻找有关这一主题的参考资料,但找不到,因为我很难弄清楚描述这类问题的合适术语


我的目标语言是Delphi XE2,但任何示例都是最受欢迎的。

您可以尝试使用单链接集群或其他方法。您也可以使用蛮力或尝试或。

您可以为每个初始多边形创建具有小偏移的膨胀多边形,然后检查与相邻(膨胀)多边形的相交。偏移对于补偿多边形之间的小间隙很有用

充气和交叉问题都可以用解决。
潜在邻居问题的解决取决于实际情况——例如,简单方法——将平面划分为方形单元,并检查在同一单元和最近单元中有顶点的邻居

每对相交多边形在(未加权、无向)图形中都给出一条边。如果要查找所有长度的路径,我会尝试:

1) 对所有多边形的所有点进行Delaunay三角剖分

2) 从Delaunay图中删除在同一多边形中有3个点的所有三角形

如果至少有一个三角形在两个多边形中至少有一个点(或者如果多边形有一个公共点),则两个多边形逐点相邻

如果每个多边形在同一个四边形中至少有两个相邻点=两个相邻三角形(或两个公共点和相邻点),则两个多边形相邻


一旦用新的多边形(最终合并的三角形)填充间隙,使用Djikistra算法计算距离最近的点(或多边形质心)的路径。

进一步思考,我相信可以用两步方法解决这个问题:1。查找所有多边形的直接邻域2。对于所有多边形对,将“直接”多边形列表一直移动到找到对的下半部分或跳转限制的点,这样“唯一”的问题就是找到两个给定多边形是否相邻,允许它们的边之间有一个小间隙是的,你是对的,简单地找到直接邻域,然后在图中遍历就足够容易了。克利伯图书馆看起来确实很有前途。