日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript如何使用插值實現圖像漸變

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

描述由一個圖形變化為另一個圖形過程中的各個中間圖形,稱為漸變圖形??梢岳貌逯邓惴ㄇ蟮酶鱾€漸變圖形。

設在源圖形和目標圖形上各取M個對應坐標點,并分別保存到數組中,源圖形用數組SX[M]和SY[M]保存M個坐標點(sx,sy),目標圖形用數組DX[M]和DY[M]保存M個坐標點(dx,dy)。若需生成源圖形變換到目標圖形中的N-1個漸變圖形,采用簡單的線性插值可以編寫如下的二重循環:

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]; // 按求得的插值坐標點繪制漸變圖形 }

1.六瓣花朵漸變為圓

六瓣花朵的笛卡爾坐標方程式設定為:

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

x=t*cos(θ);

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

圓的笛卡爾坐標方程式為:

x=r*cos(θ)

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

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

<!DOCTYPE html><head><title>六瓣花朵漸變為圓</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代碼保存到一個html文本文件中,再在瀏覽器中打開包含這段HTML代碼的html文件,可以看到在畫布中繪制出從六瓣花朵漸變為圓的圖案,如圖1所示。

JavaScript如何使用插值實現圖像漸變

圖1 六瓣花朵漸變為圓

2.圓漸變為花朵

我們將圖1圖形中的圓漸變為六瓣花朵的過程動態展示出來。編寫的HTML文件內容如下。

<!DOCTYPE><html><head><title>圓漸變為花朵</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代碼保存到一個html文本文件中,再在瀏覽器中打開包含這段HTML代碼的html文件,可以在畫布中看到從圓漸變為六瓣花朵的動畫過程,如圖2所示。

JavaScript如何使用插值實現圖像漸變

圖2 從圓漸變為六瓣花朵

3.六瓣花朵漸變為正方形

仿照上面的思路,設計程序將六瓣花朵漸變為正方形,且漸變計算時采用對數函數。編寫如下的HTML代碼。

<!DOCTYPE html><head><title>六瓣花朵漸變為正方形</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);// 生成花瓣基本數據,坐標保存在(x1[i],y1[i])中var petalNum = 6; // 花瓣數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);}// 生成多邊形基本數據,坐標保存在(x2[i],y2[i])中var r = 150;var sideNum = 4; // 正多邊形邊數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();// 按對數規律進行圖案漸變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代碼保存到一個html文本文件中,再在瀏覽器中打開包含這段HTML代碼的html文件,可以看到在畫布中繪制出從六瓣花朵漸變為正方形的圖案,如圖3所示。

JavaScript如何使用插值實現圖像漸變

圖3 從六瓣花朵漸變為正方形

將繪制圖3的HTML程序中的花瓣數設置為5,正多邊形邊數也設置為5,即修改語句“var petalNum=6;”為“var petalNum=5;”,修改語句“var sideNum=4;”為“var sideNum=5;”,則在畫布中繪制出如圖4所示的從五瓣花朵漸變為正五邊形的圖案。

JavaScript如何使用插值實現圖像漸變

圖4 從五瓣花朵漸變為正五邊形

4.正五邊形漸變為五瓣花朵

我們將圖4圖形中的正五邊形漸變為五瓣花朵的過程動態展示出來。編寫的HTML文件內容如下。

<!DOCTYPE><html><head><title>正五邊形漸變為五瓣花朵</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);// 生成花瓣基本數據,坐標保存在(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);}// 生成多邊形基本數據,坐標保存在(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代碼保存到一個html文本文件中,再在瀏覽器中打開包含這段HTML代碼的html文件,可以在畫布中看到從正五邊形漸變為五瓣花朵的動畫過程,如圖5所示。

JavaScript如何使用插值實現圖像漸變

