概述
html5中的canvas並沒有直接提供繪製橢圓的方法,下面是對幾種繪製方法的總結。各種方法各有優缺,視情況選用。各方法的引數相同:
context為canvas的2d繪圖環境物件,
x為橢圓中心橫座標,
y為橢圓中心縱座標,
a為橢圓橫半軸長,
b為橢圓縱半軸長。
引數方程法
該方法利用橢圓的引數方程來繪製橢圓
複製**
**如下:
//-----------用引數方程繪製橢圓---------------------
//函式的引數x,y為橢圓中心;a,b分別為橢圓橫半軸、
//縱半軸長度,不可同時為0
//該方法的缺點是,當linwidth較寬,橢圓較扁時
//橢圓內部長軸端較為尖銳,不平滑,效率較低
function paramellipse(context, x, y, a, b)
context.closepath();
context.stroke();
}; 均勻壓縮法
這種方法利用了數學中的均勻壓縮原理將圓進行均勻壓縮為橢圓,理論上為能夠得到標準的橢圓.下面的**會出現線寬不一致的問題,解決辦法看5樓simonleung的評論。
複製**
**如下:
//------------均勻壓縮法繪製橢圓--www.cppcns.com------------------
//其方法是用arc方法繪製圓,結合scale進行
//橫軸或縱軸方向縮放(均勻壓縮)
//這種方法繪製的橢圓的邊離長軸端越近越粗,長軸端點的線寬是正常值
//邊離短軸越近、橢圓越扁越細,甚至產生間斷,這是scale導致的結果
//這種缺點某些時候是優點,比如在表現環的立體效果(行星光環)時
//對於引數a或b為0的情況,這種方法不適用
function evencompellipse(context, x, y, a, b)
; 三次貝塞爾曲線法一
三次貝塞爾曲線繪製橢圓在實際繪製時是一種近似,在理論上也是一種近似。 但因為其效率較高,在計算機向量圖形學中,常用於繪製橢圓,但是具體的理論我不是很清楚。 近似程度在於兩個控制點位置的選取。這種方法的控制點位置是我自己試驗得出,精度還可以.
複製**
**如下:
//---------使用三次貝塞爾曲線模擬橢圓1---------------------
//此方法也會產生當linewidth較寬,橢圓較扁時,
//長軸端較尖銳,不平滑的現象
function bezierellipse1(context, x, y, a, b)
; 三次貝塞爾曲線法二
這種方法是從stackoverflow中乙個帖子的回覆中改變而來,精度較高,也是通常用來繪製橢圓的方法.
複製**
**如下:
//---------使用三次貝塞爾曲線模擬橢圓2---------------------
//此方法也會產生當linewidth較寬,橢圓較扁時
//,長軸端較尖銳,不平滑的現象
//這種方法比前乙個貝塞爾方法精確度高,但效率稍差
function bezierellipse2(ctx, x, y, a, b)
; 光柵法
這種方法可以根據canvas能夠操作畫素的特點,利用圖形學中的基本演算法來繪製橢圓。 例如中點畫橢圓演算法等。
其中乙個例子是園友「豆豆狗」的一篇博文「html5 canvas 提高班(一) —— 光柵圖形學(1)中點畫圓演算法」。這種方法由於比較「原始」,靈活性大,效率高,精度高,但要想實現乙個有使用價值的繪製橢圓的函式,比較複雜。比如,要當線寬改變時,演算法就複雜一些。雖然是畫圓的演算法,但畫橢圓的演算法與之類似,可以參考下。
demo
下面是除光柵法之外,幾個繪製橢圓函式的演示,演示**如下:
複製**
**如下:
注意,要成功執行**,需要支援html5的canvas的瀏覽器。
第一次寫部落格,弄了一整天,真不容易啊!部落格園的暗色**模板對插入的**顯示效果不好。為了弄**格式,我可是煞費苦心啊!
本文標題: 在html5的canvas上繪製橢圓的幾種方法總結
本文位址:
HTML5基礎 Canvas元素
1 這是乙個畫布標籤,用於繪製圖形,在網頁中顯示是乙個矩形,沒有內容和邊框,通常放置canvas標籤的時候需要新增乙個id屬性,便於用js進行繪製時讀取該畫布。2 該元素可以設定長寬和邊框樣式,具體 如下 注 canvas是完全沒有繪圖的工作,繪製的工作全部都交給js,canvas僅僅是乙個畫布而已...
HTML5中Canvas的drawText對齊細節
最近接觸的專案中,ui純html5,這可苦了我這個習慣android native控制項的程式設計師,其中畫字對齊的細節部分困擾我很久。anyway,總算是搞定 context物件可以設定以下 text 屬性 font 文字字型,同 cssfont family 屬性 textalign 文字水平對...
HTML5新增畫布元素canvas
canvas元素是乙個正常的html元素,相當於在頁面插入乙個畫布。在標記中設定寬 高屬性,在調整寬 高屬性後裡面的內容不會縮放。但是在css中指定這些屬性,在縮放畫布後,裡面內容也會縮放。預設情況下畫布是透明的,除非你在畫布上繪製了內容,否則是看不到它的。如果你想我證明畫布確實存在,就能看到乙個黑...