手繪二次貝茲曲線 - 根據滑鼠路徑
問題 :
如何根據使用者的滑鼠軌跡
得到一個二次貝茲曲線
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 上的手繪曲線程式
沒有留言:
張貼留言