外星人爸爸 發表於 2019-12-21 07:47:00

JavaScript图形实例:五角星

<h3>1.五角星</h3>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 在半径为80的圆周上取5个点,用这5个点依次首尾连接画5条线,可以绘制出一个五角星图案。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 编写如下的HTML代码。</p>
<p style="margin-left: 30px">&lt;!DOCTYPE html&gt;</p>
<p style="margin-left: 30px">&lt;head&gt;</p>
<p style="margin-left: 30px">&lt;title&gt;五角星(一)&lt;/title&gt;</p>
<p style="margin-left: 30px">&lt;script type="text/javascript"&gt;</p>
<p style="margin-left: 30px">&nbsp; function draw(id)</p>
<p style="margin-left: 30px">&nbsp; {</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var canvas=document.getElementById(id);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; if (canvas==null)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var context=canvas.getContext('2d');</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillStyle="#EEEEDD";</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillRect(0,0,400,300);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.translate(100,150);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.strokeStyle = 'red';&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; draw5Star(context);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.stroke();&nbsp;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.translate(200,0);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillStyle = 'red';&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; draw5Star(context);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fill();&nbsp;&nbsp;</p>
<p style="margin-left: 30px">&nbsp; }</p>
<p style="margin-left: 30px">&nbsp; function draw5Star(context)</p>
<p style="margin-left: 30px">&nbsp; {&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var dx = 0;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var dy = 0;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var radius = 80;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.beginPath();&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var x = radius*Math.sin(Math.PI / 5)+dx;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var y = radius*Math.cos(Math.PI / 5)+dy;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.moveTo(x,y);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var dig = Math.PI / 5 * 4;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt; 5; i++)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x = radius*Math.sin(i * dig+Math.PI / 5);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var y = radius*Math.cos(i * dig+Math.PI / 5);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.lineTo(dx+x,dy+y);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.closePath();&nbsp;</p>
<p style="margin-left: 30px">&nbsp; }</p>
<p style="margin-left: 30px">&lt;/script&gt;</p>
<p style="margin-left: 30px">&lt;/head&gt;</p>
<p style="margin-left: 30px">&lt;body onload="draw('myCanvas');"&gt;</p>
<p style="margin-left: 30px">&lt;canvas id="myCanvas" width="400" height="300"&gt;您的浏览器不支持canvas!</p>
<p style="margin-left: 30px">&lt;/canvas&gt;</p>
<p style="margin-left: 30px">&lt;/body&gt;</p>
<p style="margin-left: 30px">&lt;/html&gt;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出五角星图案1,如图1所示。</p>
<p align="center"><img src="https://img2018.cnblogs.com/common/1485495/201912/1485495-20191221074459577-1203376143.png">&nbsp;</p>
<p align="center">图1&nbsp; 五角星图案1</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;也可以通过绘制10条线的方式来完成五角星的绘制。编写的HTML文件的内容如下。</p>
<p style="margin-left: 30px">&lt;!DOCTYPE html&gt;</p>
<p style="margin-left: 30px">&lt;head&gt;</p>
<p style="margin-left: 30px">&lt;title&gt;五角星(二)&lt;/title&gt;</p>
<p style="margin-left: 30px">&lt;script type="text/javascript"&gt;</p>
<p style="margin-left: 30px">&nbsp; function draw(id)</p>
<p style="margin-left: 30px">&nbsp; {</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var canvas=document.getElementById(id);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; if (canvas==null)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var context=canvas.getContext('2d');</p>
<p style="margin-left: 30px">&nbsp; &nbsp;&nbsp;&nbsp;context.fillStyle="#EEEEDD";</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillRect(0,0,400,300);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.translate(100,150);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.strokeStyle = 'red';&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; draw5Star(context);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.stroke();&nbsp;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.translate(150,150);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillStyle = 'red';&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; draw5Star(context);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fill();&nbsp;&nbsp;</p>
<p style="margin-left: 30px">&nbsp; }</p>
<p style="margin-left: 30px">&nbsp; function draw5Star(context)</p>
<p style="margin-left: 30px">&nbsp; {&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var r = 80;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.beginPath()</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.moveTo(r,0);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; for (var i=0;i&lt;9;i++)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.rotate(Math.PI/5);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i%2 == 0)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.lineTo((r/2),0);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.lineTo(r,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.closePath();</p>
<p style="margin-left: 30px">&nbsp; }</p>
<p style="margin-left: 30px">&lt;/script&gt;</p>
<p style="margin-left: 30px">&lt;/head&gt;</p>
<p style="margin-left: 30px">&lt;body onload="draw('myCanvas');"&gt;</p>
<p style="margin-left: 30px">&lt;canvas id="myCanvas" width="400" height="300"&gt;您的浏览器不支持canvas!</p>
<p style="margin-left: 30px">&lt;/canvas&gt;</p>
<p style="margin-left: 30px">&lt;/body&gt;</p>
<p style="margin-left: 30px">&lt;/html&gt;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出五角星图案2,如图2所示。</p>
<p align="center">&nbsp;<img src="https://img2018.cnblogs.com/common/1485495/201912/1485495-20191221074544042-1219581852.png"></p>
<p align="center">图2&nbsp; 五角星图案2&nbsp;</p>
<h3>2.螺旋五角星</h3>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 将前面的五角星经过适当缩放和旋转处理,可以绘制出螺旋五角星图案。编写的HTML代码如下。</p>
<p style="margin-left: 30px">&lt;!DOCTYPE html&gt;</p>
<p style="margin-left: 30px">&lt;head&gt;</p>
<p style="margin-left: 30px">&lt;title&gt;螺旋五角星&lt;/title&gt;</p>
<p style="margin-left: 30px">&lt;script type="text/javascript"&gt;</p>
<p style="margin-left: 30px">&nbsp; function draw(id)</p>
<p style="margin-left: 30px">&nbsp; {</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var canvas=document.getElementById(id);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; if (canvas==null)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var context=canvas.getContext('2d');</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillStyle="#EEEEDD";</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillRect(0,0,350,300);</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.translate(180,30);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.fillStyle = 'rgba(255,0,255,0.25)';&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; for(var i = 0;i &lt; 50;i++)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.translate(25,25);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.scale(0.95,0.95);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.rotate(Math.PI / 10);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; draw5Star(context);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.fill();&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</p>
<p style="margin-left: 30px">&nbsp; }</p>
<p style="margin-left: 30px">&nbsp; function draw5Star(context)</p>
<p style="margin-left: 30px">&nbsp; {&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var dx = 100;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var dy = 0;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var radius = 50;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.beginPath();&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var x = radius*Math.sin(Math.PI / 5)+dx;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var y = radius*Math.cos(Math.PI / 5)+dy;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.moveTo(x,y);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; var dig = Math.PI / 5 * 4;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; for(var i = 1; i &lt; 5; i++)</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x = radius*Math.sin(i * dig+Math.PI / 5);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var y = radius*Math.cos(i * dig+Math.PI / 5);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.lineTo(dx+x,dy+y);&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;&nbsp;&nbsp; context.closePath();&nbsp;</p>
<p style="margin-left: 30px">&nbsp; }</p>
<p style="margin-left: 30px">&lt;/script&gt;</p>
<p style="margin-left: 30px">&lt;/head&gt;</p>
<p style="margin-left: 30px">&lt;body onload="draw('myCanvas');"&gt;</p>
<p style="margin-left: 30px">&lt;canvas id="myCanvas" width="350" height="300"&gt;您的浏览器不支持canvas!</p>
<p style="margin-left: 30px">&lt;/canvas&gt;</p>
<p style="margin-left: 30px">&lt;/body&gt;</p>
<p style="margin-left: 30px">&lt;/html&gt;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出螺旋五角星图案,如图3所示。</p>
<p align="center"><img src="https://img2018.cnblogs.com/common/1485495/201912/1485495-20191221074618439-86037809.png">&nbsp;</p>
<p align="center">图3&nbsp; 螺旋五角星</p><br><br>
来源:https://www.cnblogs.com/cs-whut/p/12075774.html
頁: [1]
查看完整版本: JavaScript图形实例:五角星