我正在研究的项目中有一个有趣的算法挑战。我有一个排序的坐标点列表,指向街道两侧的建筑物,这些建筑物已经足够放大,看起来像这样:
我想采取这种曲折并将其平滑以使基础街道线性化。
我可以想到几个解决方案:
有没有更好或最好的方法来解决这个问题? (我使用的是Python 3.5)
答案 0 :(得分:7)
根据您的说明和评论,您正在寻找线条简化算法。
Ramer-Doublas算法(在评论中建议)很可能是这个家族中最知名的算法,但还有更多。
例如Visvalingam’s algorithm通过删除具有最小变化的点来工作,该变化由三角形的最小平方计算。这使得编码和直观易懂变得非常容易。如果难以阅读研究论文,您可以阅读this简单文章。
此系列中的其他算法包括:
了解它们,了解它们试图缩小的范围并选择最适合您的。
答案 1 :(得分:0)
Dali的帖子正确地推测线简化算法对此任务很有用。在发布这个问题之前,我实际上检查了一些这样的算法,但是对它们不太满意,因为即使它们导致了我喜欢的简化几何,它们也没有直接解决我在点的任何一侧的问题。功能,永远不会在中间。
因此我使用了两个步骤:
n=20
个点(使用this精彩实现)。结果并不完美,但足够好了:
感谢大家的帮助!