亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

html5 Canvas畫圖教程(11)—使用lineTo/arc/bezierCurveTo畫橢圓形
來源:易賢網(wǎng) 閱讀:1836 次 日期:2016-07-23 13:11:17
溫馨提示:易賢網(wǎng)小編為您整理了“html5 Canvas畫圖教程(11)—使用lineTo/arc/bezierCurveTo畫橢圓形”,方便廣大網(wǎng)友查閱!

在canvas中可以很方便的用arc方法畫出圓形,本來圓形也可以看作是一個寬高相等的橢圓,但canvas中根本沒有畫橢圓的方法,我們要用其他方法來模擬。

我們首先要明確畫一個橢圓需要那些參數(shù),基本的幾何知識告訴我們,橢圓需要圓心坐標(biāo),寬度,高度——或者還有旋轉(zhuǎn)角度,不過這個可以暫時不要,旋轉(zhuǎn)是比較容易的。

1,使用lineTo畫橢圓

你沒有看錯,lineTo這樣一個純粹用來畫直線的方法居然可以用來畫橢圓!?但他確實存在,不過寫法實在是有些不可思議:

代碼如下:

function DrawEllipse(Canvas,O,OA,OB){

//畫橢圓,例子:var B=new Array(150,150); DrawEllipse(hb,B,50,30);

with (Canvas){

var x=O[0]+OA;

var y=O[1];

moveTo(x,y);

for (var i=0;i<=360;i++){

var ii=i*Math.PI/180;

var x=O[0]+OA*Math.cos(ii);

var y=O[1]-OB*Math.sin(ii);

lineTo(x,y);

}

}

}

這個方法的原理是,一個圓有360度,那么就用lineTo循環(huán)360次,畫出每一度的線段,最終連成一個橢圓。其中需要用到三角函數(shù)正弦余弦進行計算。

注意,這個方法的第2個參數(shù)是個數(shù)組,即橢圓的圓心坐標(biāo).

思路很奇葩,而且畫出的橢圓也比較平滑。但不值得大家使用——此方法每畫一個橢圓,就要循環(huán)360次,只有畫的橢圓稍微一多,對瀏覽器的性能就是個考驗。

我們只用了解一下他的思路即可

2,使用arc畫圓,然后把他縮放成一個橢圓

這個方法的原文在此,核心函數(shù)如下:

代碼如下:

var canvas = document.getElementById('myCanvas');

var context = canvas.getContext('2d');

var centerX = 0;

var centerY = 0;

var radius = 50;

// save state

context.save();

// translate context

context.translate(canvas.width / 2, canvas.height / 2);

// scale context horizontally

context.scale(2, 1);

// draw circle which will be stretched into an oval

context.beginPath();

context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);

// restore to original state

context.restore()

此方法用了一個我前面還沒講過的canvas函數(shù),即scale,他能實現(xiàn)canvas的縮放。縮放有水平和垂直兩個方向,代碼中把canvas水平方向放大了,而垂直方向不變,so,原來arc畫出的圓形就變成了一個橢圓。

這個方法初看甚妙,代碼少,而且原理淺顯易懂。但分析一下就能發(fā)現(xiàn)他的明顯缺點了,就是——不精確!比如我需要寬171高56的橢圓,此時我們?nèi)绻補rc的半徑定為28的話,那么后面就要為171/28/2這個蛋疼的不知所云的數(shù)字郁悶了。

不過有個折中的辦法是始終把arc的半徑設(shè)成100,然后,不夠就放大,超過了就縮小。但是,還是不精確。

3,使用貝賽爾曲線bezierCurveTo

自從覺得上面的縮放法不精確后,我就很想找到一個精確的畫橢圓的方法,最后在stackoverflow上找到了:

代碼如下:

function drawEllipse(ctx, x, y, w, h) {

var kappa = 0.5522848;

ox = (w / 2) * kappa, // control point offset horizontal

oy = (h / 2) * kappa, // control point offset vertical

xe = x + w, // x-end

ye = y + h, // y-end

xm = x + w / 2, // x-middle

ym = y + h / 2; // y-middle

ctx.beginPath();

ctx.moveTo(x, ym);

ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);

ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);

ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);

ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);

ctx.closePath();

ctx.stroke();

}

這個方法可以算是比較完美的了。他把一個橢圓分成了4條貝塞爾曲線,用他們連成了一個橢圓。最后寬度高度也比較精確,開銷也較少。

但此方法依然有缺點。大家看那個kappa參數(shù),有個很奇特的值,相信很多人在幾何專家告訴你為什么他要取這個值之前,都不明白為什么非要取這個值——我到現(xiàn)在還是不知道。并且我有很強烈的想把他改一下看看有什么后果的沖動。

當(dāng)然我這種類似強迫癥患者的沖動并不能說成是此方法的缺點,他真正的缺點是——為什么要用4條貝塞爾曲線?我個人覺得,一個橢圓明顯是由兩條貝塞爾曲線組成的而不是4條。這個想法最終讓我找到了最完美的畫橢圓的方法。

4,使用兩條貝賽爾曲線畫出橢圓

為了了解上一個方法能否精簡,我專門注冊了一個stackoverflow的帳號去提問,由于問題里有圖片,積分不夠不能傳,我還迫不得已用勉勉強強的英語水平去回答老外的問題掙積分。但最終好運到了,回答一個問題就解決了我的積分問題。

我提的貝賽爾曲線和橢圓的關(guān)系的問題在此.

說實話,下面老外的回答我大部分沒看懂,但幸虧他提供了一個代碼示例頁,讓我明白了原理,在此對他表示再次的感謝。而根據(jù)他的解答,我找到的畫橢圓的方法如下:

代碼如下:

//橢圓

CanvasRenderingContext2D.prototype.oval = function (x, y, width, height) {

var k = (width/0.75)/2,

w = width/2,

h = height/2;

this.beginPath();

this.moveTo(x, y-h);

this.bezierCurveTo(x+k, y-h, x+k, y+h, x, y+h);

this.bezierCurveTo(x-k, y+h, x-k, y-h, x, y-h);

this.closePath();

return this;

}

此方法既精確,又代碼少,而且也沒有奇怪的難懂的地方。只需要記住這一點,橢圓的寬度與畫出橢圓的貝賽爾曲線的控制點的坐標(biāo)比例如下:

貝塞爾控制點x=(橢圓寬度/0.75)/2這一點已經(jīng)在代碼中體現(xiàn)了。

大家可自行試驗上面的4個方法畫出橢圓。

如果你發(fā)現(xiàn)了更簡單的方法,也請分享出來大家探討吧。

更多信息請查看網(wǎng)頁制作
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權(quán)所有:易賢網(wǎng)

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
中国成人在线视频| 久久久久久亚洲精品杨幂换脸| 在线看片一区| 亚洲伦伦在线| 欧美一区二区三区在线播放 | 久久狠狠婷婷| 欧美日韩亚洲免费| 亚洲精品一区二区三区樱花 | 欧美三级免费| 国产精品夜夜夜| 欧美日韩综合网| 国产精品久久久久久久免费软件 | 你懂的视频一区二区| 国产精品theporn| 在线一区免费观看| 欧美视频四区| 久久久久免费| 国产欧美在线| 91久久综合| 欧美激情视频一区二区三区免费| 日韩亚洲视频在线| 国模吧视频一区| 久久这里只有| 亚洲在线免费| 国产精品主播| 国产亚洲毛片在线| 一本不卡影院| 亚洲看片免费| 亚洲在线一区| 国产中文一区二区| 欧美国产免费| 欧美激情在线| 欧美黄色一区二区| 国产精品一区亚洲| 国产欧美另类| 亚洲最新在线| 99xxxx成人网| 在线综合视频| 亚洲深爱激情| 国产精品一二| 免费亚洲一区二区| 另类国产ts人妖高潮视频| av成人天堂| 国产日韩在线一区二区三区| 中文欧美日韩| 先锋影音久久久| 先锋亚洲精品| 欧美91视频| 欧美精品国产| 黄色在线成人| 夜久久久久久| 免费看黄裸体一级大秀欧美| 久久这里只有| 激情综合自拍| 99香蕉国产精品偷在线观看 | 亚洲国产一区二区三区在线播 | 亚洲制服av| 久久精品女人| 欧美一区1区三区3区公司| 99伊人成综合| 欧美中日韩免费视频| 亚洲人成人一区二区三区| 欧美 日韩 国产一区二区在线视频| 蜜桃av久久久亚洲精品| 欧美欧美全黄| 夜夜夜久久久| 欧美.www| 妖精视频成人观看www| 亚洲一区二区精品在线观看| 欧美在线黄色| 亚洲每日在线| 久久久久国产精品一区二区| 国产精品一区视频网站| 你懂的一区二区| 国产精品va| 国产一区二区高清不卡| 欧美日本不卡| 国产视频一区免费看| 久久综合狠狠| 一本色道久久综合亚洲精品婷婷| 亚洲在线观看| 亚洲网站视频| 久久三级福利| 一本色道久久综合一区| 欧美+日本+国产+在线a∨观看| 亚洲一级网站| 久久美女性网| 国产一级一区二区| 黄色精品一区| 欧美淫片网站| 免费在线播放第一区高清av| 在线观看亚洲| 久久综合中文| 国产农村妇女精品一二区| 亚洲一区影院| 亚洲经典在线看| 欧美a级片一区| 午夜亚洲一区| 中日韩男男gay无套| 亚洲图片在线| 欧美日韩另类丝袜其他| 亚洲免费网址| 国产精品夜夜夜一区二区三区尤| 激情久久久久| 激情久久中文字幕| 欧美婷婷在线| 欧美另类一区| 欧美激情国产日韩| 欧美一区视频| 欧美凹凸一区二区三区视频| 久久精品五月| 久久三级视频| 欧美福利专区| 欧美日韩精品免费观看视频完整| 久久久久久一区| 免费久久99精品国产自在现线| 亚洲三级毛片| 亚洲先锋成人| 激情综合在线| 伊人久久亚洲美女图片| 国产一区观看| 在线播放豆国产99亚洲| 狠狠久久综合婷婷不卡| 亚洲高清在线播放| 亚洲国产精品第一区二区| 影音先锋国产精品| 91久久在线| 国产精品外国| 久久青草久久| 国产在线日韩| 亚洲欧洲一级| 亚洲一区高清| 久久青青草原一区二区| 欧美不卡三区| 一区久久精品| 一区二区毛片| 免费看的黄色欧美网站| 久久久精品网| 国产一区二区在线观看免费播放| 亚洲国产欧美日韩| 午夜亚洲一区| 黑人中文字幕一区二区三区| 一本不卡影院| 久久青青草综合| 一区在线视频观看| 国产伦精品一区二区三区| 女女同性女同一区二区三区91| 好看不卡的中文字幕| 国产亚洲一级| 国产精品国码视频| 国产美女精品| 激情综合在线| 久久亚洲高清| 一本久久综合| 国产精品mm| 性xx色xx综合久久久xx| 一区在线观看| 欧美二区不卡| 亚洲欧美成人| 国内精品久久久久久久果冻传媒| 国产精品社区| 亚洲性图久久| 性欧美xxxx大乳国产app| 性感少妇一区| 一区在线免费| 欧美激情综合| 久久国产日韩欧美| 国产日韩欧美一区二区| 欧美日本中文| 久久久久久久波多野高潮日日| 亚洲理伦在线| 极品少妇一区二区三区| 你懂的国产精品| 午夜亚洲性色视频| 国产精品久久一区二区三区| 在线欧美日韩| 精品91视频| 国产一区清纯| 欧美精品尤物在线| 香蕉久久夜色精品| 国产亚洲网站| 国产亚洲一级| 国产精品呻吟| 国产视频亚洲| 国产亚洲在线观看| 国产亚洲成人一区| 在线一区视频| 国产精品一区二区三区免费观看| 亚洲精品一区二| 亚洲精品少妇| 亚洲精品国产日韩| 99精品国产福利在线观看免费| 一区二区三区我不卡| 好吊日精品视频| 亚洲图片在线| 亚洲国产专区校园欧美| 亚洲精品欧美| 国产精品毛片一区二区三区| 国产日韩欧美二区| 亚洲一区二区精品在线观看| 亚洲尤物精选| 久久男女视频| 黄色国产精品一区二区三区| 伊人久久大香线蕉av超碰演员| 一区三区视频| 国产偷久久久精品专区| 久久福利一区| 欧美先锋影音| 一本色道久久精品| 鲁大师成人一区二区三区| 久久综合九色99| 狠狠入ady亚洲精品| 亚洲国产1区| 国产伦理一区| 欧美日韩网址| 国产欧美日本| 你懂的国产精品永久在线| 国自产拍偷拍福利精品免费一| 亚洲青涩在线| 久久一综合视频| 亚洲高清资源| 久久久99国产精品免费| 红桃视频欧美| 久久久久se| 最新国产乱人伦偷精品免费网站| 国产日韩欧美一区二区三区在线观看| 久久高清免费观看| 国内精品美女在线观看| 亚洲视频成人| 国产一区自拍视频| 午夜在线视频观看日韩17c| 欧美另类亚洲| 国产婷婷精品| 黑人一区二区| 久久国产免费| 99热这里只有成人精品国产| 久久天堂成人| 亚洲一区bb| 亚洲欧洲精品一区| 午夜精品亚洲一区二区三区嫩草| 亚洲日本激情| 狠狠色噜噜狠狠色综合久| 午夜一区不卡| 国产欧美日韩一级| 亚洲天堂偷拍| 国产精品v亚洲精品v日韩精品 | 国产一区美女| 久久精品综合一区| 国产欧美日本在线| 亚洲国产精品综合| 合欧美一区二区三区| 欧美精品一区在线发布| 久久精品国产第一区二区三区最新章节 | 欧美另类视频| 鲁鲁狠狠狠7777一区二区| 一本色道久久| 亚洲精品欧洲精品| 亚洲激情另类| 亚洲福利免费| 亚洲成人原创| 黄色国产精品一区二区三区| 欧美日韩精选| 欧美日韩1区| 欧美日韩一区在线播放| 欧美一区精品| 欧美精品99| 欧美色综合网| 极品日韩久久| 亚洲九九精品| 国产日韩视频| 羞羞答答国产精品www一本| 亚洲一区二区三区精品在线观看| 国产精品亚洲不卡a| 国产精品日韩二区| 麻豆精品91| 欧美另类专区| 亚洲国产免费| 亚洲一区二区高清视频| 久久精品伊人| 国产精品激情电影| 亚洲精品韩国| 亚洲欧美久久久| 欧美国产综合| 最新成人av网站| 国产免费成人| 欧美精品九九| 亚洲精品偷拍| 久久久久九九九| 激情欧美国产欧美| 国产美女诱惑一区二区| 欧美福利在线| 99国产一区| 欧美一区1区三区3区公司 | 夜夜爽99久久国产综合精品女不卡| 亚洲精品一级| 久久久精品国产一区二区三区| 久久久夜精品| 91久久精品国产91久久性色tv| 亚洲综合99| 亚洲无线一线二线三线区别av| 在线亚洲免费| 欧美日韩国产三区| 国产精品美女久久久| 欧美日韩成人| 欧美一区=区| 亚洲伦伦在线| 欧美网站在线| 久久高清免费观看| 日韩视频精品| 国模吧视频一区| 久久精品首页| 一区二区三区国产在线| 欧美日韩一区二区三区四区在线观看| 中文一区在线| 激情婷婷亚洲| 欧美激情第10页| 性久久久久久| 国产一区白浆| 日韩天堂av| 在线观看亚洲| 国内不卡一区二区三区| 久久中文精品| 男女精品网站| 亚洲尤物影院| 国产精品五区| 一级成人国产| 在线视频精品| 日韩亚洲视频在线| 亚洲日本成人| 亚洲黄色精品| 亚洲欧洲精品一区二区| 黄色日韩在线| 激情av一区| 狠久久av成人天堂| 亚洲一本视频| 亚洲高清不卡| 亚洲日本欧美| 一本久久综合| 国产欧美丝祙| 亚洲在线播放| 麻豆精品传媒视频| 久久婷婷av| 久久青草久久| 欧美日韩高清在线一区| 欧美激情五月| 亚洲网站在线| 日韩香蕉视频| 亚洲女同同性videoxma| 先锋a资源在线看亚洲| 鲁大师影院一区二区三区| 毛片一区二区| 欧美精选一区| 伊甸园精品99久久久久久| 亚洲高清网站| 国产精品普通话对白| 欧美中文字幕| 国产精品a级| 日韩视频中文| 男女精品视频| 国产精品国产精品| 亚洲精品视频啊美女在线直播| 一本色道久久| 久久亚裔精品欧美| 亚洲午夜精品久久久久久app| 亚洲国产精品第一区二区三区| aa级大片欧美三级| 久久黄色影院| 伊人久久亚洲美女图片| 中文亚洲免费| 午夜激情一区| 一区二区三区免费看| 久久精品国产第一区二区三区最新章节 | 欧美午夜不卡| 中日韩视频在线观看| 久久久久久一区| 亚洲激情综合| 欧美在线1区| 99视频一区| 欧美日韩综合| 午夜亚洲伦理| 欧美系列一区| 国产伦精品一区二区三区视频孕妇 | 欧美日韩一区二区三区在线观看免| 在线看片一区| 久久一区激情| 国产欧美日韩一区| 欧美日韩综合精品| 午夜在线一区二区| 亚洲激情国产| 欧美日韩亚洲一区三区| 亚洲一区二区四区| 亚洲国产1区| 欧美涩涩视频| 老妇喷水一区二区三区| 国产欧美日韩一区二区三区在线| 欧美另类亚洲| 老司机午夜精品视频| 国产精品嫩草99av在线| 在线日韩欧美| 好吊一区二区三区|