婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > html5 Canvas畫圖教程(11)—使用lineTo/arc/bezierCurveTo畫橢圓形

html5 Canvas畫圖教程(11)—使用lineTo/arc/bezierCurveTo畫橢圓形

熱門標簽:高德地圖標注錯誤怎么修改 江蘇高頻外呼系統線路 洛陽市伊川縣地圖標注中心官網 平頂山電子地圖標注怎么修改 電銷機器人視頻 地圖標注自己去過的地方 標準智能外呼系統 搜狗星級酒店地圖標注 會聲會影怎樣做地圖標注效果
在canvas中可以很方便的用arc方法畫出圓形,本來圓形也可以看作是一個寬高相等的橢圓,但canvas中根本沒有畫橢圓的方法,我們要用其他方法來模擬。
我們首先要明確畫一個橢圓需要那些參數,基本的幾何知識告訴我們,橢圓需要圓心坐標,寬度,高度——或者還有旋轉角度,不過這個可以暫時不要,旋轉是比較容易的。
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循環360次,畫出每一度的線段,最終連成一個橢圓。其中需要用到三角函數正弦余弦進行計算。
注意,這個方法的第2個參數是個數組,即橢圓的圓心坐標.

思路很奇葩,而且畫出的橢圓也比較平滑。但不值得大家使用——此方法每畫一個橢圓,就要循環360次,只有畫的橢圓稍微一多,對瀏覽器的性能就是個考驗。
我們只用了解一下他的思路即可
2,使用arc畫圓,然后把他縮放成一個橢圓
這個方法的原文在此,核心函數如下:

復制代碼
代碼如下:

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函數,即scale,他能實現canvas的縮放。縮放有水平和垂直兩個方向,代碼中把canvas水平方向放大了,而垂直方向不變,so,原來arc畫出的圓形就變成了一個橢圓。
這個方法初看甚妙,代碼少,而且原理淺顯易懂。但分析一下就能發現他的明顯缺點了,就是——不精確!比如我需要寬171高56的橢圓,此時我們如果把arc的半徑定為28的話,那么后面就要為171/28/2這個蛋疼的不知所云的數字郁悶了。

不過有個折中的辦法是始終把arc的半徑設成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參數,有個很奇特的值,相信很多人在幾何專家告訴你為什么他要取這個值之前,都不明白為什么非要取這個值——我到現在還是不知道。并且我有很強烈的想把他改一下看看有什么后果的沖動。

當然我這種類似強迫癥患者的沖動并不能說成是此方法的缺點,他真正的缺點是——為什么要用4條貝塞爾曲線?我個人覺得,一個橢圓明顯是由兩條貝塞爾曲線組成的而不是4條。這個想法最終讓我找到了最完美的畫橢圓的方法。
 4,使用兩條貝賽爾曲線畫出橢圓
為了了解上一個方法能否精簡,我專門注冊了一個stackoverflow的帳號去提問,由于問題里有圖片,積分不夠不能傳,我還迫不得已用勉勉強強的英語水平去回答老外的問題掙積分。但最終好運到了,回答一個問題就解決了我的積分問題。
我提的貝賽爾曲線和橢圓的關系的問題在此.
說實話,下面老外的回答我大部分沒看懂,但幸虧他提供了一個代碼示例頁,讓我明白了原理,在此對他表示再次的感謝。而根據他的解答,我找到的畫橢圓的方法如下:

復制代碼
代碼如下:

//橢圓
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;
}

此方法既精確,又代碼少,而且也沒有奇怪的難懂的地方。只需要記住這一點,橢圓的寬度與畫出橢圓的貝賽爾曲線的控制點的坐標比例如下:
貝塞爾控制點x=(橢圓寬度/0.75)/2這一點已經在代碼中體現了。

大家可自行試驗上面的4個方法畫出橢圓。
如果你發現了更簡單的方法,也請分享出來大家探討吧。

標簽:蚌埠 松原 廣東 果洛 鄂爾多斯 常德 阿克蘇 廣西

