lc001-JS_canvas递归绘制三角形

JS入门练习_001

效果如图:
效果图
代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>三角形</title>
	</head>
	<style type="text/css">
		canvas{
			/* 画板居中 */
			position: absolute;
			top: 50%;
			left: 50%;
			transform: translate(-50%,-50%);
			/* 背景改为绿色 */
			background-color: darkgreen;
		}
		canvas:hover{
			cursor: pointer;
		}		
	</style>
	<script type="text/javascript">
		window.οnlοad=function(){
			var cvs=document.getElementsByTagName("canvas")[0];
			if(cvs.getContext){
				var g=cvs.getContext("2d");
				
				function draw(x1,y1,x2,y2,x3,y3){  //绘制三角
					var tmp=g.strokeStyle;
					//生成随机的绘制颜色
					g.strokeStyle="#"+Math.floor((Math.random()*256)).toString(16)
									 +Math.floor((Math.random()*256)).toString(16)
									 +Math.floor((Math.random()*256)).toString(16);
					//绘制三角形
					g.beginPath();
					g.moveTo(x1,y1);
					g.lineTo(x2,y2);
					g.lineTo(x3,y3);
					g.closePath();
					g.stroke();
					//样式 还原
					g.strokeStyle=tmp;
				};
				
				function func1(x1,y1,x2,y2,x3,y3,d){
					//计算个边中点
					var x12=(x1+x2)/2;
					var x13=(x1+x3)/2;
					var x32=(x3+x2)/2;
					var y12=(y1+y2)/2;
					var y13=(y1+y3)/2;
					var y32=(y3+y2)/2;
					
					draw(x1,y1,x12,y12,x13,y13);		//绘制 左下三角形
					draw(x12,y12,x2,y2,x32,y32);		//绘制 顶部三角形
					draw(x13,y13,x32,y32,x3,y3);		//绘制 右下三角形
					
					if(--d>0){							//递归终止条件
						func1(x1,y1,x12,y12,x13,y13,d);
						func1(x12,y12,x2,y2,x32,y32,d);
						func1(x13,y13,x32,y32,x3,y3,d);
						func1(x13,y13,x12,y12,x32,y32,d);
					}
				}
				window.setInterval(func1,500,0,100*(3**(1/2)),100,0,200,(3**(1/2))*100,3);  //每隔500ms重绘一次,使颜色不停地变换。
			}
		}
	</script>
	<body>
		<canvas width="1200px" height="800px"></canvas>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值