从这个多边形中,我想提取地块的“岬角”,即用于打开场地的多边形(维基百科)的连续线(边)。虽然通常只考虑垂直于场地布局的行,但我需要多边形的所有边。
这里,连续线是指任意一组坐标,其中任意两个坐标之间的夹角不大于值X(例如30度)。对于给定的示例,生成的岬角应如下所示:
我编写了一个小算法来尝试实现这一点,基本上检查两个坐标之间的角度,如果角度低于 X 度,则将给定坐标推送到现有的 lineString,否则创建新的 lineString(地头)。 查看以下要点
但是,在某些情况下,场的角落是圆形的,因此可能由彼此相距很短的许多坐标组成。然后相对角度可能小于值X,即使拐角太尖而不能在不转动的情况下实际耕种。为了克服这个问题,我添加了一个索引,当坐标太接近而无法比较时,该索引就会增加,以便将下一个坐标与初始坐标进行检查。查看以下要点。
这适用于示例中的简单图,但是我正在努力处理更复杂的图,如下所示。
在这里,底部地头与右侧的地头一起被识别为一个线串,即使在光学上给出了一个尖角。此外,发现右上角的两个坐标是一个单独的岬角,即使它们应该连接到右侧的岬角。因此,结果应产生以下结果:
我想知道的是,如果有一种方法可以有效地将任何多边形分解成它的岬角,给定一个特定的转向角度。我在这里为代码设置了一个 repo,如果有帮助的话,这里还有一个包含许多示例的在线测试页面。