巨人網絡通訊聲明:本文標題《html5 Canvas畫圖教程(11)—使用lineTo/arc/bezierCurveTo畫橢圓形》,本文關鍵詞  html5,Canvas,畫圖,教程,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5 Canvas畫圖教程(11)—使用lineTo/arc/bezierCurveTo畫橢圓形》相關的同類信息!
  • 本頁收集關于html5 Canvas畫圖教程(11)—使用lineTo/arc/bezierCurveTo畫橢圓形的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲乱码中文字幕| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩高清不卡在线| 亚洲美女屁股眼交3| 中文字幕制服丝袜一区二区三区 | 国产精品国产馆在线真实露脸 | 亚洲国产精品一区二区尤物区| 国产欧美一区二区三区沐欲| 69堂精品视频| 在线视频观看一区| 91在线视频网址| 国产成人亚洲精品狼色在线| 蜜臀精品一区二区三区在线观看| 亚洲一区二区三区激情| 亚洲美女精品一区| 亚洲私人影院在线观看| 中文字幕精品三区| 国产视频一区二区在线| 中文字幕中文字幕一区| 亚洲精品国产品国语在线app| 麻豆91免费看| 亚洲色欲色欲www| 日韩欧美国产电影| 亚洲女厕所小便bbb| 精品一区二区三区免费视频| 91久久精品一区二区三| 国产欧美日韩三区| 美女久久久精品| 欧美在线短视频| 国产精品久久久久影院| 蜜桃传媒麻豆第一区在线观看| 不卡视频一二三四| 久久精品综合网| 日韩av成人高清| 欧美日韩一区二区三区四区五区| 国产精品欧美一级免费| 国产自产2019最新不卡| 欧美肥妇毛茸茸| 亚洲午夜久久久久久久久久久 | 国产91露脸合集magnet| 91精品国产综合久久香蕉麻豆| 国产精品国产三级国产aⅴ入口| 国内外精品视频| 欧美成人免费网站| 麻豆精品在线视频| 日韩欧美国产一区在线观看| 日韩二区三区在线观看| 欧美日韩一级片在线观看| 亚洲宅男天堂在线观看无病毒| 成人黄色在线网站| 中文字幕乱码久久午夜不卡| 粉嫩av亚洲一区二区图片| 久久久精品蜜桃| 国产麻豆精品在线观看| 成人av电影在线播放| 九一九一国产精品| 成人午夜碰碰视频| 91久久精品日日躁夜夜躁欧美| 欧美精品在线一区二区三区| 精品国产91九色蝌蚪| 国产精品久久久久久久浪潮网站| 一区二区日韩电影| 日韩精品免费视频人成| 极品少妇xxxx偷拍精品少妇| 国产成人在线观看免费网站| 91电影在线观看| 日韩欧美aaaaaa| 国产精品素人视频| 亚洲图片自拍偷拍| 精品中文字幕一区二区| 久久亚洲综合色一区二区三区| 亚洲免费观看在线视频| 在线观看视频一区| 蜜臀av一级做a爰片久久| 蜜臀av性久久久久蜜臀av麻豆| 91官网在线观看| 日本怡春院一区二区| 欧美xxxxx裸体时装秀| 国产精品一区2区| 中文字幕av一区二区三区免费看| 国产999精品久久久久久绿帽| 国产精品国产三级国产三级人妇 | 欧美一级免费大片| 国内精品国产三级国产a久久 | 亚洲精品在线电影| 国产精品123| 亚洲欧美日韩系列| 91.麻豆视频| www.av亚洲| 奇米四色…亚洲| 国产精品久久久久久久久图文区 | 亚洲一区在线播放| 精品免费99久久| 色综合天天综合网国产成人综合天| 亚洲在线成人精品| 久久久久久99久久久精品网站| 91视频观看视频| 免费成人美女在线观看| 日韩毛片视频在线看| 欧美一区二区在线视频| jizzjizzjizz欧美| 精品一区二区三区的国产在线播放 | 欧美疯狂做受xxxx富婆| 久久久久久亚洲综合影院红桃| 亚洲综合视频在线| 韩国一区二区视频| 欧美肥妇bbw| 五月婷婷久久综合| 91豆麻精品91久久久久久| 国产视频一区二区三区在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | av中文字幕一区| 制服丝袜激情欧洲亚洲| 欧美日韩国产高清一区二区三区 | 中文字幕va一区二区三区| 美腿丝袜亚洲色图| 欧美精品丝袜中出| 一区二区三区四区亚洲| 成人免费福利片| 国产欧美日韩不卡| 国产一区二区美女| 精品国免费一区二区三区| 日韩av一区二区在线影视| 欧美日韩国产欧美日美国产精品| 一区二区三区中文字幕| 97久久精品人人爽人人爽蜜臀| 国产亚洲一区二区三区四区 | 亚洲综合丁香婷婷六月香| 国产1区2区3区精品美女| 久久综合九色综合97婷婷| 精品在线免费视频| 日韩视频免费观看高清在线视频| 人人超碰91尤物精品国产| 欧美丝袜第三区| 午夜久久福利影院| 欧美三级日本三级少妇99| 亚洲午夜私人影院| 911精品国产一区二区在线| 日本网站在线观看一区二区三区| 欧美日韩高清在线| 日韩国产欧美三级| 欧美午夜精品理论片a级按摩| 亚洲成a人v欧美综合天堂下载| 欧美日韩综合在线免费观看| 亚洲成人av资源| 91精品国产综合久久婷婷香蕉| 欧美aaa在线| 久久蜜臀精品av| proumb性欧美在线观看| 亚洲三级小视频| 欧美亚洲自拍偷拍| 亚洲二区在线视频| 欧美放荡的少妇| 国产一区二区三区在线看麻豆| 久久老女人爱爱| 波多野结衣一区二区三区| 亚洲免费三区一区二区| 色综合激情久久| 久久国产人妖系列| 国产精品一区二区在线观看不卡 | 蜜桃视频在线观看一区| 国产精品日韩成人| 欧美不卡123| 欧美美女一区二区三区| 一本一道久久a久久精品| 极品少妇xxxx精品少妇| 亚洲品质自拍视频网站| 亚洲精品ww久久久久久p站| 色噜噜狠狠色综合中国| 午夜欧美一区二区三区在线播放| 欧美色图在线观看| 免费看欧美女人艹b| 国产亚洲精品资源在线26u| 91在线观看高清| 日韩有码一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 成人av集中营| 亚洲国产精品尤物yw在线观看| 日韩欧美123| aaa亚洲精品| 日韩成人一级片| 欧美国产日韩在线观看| 欧美图片一区二区三区| 国产盗摄一区二区三区| 亚洲一区免费视频| 亚洲成人精品影院| 国产成人免费9x9x人网站视频| 欧美日韩午夜在线视频| 国产亚洲欧美一区在线观看| 亚洲午夜久久久久中文字幕久| 国产在线国偷精品免费看| 91久久香蕉国产日韩欧美9色| 久久久国产午夜精品| 亚洲午夜免费电影| 不卡的av电影| 欧美成人aa大片| 亚洲综合999| 波多野结衣中文字幕一区| 欧美大片日本大片免费观看| 亚洲一区二区三区免费视频|