已知貝塞爾曲線的4個點,如何求貝塞爾曲線的長度?
02-03
4個點分別是 起點 控制點1 控制點2 終點
Earl Boebert 在1993年的newsgroup上總結了一篇 CG Notes: Arc Length of Cubic Bezier Curves, 列出了幾個方法的 C 實現。
最簡單的當然是把曲線變成折線,但這個方法不太好,因為曲率大的部分需要更多折線來減少誤差。
文中提到[1],而作者最後採用的方法是[2][3][4],自適應地分割Bézier曲線,當中應該用到了 De Casteljaus algorithm。
[1] Guenter, Brian, and Richard Parent. "Computing the arc length of parametric curves." Computer Graphics and Applications, IEEE 10.3 (1990): 72-78.[2] Gravesen, J. Adaptive Subdivision and the Lenght of Bézier Curves. Technical University of Denmark. Department of Mathematics, 1992.[3] Gravesen, Jens. "The length of bezier curves." Graphics Gems V (1995): 199-205.[4] Gravesen, Jens. "Adaptive subdivision and the length and energy of Bézier curves." Computational Geometry 8.1 (1997): 13-31. Adaptive subdivision and the length and energy of B??zier curves積分。
三次 bezier 曲線的話,導數都是二次函數吧……解析法無解, 因為解析法中的原函數不可求;這裡有一種我自己研究出的方法: 樣條參數與曲線長度間的互相求解這裡最重要的一點是誤差控制, 沒有誤差控制就沒有實用性.這個方法目的不僅是求長度, 而是實現給定長度快速求曲線參數 t, 或給定 t 快速求曲線長度, 這樣就可以讓物體沿路徑按任意變化的速度運動了.離散化以後求折線長度。
推薦閱讀: