2011-04-17 156 views
1

這用於繪製橢圓方法似乎是清潔和雅緻:http://www.williammalone.com/briefs/how-to-draw-ellipse-html5-canvas/Bezier曲線繪製拉伸橢圓在HTML5畫布

然而,在測試它,我發現所得橢圓被拉伸。設置寬度和高度相等,我得到的橢圓比寬度高大約20%。這裏的結果與width = height = 50

Tall canvas ellipse (should be circle)

爲了確保該問題是與方法本身,我試圖改變使得用於貝塞爾曲線的所有點都旋轉90度的算法。其結果是:

Wide canvas ellipse(should be circle

同樣,在這兩種情況下,我期待一個50×50圈。使用How to draw an oval in html5 canvas?中描述的arc方法可以正常工作,生成完美的50x50圓(然後可以使用scale將其拉伸爲橢圓)。

發生了什麼事?

回答

3

在寫我的問題時,我意識到我誤解了貝塞爾曲線控制點的工作方式。仔細查看我使用的resource時,橢圓的弧線從未觸及圖中的x - width/2x + width/2邊界。所以它根本不是「寬度」。我會堅持arc而不是bezierCurveTo

(這是可能的使用「卡帕」這個調整;見this answer這種方法最好,如果您使用的是stroke,而不僅僅是一個fill電弧,因爲scale會造成不均勻的線條粗細。)

+0

更不用說構建Bezier曲線的弧線需要CPU時間的一小部分。 – Blindy 2011-04-17 16:58:38

+1

這樣做很直觀,但是你能否引用來源? – 2011-04-17 17:03:04

+0

我不建議使用** arc **函數,如果您要對橢圓進行轉換。你需要堅持4或8立方曲線....因爲他們將能夠正確處理轉換 – Alex 2012-04-04 10:34:07