【问题标题】:How to compute overlap between nearly parallel two line segments如何计算几乎平行的两条线段之间的重叠
【发布时间】:2013-02-04 19:10:09
【问题描述】:

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

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

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

高度赞赏帮助,因为稍后我想在编程环境中实现它。 谢谢

示例 1

例子2

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

【问题讨论】:

  • 我很难理解这一点:我想找出与给定线段重叠最大的线段。我以为你得到了 两个 或更多线段? 最大重叠是什么意思?
  • 数学上,在欧几里得平面中,如果线段不平行,则最多有一个交点。您能否更清楚地定义您的问题是什么?你想知道给定两个片段在屏幕上显示时会有多少像素重叠吗?如果是这样,像 Bresenham 这样的分段渲染算法可能至少可以用来得到一个蛮力的答案。
  • 没有“几乎平行”这样的东西。两条线要么相互平行,要么不平行。
  • @thang:对不起,我添加了一个示例图。可能是我没有使用正确的词汇。
  • 实际上,您可以将 parallel-ness 定义为将一个线段的归一化方向向量投影到另一个线段的绝对值。这将是 1 表示平行,0 表示垂直,否则介于两者之间。

标签: c++ geometry computational-geometry


【解决方案1】:
  1. 将候选句段的结尾投影到目标句段上。
  2. 计算投影之间的距离。
  3. [可选] 乘以线段之间角度的 cos。

关于 #1 的注意事项:在此上下文中,段上的投影表示位于该段上的最近点。一种方法是:

  • 在穿过线段的无限线上投影一个点
  • 如果投影在段内 - 接受它
  • 如果投影在线段之外 - 取最近的线段末端

【讨论】:

  • 当候选段的一端超出目标时,我该怎么办?你的第三个标准试图衡量什么......(对不起,我数学很差)示例公式也欢迎
  • 谢谢,现在我有点明白逻辑了。我仍然对您的这一点感到困惑“[可选]乘以段之间角度的余弦。”..由此,您要测量什么。喜欢学习。
  • 如果你想考虑方向的相似性,乘以余弦是一种方法。如果您只需要重叠的长度,则不需要乘法。
【解决方案2】:

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

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

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

【讨论】:

  • 我认为他已经有一个段坐标列表。图片仅供参考。
猜你喜欢
  • 2021-09-21
  • 2021-04-26
  • 1970-01-01
  • 2014-09-29
  • 2018-02-11
  • 2016-10-19
  • 2019-07-09
  • 2010-10-12
  • 1970-01-01
相关资源
最近更新 更多