成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JavaScript如何使用插值實(shí)現(xiàn)圖像漸變

瀏覽:39日期:2023-10-23 09:41:03

描述由一個(gè)圖形變化為另一個(gè)圖形過(guò)程中的各個(gè)中間圖形,稱(chēng)為漸變圖形??梢岳貌逯邓惴ㄇ蟮酶鱾€(gè)漸變圖形。

設(shè)在源圖形和目標(biāo)圖形上各取M個(gè)對(duì)應(yīng)坐標(biāo)點(diǎn),并分別保存到數(shù)組中,源圖形用數(shù)組SX[M]和SY[M]保存M個(gè)坐標(biāo)點(diǎn)(sx,sy),目標(biāo)圖形用數(shù)組DX[M]和DY[M]保存M個(gè)坐標(biāo)點(diǎn)(dx,dy)。若需生成源圖形變換到目標(biāo)圖形中的N-1個(gè)漸變圖形,采用簡(jiǎn)單的線性插值可以編寫(xiě)如下的二重循環(huán):

for (k=1;k<N;k++) for (i=0;i<M;i++) { x=(dx[i]-sx[i])/N*k+sx[i]; y=(dy[i]-sy[i])/N*k+sy[i]; // 按求得的插值坐標(biāo)點(diǎn)繪制漸變圖形 }

1.六瓣花朵漸變?yōu)閳A

六瓣花朵的笛卡爾坐標(biāo)方程式設(shè)定為:

t=r1*(1+sin(18*θ)/5) *(0.5+Math.sin(6*θ)/2);

x=t*cos(θ);

y=t* sin(θ); (0≤θ≤2π)

圓的笛卡爾坐標(biāo)方程式為:

x=r*cos(θ)

y=r*sin(θ) (0≤θ≤2π)

在六瓣花朵和圓上分別取128個(gè)點(diǎn),然后利用簡(jiǎn)單的線性插值繪制中間24個(gè)漸變圖形。編寫(xiě)如下的HTML代碼。

<!DOCTYPE html><head><title>六瓣花朵漸變?yōu)閳A</title><script type='text/javascript'>function draw(id){var canvas = document.getElementById(id);if (canvas == null)return false;var context = canvas.getContext(’2d’);context.fillStyle = '#EEEEFF';context.fillRect(0, 0, 200, 200);context.strokeStyle = 'red';context.lineWidth = 1;var dig = Math.PI / 64;var x1 = new Array(129);var y1 = new Array(129);var x2 = new Array(129);var y2 = new Array(129);for (var i = 0; i <= 128; i++){d = 50 * (1 + Math.sin(18 * i * dig) /5);t = d * (0.5 + Math.sin(6 * i * dig) /2);x1[i] = t * Math.cos(i * dig);y1[i] = t * Math.sin(i * dig);x2[i] = 80 * Math.cos(i * dig);y2[i] = 80 * Math.sin(i * dig);}context.beginPath();for (n = 0; n <= 25; n++)for (i = 0; i <= 128; i++){x = (x2[i] - x1[i]) / 25 * n + x1[i] +100;y = (y2[i] - y1[i]) / 25 * n + y1[i] +100;if (i == 0){context.moveTo(x, y);bx = x;by = y;} elsecontext.lineTo(x, y);}context.lineTo(bx, by);context.closePath();context.stroke();}</script></head><body onload='draw(’myCanvas’);'><canvas height='200'></canvas></body></html>

將上述HTML代碼保存到一個(gè)html文本文件中,再在瀏覽器中打開(kāi)包含這段HTML代碼的html文件,可以看到在畫(huà)布中繪制出從六瓣花朵漸變?yōu)閳A的圖案,如圖1所示。

JavaScript如何使用插值實(shí)現(xiàn)圖像漸變

圖1 六瓣花朵漸變?yōu)閳A

2.圓漸變?yōu)榛ǘ?/b>

