我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript Canvas绘制六边形网格

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript Canvas绘制六边形网格

本文实例为大家分享了JavaScript Canvas绘制六边形网格的具体代码,供大家参考,具体内容如下

使用Canvas绘制六边形网格。

主要思路是先画给定中心点的六边形,然后二重循环遍历所有中心点,画所有的六边形。

<!DOCTYPE HTML>
<html>
<body>

<canvas id="myCanvas" width="300" height="150">
    <p>你的浏览器不支持Canvas</p>
</canvas>
<br>
<p id='p1'></p>
<script type="text/javascript">
"use strict";
var canvas=document.getElementById('myCanvas');
if (canvas.getContext) {
    var k=3;
    var d=30;
    var w=Math.sqrt(3)*d;
    var h=3/2*d;
    canvas.width=2*k*w;
    canvas.height=2*k*h+h/2;
    var o=[canvas.width/2,canvas.height/2];
    document.getElementById('p1').innerHTML='画布宽'+canvas.width+',高'+canvas.height;
    var ctx=canvas.getContext('2d');
    ctx.fillStyle='AntiqueWhite';
    ctx.fillRect(0,0,canvas.width,canvas.height);
    ctx.strokeStyle='blue';
    ctx.beginPath();
    var vs=[[0,d],[-w/2,d/2],[-w/2,-d/2],
            [0,-d],[w/2,-d/2],[w/2,d/2]];
    function one(xo,yo){
        ctx.moveTo(xo+vs[5][0],yo+vs[5][1]);
        for(var i=0;i<vs.length;i++){
            ctx.lineTo(xo+vs[i][0],yo+vs[i][1]);
        }
    }
    for(var i=-k+1;i<k;i++){
        for(var j=0;j<2*k-1-Math.abs(i);j++){
            one(o[0]+(-k+1+Math.abs(i)/2+j)*w,o[1]+h*i);
        }
    }
    ctx.stroke();
}
else{
    console.log('你的浏览器不支持Canvas');
}
</script>

</body>
</html>

效果如下:

更新:增加了一些选项,边长和颜色可以设置。网页的图标也用六边形画出。

<!DOCTYPE HTML>
<html>
<head>
<title>六边形网格</title>
<link id="link" rel="shortcut icon" type="image/x-icon">
<style>
#bc1,#bc2{width:25px;}
#bj,#xt,#tc{width:20px;}
</style>
</head>
<body>
<p>设置大六边形边长: <input id='bc1' value="3" onchange="generate()"> 小六边形<br>
设置小六边形边长: <input id='bc2' value="24" onchange="generate()"> 像素(px)<br>
设置背景色 <input type="color" id="bj" value="#c8ffff" onchange="generate()"/>
设置线条色 <input type="color" id="xt" value="#0000ff" onchange="generate()"/>
设置填充色 <input type="color" id="tc" value="#faebd7" onchange="generate()"/></p>
<p id='p1'></p>
<canvas id="myCanvas" width="300" height="150">
<p>你的浏览器不支持Canvas</p>
</canvas>
<script type="text/javascript">
"use strict";
document.getElementById('bc1').value=2;
generate();
link.href=myCanvas.toDataURL({format:'image/png', quality:1});
document.getElementById('bc1').value=3;
generate();
function generate(){
    var bc1=document.getElementById('bc1').value;
    var bc2=document.getElementById('bc2').value;
    var k=Number(bc1);
    var d=Number(bc2);
    var bj=document.getElementById('bj').value;
    var xt=document.getElementById('xt').value;
    var tc=document.getElementById('tc').value;
    var canvas=document.getElementById('myCanvas');
    if(bc1>200){
        var c=confirm('六边形个数过多时网页会卡,是否继续?');
        if(!c){
            return;
        }
    }
    if(canvas.getContext) {
        var w=Math.sqrt(3)*d;
        var h=3/2*d;
        var count=3*k*k-3*k+1;
        canvas.width=2*k*w;
        canvas.height=2*k*h+h/2;
        var o=[canvas.width/2,canvas.height/2];
        document.getElementById('p1').innerHTML='画布宽'+canvas.width+'px,高'+canvas.height+'px,含有'+count+'个小六边形';
        var ctx=canvas.getContext('2d');
        ctx.fillStyle=bj;
        ctx.fillRect(0,0,canvas.width,canvas.height);
        ctx.beginPath();
        var vs=[[0,d],[-w/2,d/2],[-w/2,-d/2],[0,-d],[w/2,-d/2],[w/2,d/2]];
        function one(xo,yo){
            ctx.beginPath();
            ctx.moveTo(xo+vs[5][0],yo+vs[5][1]);
            for(var i=0;i<vs.length;i++){
                ctx.lineTo(xo+vs[i][0],yo+vs[i][1]);
            }
            ctx.strokeStyle=xt;
            ctx.lineWidth=2;
            ctx.stroke();
            ctx.fillStyle=tc;
            ctx.fill();
        }
        for(var i=-k+1;i<k;i++){
            for(var j=0;j<2*k-1-Math.abs(i);j++){
                one(o[0]+(-k+1+Math.abs(i)/2+j)*w,o[1]+h*i);
            }
        }
    }
    else{
        console.log('你的浏览器不支持Canvas');
    }
}
</script>
</body>
</html>

效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript Canvas绘制六边形网格

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何用JavaScript Canvas绘制六边形网格

这篇“如何用JavaScript Canvas绘制六边形网格”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用JavaSc
2023-06-26

CSS3如何绘制六边形

小编给大家分享一下CSS3如何绘制六边形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!因为很简单,所以先总结一下:使用CSS3绘制六边形主要使用伪类:before
2023-06-08

使用Canvas如何绘制一个多边形

使用Canvas如何绘制一个多边形?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。function drawPolygonPath(sideNum, radius
2023-06-09

利用canvas怎么绘制一个多边形

利用canvas怎么绘制一个多边形?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 初始化js代码 //初始化 (function(){ var canvas =
2023-06-09

web前端:浅谈使用canvas绘制多边形

编程学习网:CanvasAPI(画布)是在HTML5中新增的标签用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用Javascript操作的位图(bitmap)。
web前端:浅谈使用canvas绘制多边形
2024-04-23

canvas里面怎么基于随机点绘制一个多边形

这篇文章主要介绍canvas里面怎么基于随机点绘制一个多边形,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!起因今天在学习《HTML5+Javascript动画基础》这本书的时候,在第八章的第三节讲到如何用三个弹簧连接
2023-06-09

怎么使用CSS实现酷炫六边形网格背景图

本文小编为大家详细介绍“怎么使用CSS实现酷炫六边形网格背景图”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用CSS实现酷炫六边形网格背景图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。如何绘制六边形?首
2023-07-04

Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)

本文实例讲述了Android编程之canvas绘制各种图形的方法。分享给大家供大家参考,具体如下: 1、首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls
2022-06-06

手把手教你使用CSS实现酷炫六边形网格背景图

本篇文章给大家分享不规则图形背景排版高阶技巧,介绍一下如何使用CSS实现酷炫六边形网格背景图,希望对大家有所帮助!
2023-05-14

unity如何通过Mesh网格绘制图形球体

小编给大家分享一下unity如何通过Mesh网格绘制图形球体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!球体public class 球体 : MonoBeha
2023-06-25

怎么使用js+canvas实现可自动吸附闭合的鼠标绘制多边形

这篇文章主要介绍“怎么使用js+canvas实现可自动吸附闭合的鼠标绘制多边形”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用js+canvas实现可自动吸附闭合的鼠标绘制多边形”文章能帮助大
2023-07-02

编程热搜

目录