JavaScript多種圖形實(shí)現(xiàn)代碼實(shí)例
1.小星星
設(shè)有如下的曲線參數(shù)方程:
N=5
x = r*sin(nθ)*cos(θ)
y = r*sin(nθ)*sin(θ) (0≤θ≤2π)
用循環(huán)依次取θ值為0~2π(每次增量為π/64),計(jì)算出X和Y,在canvas畫布中將坐標(biāo)點(diǎn)(X,Y)用線連起來,可繪制出一個(gè)一個(gè)5瓣花卉圖案。
編寫如下的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,400,300); context.strokeStyle="blue"; context.lineWidth=2; context.beginPath(); var r=120; // 下面可進(jìn)行修改的語句 (3) var n=5; // 下面可進(jìn)行修改的語句 (3) for (theta=0;theta<=2*Math.PI;theta+=Math.PI/64) { b=r*Math.sin(n*theta); // 下面可進(jìn)行修改的語句 (3) x=200+b*Math.cos(theta); y=150+b*Math.sin(theta); if (theta==0) context.moveTo(x,y); else context.lineTo(x,y); } context.stroke(); } </script> </head> <body onload="draw('myCanvas');"> <canvas id="myCanvas" width="400" height="300"></canvas> </body> </html>
將上述HTML代碼保存到一個(gè)html文本文件中,再在瀏覽器中打開包含這段HTML代碼的html文件,可以看到在瀏覽器窗口中繪制出如圖1所示的5瓣花卉圖案。
圖1 5瓣花卉圖案1
我們將上面程序中標(biāo)識(shí)的語句1“var r=120;”修改為“var r=50;”,適當(dāng)減小初始半徑,使得繪制的圖案不會(huì)超出畫布的范圍,在將標(biāo)識(shí)的語句3“b=r*Math.sin(n*theta);”修改為“b=r*(1+Math.sin(n*theta)/2);”,則在畫布中繪制出如圖2所示的5瓣花卉圖案。
圖2 5瓣花卉圖案2
這個(gè)圖案比圖1中的圖案的感覺是中間向外擴(kuò)展了,使得中心部位出現(xiàn)空白。再次修改語句3為“b=r*(2+Math.sin(n*theta)/2);”,以增大中間部分的空白,則在畫布中繪制出如圖3所示的圖案,像小星星嗎?
圖3 小星星圖案
上面程序中的n值也可修改,例如在上面繪制小星星圖案的程序中,將標(biāo)識(shí)語句2
“var n=5;”修改為“var n=6;”,則在畫布中繪制出如圖4所示的圖案。像六角雪花圖案嗎?
圖4 六角雪花圖案
我們這樣想一想,若將n的值修改為一個(gè)實(shí)數(shù)(有小數(shù)部分)會(huì)這樣呢?例如,將
“var n=5;”修改為“n=5.05;”,則在畫布中繪制出如圖5所示的圖案。
圖5 未封閉的小星星圖案線
2.環(huán)帶
由圖5知,θ值取0~2π時(shí),正好繪制一圈,由于n取非整數(shù)時(shí),曲線不封閉,因此,若取θ值為0~10π,繪制5圈,可得到一個(gè)環(huán)帶圖案。為讀者引用和下面講述方便,給出完整HTML文件內(nèi)容如下。
<!DOCTYPE html> <head> <title>環(huán)帶</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,400,300); context.strokeStyle="red"; context.lineWidth=2; context.beginPath(); var n=5.05; k=10; for (theta=0;theta<=k*Math.PI;theta+=Math.PI/120) { var r=110*(1+Math.cos(n*theta)/5); var x =200+ r*Math.cos(theta); var y =150+ r*Math.sin(theta); if (theta==0) context.moveTo(x,y); else context.lineTo(x,y); } context.stroke(); } </script> </head> <body onload="draw('myCanvas');"> <canvas id="myCanvas" width="400" height="300"></canvas> </body> </html>
在瀏覽器中打開包含這段HTML代碼的html文件,可以看到在畫布中繪制的五角環(huán)帶,如圖6所示。
圖6 五角環(huán)帶
將上面程序中的n值由“n=5.05”修改為“n=9.05”,則在畫布中繪制出如圖7所示的環(huán)帶。
圖7 九角環(huán)帶
若將上面程序中的n值修改為9.2,且將k值修改為12,則在畫布中繪制出如圖8所示的圓環(huán)帶。
圖8 n值為9.2時(shí)的圓環(huán)
若將上面程序中的n值修改為5.5,且將k值修改為12,則在畫布中繪制出如圖9所示的圓環(huán)。
圖9 n值為5.5時(shí)的圓環(huán)
在繪制圖9的程序中,再將語句“var r=110*(1+Math.cos(n*theta)/5);”修改為
“var r=90*(1+Math.cos(n*theta)/2);”則在畫布中繪制出如圖10所示的圖案。
圖10 n值為5.5時(shí)的另一環(huán)狀圖案
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
實(shí)例分析瀏覽器中“JavaScript解析器”的工作原理
本文主要對(duì)javascript解析器的工作原理進(jìn)行實(shí)例分析,具有很好的參考價(jià)值,下面就跟小編一起來看下吧2016-12-12js代碼實(shí)現(xiàn)點(diǎn)擊按鈕出現(xiàn)60秒倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了js代碼實(shí)現(xiàn)點(diǎn)擊按鈕出現(xiàn)60秒倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12JavaScript canvas實(shí)現(xiàn)鏡像圖片效果
這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)鏡像圖片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08JS基于對(duì)象的特性實(shí)現(xiàn)去除數(shù)組中重復(fù)項(xiàng)功能詳解
這篇文章主要介紹了JS基于對(duì)象的特性實(shí)現(xiàn)去除數(shù)組中重復(fù)項(xiàng)功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了js基于key值唯一性實(shí)現(xiàn)數(shù)組去重的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-11-11bootstrap table實(shí)現(xiàn)點(diǎn)擊翻頁功能 可記錄上下頁選中的行
這篇文章主要介紹了bootstrap table實(shí)現(xiàn)點(diǎn)擊翻頁功能,可記錄上下頁選中的行,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09使用JavaScript實(shí)現(xiàn)二值化圖像
這篇文章主要為大家詳細(xì)介紹了使用JavaScript將圖像轉(zhuǎn)換為黑白二值圖的兩種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01javascript設(shè)置頁面背景色及背景圖片的方法
這篇文章主要介紹了javascript設(shè)置頁面背景色及背景圖片的方法,涉及JavaScript動(dòng)態(tài)操作頁面元素屬性的相關(guān)技巧,需要的朋友可以參考下2015-12-12