繁体   English   中英

如何减少贝塞尔曲线路径中的点数

[英]How to reduce the number of points in bezier curve paths

我有一个大的svg路径,它有quadratice贝塞尔曲线。 路径数据用于绘制地图。 如何在不扭曲整体形状的情况下减少贝塞尔曲线的点数?

您没有说是要离线(预先准备的路径)还是在线(动态)。 如果离线很好,请使用像Inkscape这样的工具。

如果您想自己计算简化曲线,那么用于执行此操作的典型算法也与用于绘制贝塞尔曲线的算法相同。 该算法称为“展平”。

基本上,我们的想法是将贝塞尔曲线转换为一系列直线段。 因为您不希望线段的平整度可见,所以您必须考虑绘图的比例以及贝塞尔曲线的曲线。 如果bezier非常曲线,你必须使用更多的线段而不是相当直的。

您通常使用De Casteljau算法将每个贝塞尔曲线分成两个。 然后查看两个半贝塞尔曲线中的每一个。 如果贝塞尔直线足以满足您决定的平直度限制,则停止分割。 否则,分成两半再试一次。

在该过程结束时,您应该获得与bezier版本无法区分的折线。 或者如果你使用比平面测试更平坦的“平整度测试”,你会得到更粗糙的形状近似值。 在你的情况下一张地图。

如果你google bezier flattening你可以找到很多关于这项技术的论文。 还有一些页面描述了如何以更友好的方式进行操作。 例如,这个是关于生成偏移曲线,但首先描述如何展平曲线:

https://seant23.wordpress.com/2010/11/12/offset-bezier-curves/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM