簡體   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