我們將圖1圖形中的圓漸變?yōu)榱昊ǘ涞倪^(guò)程動(dòng)態(tài)展示出來(lái)。編寫(xiě)的HTML文件內(nèi)容如下。

<!DOCTYPE><html><head><title>圓漸變?yōu)榛ǘ?lt;/title></head><body><canvas height='200'style='border:3px double #996633;'></canvas><script type='text/javascript'>var canvas = document.getElementById(’myCanvas’);var context = canvas.getContext(’2d’);context.fillStyle = '#EEEEFF';context.fillRect(0, 0, 200, 200);context.fillStyle = 'red';var dig = Math.PI / 64;var x1 = new Array(129);var y1 = new Array(129);var x2 = new Array(129);var y2 = new Array(129);var n = 0;for (var i = 0; i <= 128; i++){d = 50 * (1 + Math.sin(18 * i * dig) /5);t = d * (0.5 + Math.sin(6 * i * dig) /2);x1[i] = t * Math.cos(i * dig);y1[i] = t * Math.sin(i * dig);x2[i] = 80 * Math.cos(i * dig);y2[i] = 80 * Math.sin(i * dig);}function draw(){context.clearRect(0, 0, 200, 200);context.beginPath();for (i = 0; i <= 128; i++){x = (x1[i] - x2[i]) / 25 * n + x2[i] +100;y = (y1[i] - y2[i]) / 25 * n + y2[i] +100;if (i == 0){context.moveTo(x, y);bx = x;by = y;} elsecontext.lineTo(x, y);}context.lineTo(bx, by);context.stroke();n = n + 1;if (n > 25) n = 0;context.fill();}window.setInterval(’draw()’, 300);</script></body></html>

將上述HTML代碼保存到一個(gè)html文本文件中,再在瀏覽器中打開(kāi)包含這段HTML代碼的html文件,可以在畫(huà)布中看到從圓漸變?yōu)榱昊ǘ涞膭?dòng)畫(huà)過(guò)程,如圖2所示。

JavaScript如何使用插值實(shí)現(xiàn)圖像漸變

圖2 從圓漸變?yōu)榱昊ǘ?/p>

3.六瓣花朵漸變?yōu)檎叫?/b>

仿照上面的思路,設(shè)計(jì)程序?qū)⒘昊ǘ錆u變?yōu)檎叫?,且漸變計(jì)算時(shí)采用對(duì)數(shù)函數(shù)。編寫(xiě)如下的HTML代碼。

<!DOCTYPE html><head><title>六瓣花朵漸變?yōu)檎叫?lt;/title><script type='text/javascript'>function draw(id){var canvas = document.getElementById(id);if (canvas == null)return false;var context = canvas.getContext(’2d’);context.fillStyle = '#EEEEDD';context.fillRect(0, 0, 300, 300);context.strokeStyle = 'red';context.lineWidth = 1;var dig = Math.PI / 60;var x1 = new Array(120);var y1 = new Array(120);var x2 = new Array(120);var y2 = new Array(120);// 生成花瓣基本數(shù)據(jù),坐標(biāo)保存在(x1[i],y1[i])中var petalNum = 6; // 花瓣數(shù)for (var i = 0; i < 120; i++){d = 50 * (1 + Math.sin(petalNum * (i * dig + Math.PI / 4)));x1[i] = d * Math.cos(i * dig + Math.PI / 4);y1[i] = -d * Math.sin(i * dig +Math.PI / 4);}// 生成多邊形基本數(shù)據(jù),坐標(biāo)保存在(x2[i],y2[i])中var r = 150;var sideNum = 4; // 正多邊形邊數(shù)var k = 120 / sideNum;dig = Math.PI / sideNum;var dd = 2 * r * Math.sin(dig) / k;for (i = 0; i < sideNum; i++){aa = 2 * i * dig + 3 * Math.PI / 4;x0 = r * Math.sin(aa);y0 = r * Math.cos(aa);for (j = 0; j < k; j++){x2[i * k + j] = x0 + j * dd * Math.sin(aa + Math.PI / 2 + Math.PI /sideNum);y2[i * k + j] = y0 + j * dd * Math.cos(aa + Math.PI / 2 + Math.PI /sideNum);}}context.beginPath();// 按對(duì)數(shù)規(guī)律進(jìn)行圖案漸變for (n = 0; n <= 25; n++){for (i = 0; i < 120; i++){x = (x2[i] - x1[i]) / Math.log(25) *Math.log(n) + x1[i] + 150;y = (y2[i] - y1[i]) / Math.log(25) *Math.log(n) + y1[i] + 150;if (i == 0){context.moveTo(x, y);bx = x;by = y;} elsecontext.lineTo(x, y);}context.lineTo(bx, by);}context.closePath();context.stroke();}</script></head><body onload='draw(’myCanvas’);'><canvas height='320'></canvas></body></html>

將上述HTML代碼保存到一個(gè)html文本文件中,再在瀏覽器中打開(kāi)包含這段HTML代碼的html文件,可以看到在畫(huà)布中繪制出從六瓣花朵漸變?yōu)檎叫蔚膱D案,如圖3所示。

