如何加粗折线?

时间:2015-12-01 10:37:59

标签: algorithm geometry computational-geometry polyline

我正在寻找能让我在给定折线的情况下变厚的算法 - 或者会创建第二条折线的算法,可以将其视为“粗线”的左/右边界。

输入是2D(折线)和宽度中的点序列。宽度是原始折线和创建的折线之间的距离(它可以在“转弯”,即顶点)本地变化。

条件 - 此算法不应在顶点上创建弧,也不应创建新顶点。它只能减少顶点的数量。

示例:

    --
   /  \
  /    \
 A      B

考虑从A到B创建“外”折线,我们有3个顶点,我们将有3个顶点:

    ---
   /   \
  /     \
 /       \
A         B

但是当创建“内部”折线时,可能会发生减少顶点的数量:

    /\
   /  \
  A    B

当然你可以想到几个特殊条件(例如,原始折线是否交叉本身 - 在我的情况下不是)但是欢迎任何有用的方向,想法,提示,算法名称或整个算法,我我很感激。

1 个答案:

答案 0 :(得分:3)

基本解决方案是在每个顶点(在单位法向量之和的方向上)构造bissectors,并在沿着它的所需位置定位点(到顶点的距离是所需的偏移量)半角的正弦曲线。)

您将获得与原始折线平行的折线。不幸的是,由于折线可以在急转弯内自行穿过,因此存在技术难题。这是一个全局问题(需要知道要解决的整个配置 - 在极端情况下,整个偏移折线可能处于自交叉配置,并且不可见),不太容易处理。

如果你只需要渲染粗线,快速&脏的方法是忽略自交,并使用支持“非零”绕组数规则的多边形填充算法。