我們知道在直角坐標系中,圓的方程可描述為:
X=R*COS(α)
Y=R*SIN(α)
用回圈依次取α值為0~2π,計算出X和Y,在canvas畫布中將坐標點(X,Y)用線連起來,可繪制出一個圓,撰寫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="red";
context.lineWidth=2;
var dig=Math.PI/180;
context.beginPath();
var r=100;
for (var i=0;i<=360;i++)
{
x=200+r*Math.cos(i*dig);
y=150+r*Math.sin(i*dig);
if (i==0)
{
context.moveTo(x,y);
bx=x; by=y;
}
else
context.lineTo(x,y);
}
context.lineTo(bx,by);
context.closePath();
context.stroke();
}
</script>
</head>
<body onl oad="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300">您的瀏覽器不支持canvas!
</canvas>
</body>
</html>
將上述HTML代碼保存到一個html文本檔案中,再在瀏覽器中打開包含這段HTML代碼的html檔案,可以看到在瀏覽器視窗中繪制出如圖1所示的圓,
圖1 圓的繪制
1.圓和正弦波合成的花卉圖
先在HTML頁面中設定一個畫布,
<canvas id="myCanvas" width="400" height="300">
</canvas>
再在定義的這塊400*300的canvas(畫布)上面用回圈(0~2π)繪制圓和正弦波合成的花卉圖,
繪制圖案的基本思想是:將圓的方程與一個正弦波進行迭加,即設立坐標計算公式為:
X=R*COS(α)*(0.5+SIN(6α)/2)
Y=R*SIN(α) *(0.5+SIN(6α)/2)
再用回圈依次取α值為0~2π,計算出X和Y,在canvas畫布中將坐標點(X,Y)用線連起來,可繪制出一個封閉曲線圖形,然后將該圖形填充顏色,可得到一個花卉圖案,
可撰寫如下的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.fillStyle="red";
context.strokeStyle="white";
context.lineWidth=2;
var dig=Math.PI/180;
context.beginPath();
var r=100;
for (var i=0;i<=360;i++)
{
c=r*(1/2.0+Math.sin(6*i*dig)/2);
x=200+c*Math.cos(i*dig);
y=150+c*Math.sin(i*dig);
if (i==0)
{
context.moveTo(x,y);
bx=x; by=y;
}
else
context.lineTo(x,y);
}
context.lineTo(bx,by);
context.closePath();
context.stroke();
context.fill();
}
</script>
</head>
<body onl oad="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300">您的瀏覽器不支持canvas!
</canvas>
</body>
</html>
將上述HTML代碼保存到一個html文本檔案中,再在瀏覽器中打開包含這段HTML代碼的html檔案,可以看到在瀏覽器視窗中繪制出如圖2所示的圓和正弦波合成的花卉圖,
圖2 圓和正弦波合成的花卉圖
2.可設定合成方式的圓和正弦波合成花卉圖
在上面的代碼中,陳述句“c=r*(1/2.0+Math.sin(6*i*dig)/2);”中的6表示繪制的花卉圖案的花瓣數目,0.5(1/2)表示將圓和正弦波合成時,圓所占的比例,如果修改這兩個值,將繪制出不同的花卉圖案,
我們可以在瀏覽器視窗中定義一個表單,通過表單可以設定花瓣數目,還可以設定圓和正弦波合成時的比例,這樣輸入相應引數值后,再單擊“確定”按鈕繪制合成花卉圖案,
撰寫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,500,300);
context.fillStyle="red";
context.strokeStyle="white";
context.lineWidth=2;
var dig=Math.PI/180;
context.beginPath();
var r=100;
var n=eval(document.myForm.petalNum.value);
var a=eval(document.myForm.circle.value);
var b=eval(document.myForm.sineWave.value);
var prop=a/(a+b);
for (var i=0;i<=360;i++)
{
c=r*(prop+(1-prop)*Math.sin(n*i*dig));
x=250+c*Math.cos(i*dig);
y=150+c*Math.sin(i*dig);
if (i==0)
{
context.moveTo(x,y);
bx=x; by=y;
}
else
context.lineTo(x,y);
}
context.lineTo(bx,by);
context.closePath();
context.stroke();
context.fill();
}
</script>
</head>
<body>
<form name="myForm">
花瓣數<input type=number name="petalNum" value=https://www.cnblogs.com/cs-whut/p/6 size=2>
合成比例  圓:正弦波=<input type=number name="circle" value=https://www.cnblogs.com/cs-whut/p/1 size=2>:
<input type=button value="https://www.cnblogs.com/cs-whut/p/確定" onClick="draw('myCanvas');">
</form><br>
<canvas id="myCanvas" width="500" height="300">您的瀏覽器不支持canvas!
</canvas>
</body>
</html>
在瀏覽器中打開包含這段HTML代碼的html檔案,在表單的“花瓣數”數字框中輸入“20”,“合成比例”對應的兩個數字框中輸入“1”和“1”,單擊“確定”按鈕,可以看到在瀏覽器視窗中繪制出如圖3所示的20瓣花卉圖案,若在表單的“花瓣數”數字框中輸入“8”,“合成比例”對應的兩個數字框中輸入“2”和“10”,單擊“確定”按鈕,可以看到在瀏覽器視窗中繪制出如圖4所示的8瓣花卉圖案,
圖3 20瓣花卉圖案