圖5 正五邊形漸變為五瓣花朵

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本成人在线不卡视频| 国产精一区二区| 国精品产品一区| 国产一区二区三区四区大秀| 麻豆91精品91久久久的内涵| 久久精品一本| 日产精品一区| 亚洲国产一区二区在线观看| 亚洲午夜黄色| 男女男精品网站| 99国产精品久久久久久久成人热 | 少妇久久久久| 国产综合精品一区| 免费成人av在线播放| 日韩国产欧美三级| 国产成人免费av一区二区午夜| 国产福利电影在线播放| 欧美成人亚洲| 日韩中文字幕无砖| 精品久久电影| 国产亚洲网站| 国产午夜精品一区在线观看| 丁香婷婷久久| 香蕉久久国产| 69堂免费精品视频在线播放| 麻豆网站免费在线观看| 美女日韩在线中文字幕| 欧美国产精品| 亚洲免费精品| 里番精品3d一二三区| 五月天久久久| 国产精品调教| 夜久久久久久| 国产在线日韩精品| 亚洲v天堂v手机在线| sm捆绑调教国产免费网站在线观看| 1024精品久久久久久久久| 欧美天堂在线| 伊人久久成人| 麻豆视频观看网址久久| 亚洲一区久久| 久久精品国产福利| 久久性天堂网| 香蕉视频亚洲一级| 91精品国产自产观看在线| 久久久久国产精品一区二区| 日韩av在线免费观看不卡| 亚洲电影有码| 欧美国产先锋| 综合亚洲自拍| 999久久久91| 蜜桃久久久久| 日本综合精品一区| 久久一级电影| 久久av免费| 亚洲欧洲免费| 极品日韩av| а√天堂中文在线资源8| 天堂va在线高清一区| 红桃视频国产精品| 欧美13videosex性极品| 国产精品日韩精品中文字幕| 国产亚洲精品v| 久久久久久久久99精品大| 国产精品videossex久久发布| 99国产精品久久久久久久成人热| 精品国产一区二区三区2021| 亚洲欧洲美洲国产香蕉| 亚洲综合精品四区| 秋霞影院一区二区三区| 欧美成a人片免费观看久久五月天| 在线国产精品一区| 亚洲激情黄色| 日韩欧美一区免费| 精品国产午夜肉伦伦影院| 日本成人精品| 日本vs亚洲vs韩国一区三区二区| 亚洲免费在线| 久久av免费| 精品一级视频| 高清一区二区三区| 丰满少妇一区| 黄色在线网站噜噜噜| 精品成av人一区二区三区| 日韩在线网址| 91精品国产自产在线丝袜啪| 天堂av一区| 91亚洲精品视频在线观看 | 精品捆绑调教一区二区三区| 精品视频在线你懂得| 麻豆成人av在线| 精品久久免费| 三上亚洲一区二区| 天堂8中文在线最新版在线| 欧美好骚综合网| 丁香六月综合| 久久在线电影| 99精品视频在线| 亚洲午夜91| 亚洲一区国产| 视频一区中文字幕精品| 日韩在线电影| 91精品视频一区二区| 国产精品最新| 国产一区二区三区久久 | 男女男精品视频网| 亚洲tv在线| 国产精品一区毛片| 久久精品毛片| 久久久久久久欧美精品| 国产精品av一区二区| 午夜欧美精品久久久久久久| 99国产精品久久久久久久| 日韩一区欧美二区| 日韩精品视频在线看| 欧美国产极品| 欧产日产国产精品视频| 午夜精品网站| 婷婷精品在线观看| 久久精品福利| 日韩影院二区| 亚洲欧美激情诱惑| 国产日韩欧美一区| 日韩免费av| 最新国产精品久久久| 久久精品国产99国产| 亚洲一级网站| 亚洲精品影视| 日韩88av| 亚洲在线电影| 麻豆精品久久| 国产一区清纯| 日韩精品一页| 正在播放日韩精品| 日韩制服丝袜av| 国产精品玖玖玖在线资源| 日韩欧美一区二区三区在线视频| 快she精品国产999| 精品视频高潮| 免费人成精品欧美精品| 久久精品国产亚洲一区二区三区| 亚洲午夜一级| 国产亚洲高清在线观看| 夜鲁夜鲁夜鲁视频在线播放| 蜜臀av一区二区在线免费观看 | 国产精品久久久久久久久久妞妞| 国产成人精品福利| 视频一区中文字幕| 久久精品毛片| 亚洲欧美在线专区| 欧洲一区二区三区精品| 日本aⅴ精品一区二区三区| 91av亚洲| 欧美日本不卡高清| 欧洲激情综合| 国产精品2区| 日韩影院精彩在线| 色爱av综合网| 麻豆精品99| 亚洲91在线| 日韩不卡免费高清视频| 国产精品三p一区二区| 老司机久久99久久精品播放免费| 国产不卡精品| 日韩精品一区二区三区免费视频| 神马久久午夜| 你懂的亚洲视频| 亚洲麻豆一区| 红桃视频国产一区| 成人免费网站www网站高清| 欧美a级一区二区| 亚洲另类黄色| 欧美sss在线视频| 国产96在线亚洲| 国产日韩免费| 首页欧美精品中文字幕| 国产99久久| 成人在线免费观看91| 国产精品三p一区二区| 免费在线观看成人| 久久国产中文字幕| 中文在线а√在线8| 国产精品一区二区精品| 亚洲伊人精品酒店| 亚洲免费婷婷| 在线综合欧美| 亚洲激情av| 欧美精品一区二区久久| 欧美日韩国产v| 91欧美在线| 国产精品啊v在线| 国产日韩欧美一区| 国产精品久久久久久久免费软件| 日韩精彩视频在线观看| 亚洲欧美网站在线观看| 中文无码日韩欧| 蜜桃视频一区二区| 99视频在线精品国自产拍免费观看| 久久久久国产精品一区二区| 日本久久综合|