使用html5 canvas 随机生成无向图
2016-10-18 23:21
351 查看
<!DOCTYPE HTML> <html> <body> <script> function random_int(min, max){ var ret = Math.round(Math.random() * (max - min + 1)) + min - 1; return ret < min ? min : ret; } </script> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"> Your browser does not support the canvas element. </canvas> <script type="text/javascript"> function draw_circle(context, x, y, r) { cxt.beginPath(); cxt.arc(x, y, r, 0, Math.PI * 2, true); cxt.closePath(); cxt.fill(); } function draw_line(context, begin_x, begin_y, end_x, end_y) { cxt.beginPath(); cxt.moveTo(begin_x, begin_y); cxt.lineTo(end_x, end_y); cxt.closePath(); cxt.stroke(); } function mycos(angle) { return Math.cos(angle * Math.PI / 180); } function mysin(angle) { return Math.sin(angle * Math.PI / 180); } function get_p(md_x, md_y, len, pos, xy) { switch (pos) { case 'up': return xy == 'x' ? md_x : md_y - len; case 'up_left': return xy == 'x' ? md_x - mycos(18) * len : md_y - mysin(18) * len; case 'up_right': return xy == 'x' ? md_x + mycos(18) * len : md_y - mysin(18) * len; case 'down_left': return xy == 'x' ? md_x - mycos(54) * len : md_y + mysin(54) * len; case 'down_right': return xy == 'x' ? md_x + mycos(54) * len : md_y + mysin(54) * len; } } var c=document.getElementById("myCanvas"); var cxt=c.getContext("2d"); cxt.fillStyle="#000088"; var md_x = 100; var md_y = 50; var len = 45; draw_circle(cxt, md_x, md_y, 3); var x1 = get_p(md_x, md_y, len, 'up', 'x'); var y1 = get_p(md_x, md_y, len, 'up', 'y'); var x2 = get_p(md_x, md_y, len, 'up_left', 'x'); var y2 = get_p(md_x, md_y, len, 'up_left', 'y'); var x3 = get_p(md_x, md_y, len, 'up_right', 'x'); var y3 = get_p(md_x, md_y, len, 'up_right', 'y'); var x4 = get_p(md_x, md_y, len, 'down_left', 'x'); var y4 = get_p(md_x, md_y, len, 'down_left', 'y'); var x5 = get_p(md_x, md_y, len, 'down_right', 'x'); var y5 = get_p(md_x, md_y, len, 'down_right', 'y'); draw_circle(cxt, x1, y1, 3); draw_circle(cxt, x2, y2, 3); draw_circle(cxt, x3, y3, 3); draw_circle(cxt, x4, y4, 3); draw_circle(cxt, x5, y5, 3); var points = [ {x: md_x, y: md_y}, {x: x1, y: y1}, {x: x2, y: y2}, {x: x3, y: y3}, {x: x4, y: y4}, {x: x5, y: y5} ]; for (var i = 0; i != 10; ++i) { var index1 = random_int(0, 5); var index2 = random_int(0, 5); draw_line(cxt, points[index1].x, points[index1].y, points[index2].x, points[index2].y); } </script> </body> </html>
为了测试路由算法,也就是最短路径,用html5写了个随机生成无向图的程序。
为了看起来不错综复杂,无向图只有6个点,形状是正五边形,中间一个点加外面五个点。
直接在w3school上的例子改的,先封装了画圆的函数draw_circle;
然后写了get_p函数,根据中间点计算外面5个点的坐标;
再然后封装了画线的函数draw_line.
接下来是random_int函数,再用json把点的坐标存入points, 然后调用.
运行效果https://jsfiddle.net/otu6bgyu/
相关文章推荐
- 使用HTML5画布(canvas)生成阴影效果
- 使用HTML5画布(canvas)生成阴影效果
- 使用HTML5画布(canvas)生成阴影效果
- 使用HTML5画布(canvas)生成阴影效果
- 使用 HTML5 canvas 进行 Web 绘图
- HTML5 canvas使用入门——参考资料
- HTML5中的Canvas标签使用收录
- HTML5 Canvas标签使用收录
- 使用PHP批量生成随机用户名
- 使用HTML5的canvas做一个会动的时钟
- html5教程 (四)(canvas使用图像)
- 使用 MSP430 内部时钟生成随机数字:“生成真随机数字入门指南”
- 使用HTML5的canvas做一个会动的时钟
- 使用html5 canvas操作图像像素
- js基于html5中canvas的字模提取工具(附js生成声音的方式、获取系统支持字体方式、字模显示及其他)
- 使用Kaptcha生成随机码
- 【Java每日一题01】使用java.lang.Math类,生成100个0到99之间的随机整数,找出它们之中的最大者和最小者,并统计大于50的整数个数
- 使用PHP批量生成随机用户名
- 使用PHP批量生成随机用户名
- 使用HTML5 Canvas实现的玫瑰线