圖4 8瓣花卉圖案
3.圓和三次諧波合成的花卉圖
前面是將圓的方程與一個正弦波進行迭加,若將一個圓與一個三次諧波合成,可設立坐標計算公式為:
X=R*(1+SIN(3*6α)/5)*(0.5+SIN(6α)/2)*COS(α)
Y=R*(1+SIN(3*6α)/5)*(0.5+SIN(6α)/2)*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,400,300);
context.fillStyle="red";
context.strokeStyle="white";
context.lineWidth=2;
var dig=Math.PI/180;
context.beginPath();
var r=100;
for (var i=0;i<=360;i++)
{
b=r+r/5*Math.sin(3*6*i*dig);
c=b*(1/2.0+Math.sin(6*i*dig)/2);
x=200+c*Math.cos(i*dig);
y=150+c*Math.sin(i*dig);
if (i==0)
{
context.moveTo(x,y);
bx=x; by=y;
}
else
context.lineTo(x,y);
}
context.lineTo(bx,by);
context.closePath();
context.stroke();
context.fill();
}
</script>
</head>
<body onl oad="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300">您的瀏覽器不支持canvas!
</canvas>
</body>
</html>
在瀏覽器中打開包含這段HTML代碼的html檔案,可以看到在瀏覽器視窗中繪制出如圖5所示的圓和三次諧波合成的花卉圖,
圖5 圓和三次諧波合成的花卉圖
若將合成計算式中的(1+SIN(3*6α)/5)改寫為(1+SIN(5*6α)/5),也就是將陳述句“b=r+r/5*Math.sin(3*6*i*dig);”改寫為“b=r+r/5*Math.sin(5*6*i*dig);”,再在瀏覽器中打開修改后的html檔案,可以看到在瀏覽器視窗中繪制出如圖6所示的圓和五次諧波合成的花卉圖,

圖6 圓和五次諧波合成的花卉圖
4.圓和三次諧波合成的不同花瓣數的花卉圖
在與三次諧波進行合成時,同樣可以設定花卉的花瓣數目,可以撰寫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,300,300);
context.fillStyle="red";
context.strokeStyle="white";
context.lineWidth=2;
var dig=Math.PI/180;
context.beginPath();
var r=50;
for (var n=2;n<=10;n++)
{
var offsetx=(n-2)%3*100+50;
var offsety=((n-1)%3!=0?Math.floor((n-1)/3):(n-1)/3-1)*100+50;
for (var i=0;i<=360;i++)
{
b=r+r/5*Math.sin(3*n*i*dig);
c=b*(1/2.0+Math.sin(n*i*dig)/2);
x=offsetx+c*Math.cos(i*dig);
y=offsety+c*Math.sin(i*dig);
if (i==0)
{
context.moveTo(x,y);
bx=x; by=y;
}
else
context.lineTo(x,y);
}
}
context.lineTo(bx,by);
context.closePath();
context.stroke();
context.fill();
}
</script>
</head>
<body onl oad="draw('myCanvas');">
<canvas id="myCanvas" width="300" height="300">您的瀏覽器不支持canvas!
</canvas>
</body>
</html>
在瀏覽器中打開包含這段HTML代碼的html檔案,可以看到在瀏覽器視窗中繪制出如圖7所示的圓和三次諧波合成不同花瓣數的花卉圖,圖中花卉的花瓣數分別為2~9,
圖7 圓和三次諧波合成不同花瓣數的花卉圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17755.html
標籤:其他
上一篇:Opencv中常見的濾波方法