JavaScript如何使用插值實(shí)現(xiàn)圖像漸變

圖3 從六瓣花朵漸變?yōu)檎叫?/p>

將繪制圖3的HTML程序中的花瓣數(shù)設(shè)置為5,正多邊形邊數(shù)也設(shè)置為5,即修改語(yǔ)句“var petalNum=6;”為“var petalNum=5;”,修改語(yǔ)句“var sideNum=4;”為“var sideNum=5;”,則在畫(huà)布中繪制出如圖4所示的從五瓣花朵漸變?yōu)檎暹呅蔚膱D案。

JavaScript如何使用插值實(shí)現(xiàn)圖像漸變

圖4 從五瓣花朵漸變?yōu)檎暹呅?/p>

4.正五邊形漸變?yōu)槲灏昊ǘ?/b>

我們將圖4圖形中的正五邊形漸變?yōu)槲灏昊ǘ涞倪^(guò)程動(dòng)態(tài)展示出來(lái)。編寫(xiě)的HTML文件內(nèi)容如下。

<!DOCTYPE><html><head><title>正五邊形漸變?yōu)槲灏昊ǘ?lt;/title></head><body><canvas height='300'style='border:3px double #996633;'></canvas><script type='text/javascript'>var canvas = document.getElementById(’myCanvas’);var context = canvas.getContext(’2d’);context.fillStyle = '#EEEEFF';context.fillRect(0, 0, 300, 300);context.fillStyle = 'red';var dig = Math.PI / 60;var x1 = new Array(120);var y1 = new Array(120);var x2 = new Array(120);var y2 = new Array(120);// 生成花瓣基本數(shù)據(jù),坐標(biāo)保存在(x1[i],y1[i])中var petalNum = 5;for (var i = 0; i < 120; i++){d = 50 * (1 + Math.sin(petalNum * (i *dig + Math.PI / 4)));x1[i] = d * Math.cos(i * dig + Math.PI /4);y1[i] = -d * Math.sin(i * dig + Math.PI / 4);}// 生成多邊形基本數(shù)據(jù),坐標(biāo)保存在(x2[i],y2[i])中var r = 150;var sideNum = 5;var k = 120 / sideNum;dig = Math.PI / sideNum;var dd = 2 * r * Math.sin(dig) / k;for (i = 0; i < sideNum; i++){aa = 2 * i * dig + 3 * Math.PI / 4;x0 = r * Math.sin(aa);y0 = r * Math.cos(aa);for (j = 0; j < k; j++){x2[i * k + j] = x0 + j * dd * Math.sin(aa + Math.PI / 2 + Math.PI /sideNum);y2[i * k + j] = y0 + j * dd * Math.cos(aa + Math.PI / 2 + Math.PI /sideNum);}}var n = 0;function draw(){context.clearRect(0, 0, 300, 300);context.beginPath();for (i = 0; i < 120; i++){x = (x1[i] - x2[i]) / Math.log(25) *Math.log(n) + x2[i] + 150;y = (y1[i] - y2[i]) / Math.log(25) *Math.log(n) + y2[i] + 150;if (i == 0){context.moveTo(x, y);bx = x;by = y;} elsecontext.lineTo(x, y);}context.lineTo(bx, by);context.closePath();context.stroke();n = n + 1;if (n > 25) n = 0;context.fill();}window.setInterval(’draw()’, 400);</script></body></html>

