JavaScript圖像放大鏡效果實(shí)現(xiàn)方法詳解
1. 基本四瓣花型圖案
根據(jù)四瓣花卉線的參數(shù)方程:
t= r*(1+sin(12*θ)/5)*(0.5+sin(4*θ)/2);
x=t*cos(θ));
y=t*sin(θ));
編寫如下的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, 320, 320); context.strokeStyle = "blue"; context.lineWidth = 1; var dig = Math.PI / 64; context.beginPath(); for (var i = 0; i <= 128; i++) { d = 120 * (1 + Math.sin(12 * i * dig) / 5); t = d * (0.5 + Math.sin(4 * i * dig) / 2); x = (160 + t * Math.cos(i * dig)); y = (160 + t * Math.sin(i * dig)); if (i == 0) context.moveTo(x, y); else context.lineTo(x, y); } context.stroke(); } </script> </head> <body onload="draw('myCanvas');"> <canvas id="myCanvas" width="320" height="320"></canvas> </body> </html>
在瀏覽器中打開包含這段HTML代碼的html文件,可以看到在畫布中繪制出如圖1所示的四瓣花卉線圖案。
圖1 四瓣花卉線圖案
2.平鋪的100朵四瓣花
用一個二重循環(huán)將圖1的四瓣花卉繪制10行10列共100朵。編寫的HTML文件內(nèi)容如下。
<!DOCTYPE html> <head> <title>平鋪的100朵四瓣花</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, 320, 320); context.strokeStyle = "blue"; context.lineWidth = 1; var dig = Math.PI / 64; context.beginPath(); for (px = 20; px < 320; px += 30) for (py = 20; py < 320; py += 30) { for (var i = 0; i <= 128; i++) { d = 20 * (1 + Math.sin(12 * i * dig) / 5); t = d * (0.5 + Math.sin(4 * i * dig) / 2); x = px + t * Math.cos(i * dig); y = py + t * Math.sin(i * dig); if (i == 0) context.moveTo(x, y); else context.lineTo(x, y); } context.stroke(); } } </script> </head> <body onload="draw('myCanvas');"> <canvas id="myCanvas" width="320" height="320"></canvas> </body> </html>
在瀏覽器中打開包含這段HTML代碼的html文件,可以看到在畫布中繪制出如圖2所示的平鋪的100朵四瓣花卉圖案。
圖2 平鋪的100朵四瓣花卉圖案
3.放大鏡看平鋪的四瓣花
將圖2圖形中位于中心點(diǎn)周圍100以內(nèi)的點(diǎn)的坐標(biāo)進(jìn)行球面鏡反射變換,可以實(shí)現(xiàn)放大鏡效果。編寫的HTML文件內(nèi)容如下。
<!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, 320, 320); context.strokeStyle = "blue"; context.lineWidth = 1; var dig = Math.PI / 64; context.beginPath(); var r = 140; var x0 = 160; var y0 = 160; for (px = 20; px < 320; px += 30) for (py = 20; py < 320; py += 30) { for (var i = 0; i <= 128; i++) { d = 20 * (1 + Math.sin(12 * i * dig) / 5); t = d * (0.5 + Math.sin(4 * i * dig) / 2); x = px + t * Math.cos(i * dig); y = py + t * Math.sin(i * dig); l = Math.sqrt((x - x0) * (x - x0) + (y - y0) * (y - y0)); if (l < r) { // 圓心為(160,160),半徑為140的圓內(nèi)各點(diǎn)進(jìn)行球面鏡反射變換 s = x - x0 < 0 ? -1 : 1; if (x - x0 == 0) x = x0 + 0.1; bt = 2 * Math.atan(l / r); th = Math.atan((y - y0) / (x - x0)); m = r * Math.sin(bt); x = s * m * Math.cos(th) + x0; y = s * m * Math.sin(th) + y0; } if (i == 0) context.moveTo(x, y); else context.lineTo(x, y); } context.stroke(); } } </script> </head> <body onload="draw('myCanvas');"> <canvas id="myCanvas" width="320" height="320"></canvas> </body> </html>
在瀏覽器中打開包含這段HTML代碼的html文件,可以看到在畫布中繪制出如圖3所示的圖形放大鏡效果1。
圖3 圖形放大鏡效果1
上面程序中語句var r=140;、var x0=160;和var y0=160;用于設(shè)置放大鏡的圓心坐標(biāo)和半徑。若修改r=100,x0=100,y0=100,則在畫布中繪制出如圖4所示的圖形放大鏡效果2。
圖4 圖形放大鏡效果2
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS上傳圖片前的限制包括(jpg jpg gif及大小高寬)等
文件上傳之前的檢測,通常是通過文件名來判斷文件類型是否合法,但是要想檢測文件的大小很難辦到,除非在本地或者使用控件。使用JS可以輕松解決詞問題,js在上傳圖片前判斷大小 這個可以用javascript實(shí)現(xiàn),效果2012-12-12JS獲取當(dāng)前時間的實(shí)例代碼(昨天、今天、明天)
這篇文章主要介紹了JS獲取當(dāng)前時間的實(shí)例代碼(昨天、今天、明天) ,需要的朋友可以參考下2018-11-11用console.table()調(diào)試javascript
昨天我了解到Chrome調(diào)試工具一個小巧的調(diào)試方法,在WDCC期間, Marcus Ross(@zahlenhelfer) 介紹了,chrome調(diào)試工具各種調(diào)試方法,這個只是其中一種,現(xiàn)在我來給大家秀下。2014-09-09本地存儲cookie、localStorage和sessionStorage示例詳解
cookie、localStorage?和?sessionStorage都是在客戶端存儲數(shù)據(jù)的方式,但它們之間有一些區(qū)別,下面這篇文章主要給大家介紹了關(guān)于JavaScript中cookie、localStorage和sessionStorage的相關(guān)資料,需要的朋友可以參考下2024-03-03