在一行中加入两行(在Java中)

时间:2012-12-14 12:02:50

标签: java algorithm

我有一个行数组,我用它在地图中绘制矢量。

我想用一条线替换两条叠加的线(或它们之间的距离很短)。你能给出算法吗?

这张图片可以帮助您理解这个问题:

输入行:

The input Lines

执行算法后,我想得到如下图所示的输出:

Output

PS:一个Line是一个点列表。

2 个答案:

答案 0 :(得分:2)

  1. 合并彼此相距固定距离的任何一对顶点(将它们的位置设置为相等)。

  2. 在每个顶点的每一行上找到最近的点。如果它足够接近,则在该点上分割线,并合并点。

  3. 删除具有完全相同的起点和终点的重复行。

  4. Diagram

    例如,如果您有一条由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);
}