2012/8/23

Quadratic Bezier Curve Fitting Algorithm

手繪二次貝茲曲線 - 根據滑鼠路徑



問題 :
如何根據使用者的滑鼠軌跡
得到一個二次貝茲曲線

flash graphics 的 curveTo 畫出的線就是二次貝茲曲線
這條線需要三個參數 p0, p1, p2

graphics.moveTo(p0.x, p0.y);
graphics.curveTo(p1.x, p1.y, p2.x, p2.y);

所以我們要解決的問題是給定一個滑鼠軌跡座標陣列 x0,x1,...,xk
求出 p0, p1, p2 的值


解法:
我發現這篇論文寫得很好
http://figment.cse.usf.edu/~sfefilat/data/papers/TuBCT10.16.pdf


他簡單假設


p0 = x0
p2 = xk


接下來只要解 p1, 用一個逐步逼近最佳解的方式, 先假設p1在某個位置


算出目前誤差值 e
應該偏移的方向 Δp
更新 p1 = p1 + Δp
重作上面三行直到 e 的值不再變小為止


作法很簡單
但這裡還有很多細節沒講到
有興趣的人可以慢慢看論文
利用這篇論文可以實作出適合用在 flash 上的手繪曲線程式

沒有留言: