网站首页 > 知识剖析 正文
你喜欢下雪吗? 你心中的雪花是什么形状的呢?
如上图,美丽的雪花也是一种分形图。
下面我们就用代码来实现一种六边形雪花分形图,同样是用javascript。
【先看效果图】
【上代码】
<script type="text/javascript">
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
var depth = 0; //初始深度为0
var sqrt3 = Math.sqrt(3); //开方3 * L为直角边长度
//画一个六边形
function drawHexagon(x,y,L)
{
//依次画出六边形的六条边
ctx.beginPath();
ctx.moveTo(x-sqrt3/2*L,y-L/2);
ctx.lineTo(x-sqrt3/2*L,y+L/2);
ctx.lineTo(x,y+L);
ctx.lineTo(x+sqrt3/2*L,y+L/2);
ctx.lineTo(x+sqrt3/2*L,y-L/2);
ctx.lineTo(x,y-L);
ctx.closePath();
//填充为白色
ctx.fillStyle = "#FFFFFF";
ctx.fill();
}
//画六边形雪花
function drawHexaflake(n,x,y,L)
{
//深度>0,则以L/3长度递归画7个子六边形
if(n > 0)
{
drawHexaflake(n-1,x,y-2*L/3,L/3);
drawHexaflake(n-1,x,y,L/3);
drawHexaflake(n-1,x,y+2*L/3,L/3);
drawHexaflake(n-1,x-sqrt3/3*L,y+L/3,L/3);
drawHexaflake(n-1,x-sqrt3/3*L,y-L/3,L/3);
drawHexaflake(n-1,x+sqrt3/3*L,y+L/3,L/3);
drawHexaflake(n-1,x+sqrt3/3*L,y-L/3,L/3);
}else { //n = 0, 则画一个六边形
drawHexagon(x,y,L);
}
}
function go()
{
//每次填充为黑色
ctx.fillStyle = "#000000";
ctx.fillRect(0,0,500,500);
drawHexaflake(depth,250,250,200);
//深度为4时结束
if (depth < 4)
{
depth++;
}
}
//每隔两秒执行,每次让深度depth+1
window.setInterval('go()',2000);
</script>
<body>
<canvas id="myCanvas" width="500" height="500" style="border:3px double #996633;"></canvas>
</body>
【要点分析】
- 每隔两秒的每次执行都是完成一幅图(depth从n到0);
- depth>0时递归绘制,结束条件是depth=0;
- 六边形的长度计算,定位,依次画出;
- 六边形分形以每边的1/3绘制,外围六个六边形的最里边构成一个六边形,所以要绘制7个小六边形。
- 上一篇: HTML5学习笔记-绘制变形图形之组合效果
- 下一篇: Javascript图形(一):阿基米德螺线
猜你喜欢
- 2025-01-05 如何实现使用鼠标绘制直线?
- 2025-01-05 leaferjs,全新的 Canvas 渲染引擎
- 2025-01-05 「从头到脚」WebRTC + Canvas 实现一个双人协作的共享画板
- 2025-01-05 一文解读前端实现电子签名
- 2025-01-05 Javascript图形(一):阿基米德螺线
- 2025-01-05 HTML5学习笔记-绘制变形图形之组合效果
- 2025-01-05 游戏开发之旅-JavaScript绘制图形
- 2025-01-05 用三角函数sin和cos画模拟雷达示意图的html代码解析
- 2025-01-05 如何用2 KB代码实现3D赛车游戏?2kPlus Jam大赛了解一下
- 2025-01-05 贝塞尔曲线是什么?如何用 Canvas 绘制三阶贝塞尔曲线?
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)