如何计算几乎平行的两个线段之间的重叠

时间:2013-02-03 22:56:31

标签: c++ geometry computational-geometry

我有相同的(但不完全平行)2D线段。我想找出一条与给定线段最大重叠的线段。 我认为可以使用标量来有效地计算,但我的几何图形太差,无法弄清楚这一点。 例如,在下图中;暗线被假定为给定线,并且与其他线段相比,红色突出显示的线段被赋予最大覆盖范围(或最长重叠,不确定我的术语是否正确)。

  

我的目标是找到代表暗线的最佳线   来自其他线段集。

我想要找到的是对给定线路具有最大覆盖范围的任何线路。这意味着,我想避免其开始和结束超出给定线段末端的线段。此外,当许多行给出给定行的最大覆盖率时,我想避免使用较短的行并需要较长的行。 idea is to find another line which we can consider instead of that given line segment

帮助非常受欢迎,因为后来我想在编程环境中实现它。 感谢

示例1 example

enter image description here 示例2

说出我的意思是'覆盖',我会说 在上图中:投影的蓝线完全位于深黑色线内。但它太短了。但是,红线的大部分(投影线)位于黑线内,尽管红线的某些部分熄灭。绿线完全脱离了黑线。所以,我可以说红线用黑线给出了最大的覆盖率..(我的想法是否正确?)

2 个答案:

答案 0 :(得分:4)

  1. 项目结束目标细分的候选细分。
  2. 计算投影之间的距离。
  3. [可选]乘以段之间的角度cos。
  4. 注意#1:在此上下文中,段上的投影意味着位于该段上的最近点。其中一种方法是:

    • 在无限线上投射一个点,通过细分
    • 如果投影位于片段内部 - 请将其
    • 如果投影位于细分市场之外 - 采取最近的细分市场

答案 1 :(得分:0)

我不知道你的问题是图形处理或计算功能。

但是对于图形,这个问题属于计算机视觉科目,你想要的可能是Hough Line Transform algorithm

但是,如果你的问题比这更简单,你想要的可能是SAD algorithm