將上述HTML代碼保存到一個(gè)html文本文件中,再在瀏覽器中打開(kāi)包含這段HTML代碼的html文件,可以在畫(huà)布中看到從正五邊形漸變?yōu)槲灏昊ǘ涞膭?dòng)畫(huà)過(guò)程,如圖5所示。

JavaScript如何使用插值實(shí)現(xiàn)圖像漸變

圖5 正五邊形漸變?yōu)槲灏昊ǘ?/p>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品一区二区免费| 波多野结衣中文一区| 国产一区二区三区不卡在线观看| 久久aⅴ国产紧身牛仔裤| 国产精品久久99| 成人小视频免费在线观看| 欧美日韩国产欧美日美国产精品| 日本一不卡视频| 久久精品男女| 亚洲在线一区二区三区| 亚洲日本黄色| 亚洲欧美日韩国产另类专区| 欧美三区美女| 国产精品毛片久久久久久久| 99国产精品久| 91麻豆精品国产91久久久更新时间| 蜜臀av亚洲一区中文字幕| 性欧美精品高清| 亚洲国产视频在线| 一区二区三区视频在线播放| 亚洲精选视频免费看| 亚洲精品专区| 亚洲一区欧美一区| 亚洲一区不卡| 亚洲二区在线观看| 亚洲欧美卡通另类91av| 亚洲午夜精品久久久久久久久| 国产精品一区二区三区四区五区 | 亚洲精品在线电影| 成人综合日日夜夜| 精品国产乱码久久久久久1区2区| 成人久久视频在线观看| 精品盗摄一区二区三区| 99久久99久久免费精品蜜臀| 久久久噜噜噜久噜久久综合| 欧美在线二区| 成人免费视频在线观看| 99成人在线| 亚洲国产精品久久久久婷婷884| 久久精品五月| 精品一区二区三区免费观看| 欧美日韩精品高清| 国产白丝网站精品污在线入口| 精品蜜桃在线看| 欧美国产三区| 亚洲美女电影在线| 一本色道久久加勒比精品| 乱一区二区av| 日韩一区二区三区电影在线观看| 99视频在线观看一区三区| 国产精品色在线| 国产农村妇女精品一区二区| 久久99国产精品成人| 欧美成人在线直播| 国内精品久久久久久久影视麻豆 | 久久精品国产亚洲高清剧情介绍 | 久久国内精品视频| 日韩免费一区二区| 欧美特黄一区| 亚洲图片一区二区| 欧美三级中文字幕在线观看| 成人午夜精品在线| 亚洲色图欧美偷拍| 欧美性猛片aaaaaaa做受| 成人激情动漫在线观看| 国产精品福利影院| 裸体一区二区| 成人一区二区三区视频在线观看 | 狠狠色丁香婷婷综合| 精品88久久久久88久久久| 亚洲成色精品| 免费看欧美女人艹b| 亚洲精品少妇30p| 国产精品99久久久| 色视频成人在线观看免| 99热这里只有精品8| 久久国产尿小便嘘嘘尿| 国产午夜精品美女毛片视频| 香蕉精品999视频一区二区| 欧美黄污视频| 国产大陆a不卡| 美女视频网站黄色亚洲| 成人国产精品免费| 精品久久久久久亚洲综合网| 亚洲高清毛片| 久久99久久精品欧美| 精品国产一区二区精华| 99一区二区| 国产成人高清在线| 亚洲女女做受ⅹxx高潮| 制服视频三区第一页精品| 亚洲二区精品| 国产成人在线色| 一区二区高清免费观看影视大全| 91精品国产综合久久小美女| 欧美日本亚洲| 精品一区二区三区影院在线午夜| 久久久久亚洲蜜桃| 久久精品官网| 欧美一区亚洲| 毛片av一区二区| 国产精品污www在线观看| 欧美最新大片在线看| 国自产拍偷拍福利精品免费一| 紧缚捆绑精品一区二区| 亚洲乱码国产乱码精品精可以看| 精品视频在线免费看| 亚洲大胆视频| 成人av电影在线播放| 日韩黄色在线观看| 国产精品福利一区二区三区| 日韩视频中午一区| 久久综合图片| 在线国产日韩| 成人av免费网站| 久久aⅴ国产欧美74aaa| 亚洲综合视频网| 久久综合狠狠综合久久激情| 日本韩国欧美国产| 亚洲第一黄网| 播五月开心婷婷综合| 日韩成人午夜精品| 中文字幕一区二区三区不卡| 欧美成人伊人久久综合网| 在线观看不卡视频| 中文精品视频| 国产一区高清视频| 岛国一区二区三区| 麻豆国产91在线播放| 亚洲小说欧美激情另类| 国产精品另类一区| 久久免费国产精品| 7777精品伊人久久久大香线蕉完整版| 久久久久久9| 亚洲色图自拍| 影音国产精品| 91在线国产福利| 国产成人午夜精品5599| 美女诱惑一区二区| 亚洲va韩国va欧美va精品| 国产精品初高中害羞小美女文| 欧美大片在线观看一区| 欧美日韩大陆一区二区| 91成人免费在线视频| 校园春色综合网| 亚洲少妇一区| 亚洲成色www久久网站| 91丨国产丨九色丨pron| 成人精品高清在线| 国产九九视频一区二区三区| 精品一区二区免费视频| 裸体在线国模精品偷拍| 丝袜脚交一区二区| 亚洲成av人综合在线观看| 一区二区三区在线免费视频| 国产精品电影院| 国产精品久久久久久久久晋中| 久久毛片高清国产| 欧美精品一区二区三区高清aⅴ| 日韩欧美在线影院| 日韩一区二区三区视频在线| 欧美一区二区三区日韩| 欧美午夜免费电影| 在线精品国精品国产尤物884a| 六月丁香综合| 另类av一区二区| 色综合激情久久| 色8久久精品久久久久久蜜| 色综合久久88色综合天天| 91黄色激情网站| 欧美伊人久久大香线蕉综合69| 色婷婷国产精品久久包臀| 一本久道久久综合中文字幕| 色噜噜夜夜夜综合网| 在线中文字幕不卡| 欧美日韩国产精品自在自线| 欧美乱妇一区二区三区不卡视频| 欧美性xxxxxxxx| 欧美日韩亚洲国产综合| 欧美日韩国产色站一区二区三区| 欧美日韩免费电影| 欧美精品在线观看播放| 欧美日韩一级大片网址| 欧美日韩不卡在线| 欧美一区二区精品在线| 日韩欧美国产综合在线一区二区三区| 欧美一三区三区四区免费在线看 | 中文一区二区在线观看| 中文字幕二三区不卡| 中文字幕一区在线| 亚洲免费av网站| 亚洲成人av一区| 蜜桃视频在线一区| 国产毛片精品视频| a美女胸又www黄视频久久| 欧美日本一区二区高清播放视频| 在线 亚洲欧美在线综合一区| 国产伦精品一区二区三区四区免费| 一本到不卡精品视频在线观看| 欧美精品丝袜中出|