貝賽爾曲線(二)應用場景之畫板優化

2021-07-30 00:14:13 字數 1153 閱讀 6996

**請註明出處:

自定義view之畫板很簡單,可以看一下下面這個例子。

簡單的畫板就是這樣的,實現也很簡單,主要思路就是,重寫ontouch方法,在按下的時候,記錄下來起始點的座標(tempx,tempy),然後將畫筆的路徑移動到起點座標,mpath.moveto(tempx,tempy);在移動事件下,首先記錄下移動後的新座標 x1,y1;然後呼叫mpath.lineto()方法,傳入起點和新座標點的座標,在這之後,要把新座標點的值賦給前面的起點座標,用來當做下一次移動後的起點,這樣才能畫出連續的線,最後呼叫invalidate()重新整理畫布,**如下:

@override

protected

void

ondraw(canvas canvas)

@override

public boolean ontouchevent(motionevent event)

return

true;

}

但是問題來了,仔細觀察,不難看出,當快速繪畫的時候,線在拐角處的稜角特別明顯,不圓滑,原因就是在**中使用的是 lineto方法,這個方法就是連線兩點的直線,當你快速滑動的時候,兩點的距離有點遠,所以看到的就是直線。

上篇文章講到了貝塞爾曲線,知道其原理,那麼咱們就可以使用貝塞爾曲線來優化一下,先看一下優化後的效果:

這個效果相比上乙個是不是好很多啊,哈哈,現在來說說他的思路

主要就是運用貝塞爾曲線的原理,既然是兩點間的連線,那麼我們可以構造出乙個控制點來實現貝塞爾曲線,可以取兩點之間的中點作為貝塞爾曲線的起始點,然後,移動的點作為控制點,那樣的話,繪製出來的曲線就比較圓滑了,可能語言敘述不是很好理解,那麼咱麼就直接看看**吧:

@override

public boolean ontouchevent(motionevent event)

return

true;

}

貝賽爾曲線

貝塞爾曲線又稱貝茲曲線或貝濟埃曲線,一般的向量圖形軟體通過它來精確畫出曲線,貝茲曲線由線段與節點組成,節點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種向量曲線的。當然在一些比較成熟的點陣圖軟體中也有貝塞爾曲線工具,如photoshop等。在flash4中還沒有完整的...

貝塞爾曲線的應用

本文參考了 demo的github位址 就重寫乙個view而已 如下 created by abner on 2016 8 6.public class bubbleview extends view public bubbleview context context,attributeset at...

貝賽爾曲線的拆分演算法

貝賽爾曲線的拆分是指將貝賽爾曲線分解成逼近的多邊形。可以用來判斷貝賽爾曲線的選中,以及顯示貝賽爾曲線的旋轉效果等。貝賽爾曲線簡單介紹 貝賽爾曲線的每乙個頂點都有兩個控制點,用於控制在該頂點兩側的曲線的弧度。所以本函式的頂點陣列的記錄方式是 控制點 頂點 控制點 控制點 頂點 控制點 所以兩個頂點之間...