我有一个行数组,我用它在地图中绘制矢量。
我想用一条线替换两条叠加的线(或它们之间的距离很短)。你能给出算法吗?
这张图片可以帮助您理解这个问题:
输入行:
执行算法后,我想得到如下图所示的输出:
PS:一个Line是一个点列表。
答案 0 :(得分:2)
合并彼此相距固定距离的任何一对顶点(将它们的位置设置为相等)。
在每个顶点的每一行上找到最近的点。如果它足够接近,则在该点上分割线,并合并点。
删除具有完全相同的起点和终点的重复行。
例如,如果您有一条由A点和B点定义的线,另一条线有点C(左上图)。可以使用点到线函数的最短距离找到点D.如果D离C太远则忽略它,否则将AB线分成两行AD和DB,并将位置C中的所有点移动到位置D,以获得右图。
答案 1 :(得分:0)
这个问题类似于“两个范围是否相交,如果没有那么它们之间的距离是多少?”答案取决于您是否已经知道哪个范围已经最小,以及范围中的点是否正确排序(即,线是否具有相同的方向)。
因此,初步的算法将是这样的:
if (a.start < b.start) {
first = a;
second = b;
} else {
first = b;
second = a;
}
让我们现在找到距离:
distance = max(0, second.start - first.end);
现在你必须有一系列最短距离的值,具体取决于你要将这些线加到1中。让我们说你把它们保存在一个名为:
的数组中 arrayRange[];
现在,如果,
for(int 1=0;i<arrayRange.length;i++)
{
if(distance is one of the elements of the arrayRange)
then,
callFunctionSuperImposeLines(distance,a,intersectionPoint,a.end,b,b.end);
}