电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:67日期: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)檎叫危覞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)文章:
主站蜘蛛池模板: 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 山东成考网-山东成人高考网 | 分类168信息网 - 分类信息网 免费发布与查询 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 佛山市德信昌电子有限公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 泰安办公家具-泰安派格办公用品有限公司 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 硬度计,金相磨抛机_厂家-莱州华煜众信试验仪器有限公司 | 上海盐水喷雾试验机_两厢式冷热冲击试验箱-巨怡环试 | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 国产频谱分析仪-国产网络分析仪-上海坚融实业有限公司 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 防潮防水通风密闭门源头实力厂家 - 北京酷思帝克门窗 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 软文推广发布平台_新闻稿件自助发布_媒体邀约-澜媒宝 | 福建省教师资格证-福建教师资格证考试网 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 商秀—企业短视频代运营_抖音企业号托管| 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 | 贴片电容-贴片电阻-二三极管-国巨|三星|风华贴片电容代理商-深圳伟哲电子 | 天命文免费算命堂_自助算命_自由算命系统_长文周易 | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 剪刃_纵剪机刀片_分条机刀片-南京雷德机械有限公司 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 |