Algorithm 如何加厚多段线?

Algorithm 如何加厚多段线?,algorithm,geometry,computational-geometry,polyline,Algorithm,Geometry,Computational Geometry,Polyline,我正在寻找一种算法,可以让我加厚给定的多段线——或者可以创建第二条多段线的算法,这可以被认为是“粗线”的左/右边界 输入是二维(多段线)和宽度中的点序列。宽度是从原始多段线到创建的多段线的线段之间的距离(它可以在“转弯”处局部变化,即顶点) 条件——此算法不应在顶点上创建圆弧,也不应创建新顶点。它只能减少顶点的数量 例如: -- / \ / \ A B 考虑从A到B创建“外部”多段线,我们有3个顶点,我们将有3个顶点: --- / \

我正在寻找一种算法,可以让我加厚给定的多段线——或者可以创建第二条多段线的算法,这可以被认为是“粗线”的左/右边界

输入是二维(多段线)和宽度中的点序列。宽度是从原始多段线到创建的多段线的线段之间的距离(它可以在“转弯”处局部变化,即顶点)

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

例如:

    --
   /  \
  /    \
 A      B
考虑从A到B创建“外部”多段线,我们有3个顶点,我们将有3个顶点:

    ---
   /   \
  /     \
 /       \
A         B
但在创建“内部”多段线时,可能会减少顶点数:

    /\
   /  \
  A    B

当然,您可以考虑一些特殊情况(例如,原始多段线是否相交——在我的情况下不是),但欢迎您提供任何有用的方向、想法、提示、算法名称或整个算法,我提前对此表示感谢。

基本解决方案是在每个顶点构造双扇区(在单位法向量和的方向上),并将点定位在沿其所需的位置(到顶点的距离是半角正弦上的所需偏移)

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


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

基本解决方案是在每个顶点(在单位法向量和的方向)构造双扇区,并将该点定位在沿该点的所需位置(到顶点的距离是半角正弦上的所需偏移)

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


如果您只需要渲染粗线,一种快速而肮脏的方法是忽略自相交,使用支持“非零”卷绕数规则的多边形填充算法。

请参阅@Evert,您可以将此问题转移给程序员吗?请参阅@Evert,您可以将此问题转移给程序员吗?请参阅