开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 867|回复: 4
收起左侧

[Web相关] canvas 画一个六边形

[复制链接]
结帖率:72% (23/32)
发表于 2022-7-21 15:11:10 | 显示全部楼层 |阅读模式   浙江省宁波市
20精币
[JavaScript] 纯文本查看 复制代码
var context = canvas.getContext("2d");
       
        //六边形横向宽
        width = 209;
        //边框粗细
        borderWidth = 3;
        //六边形边长
        hexagonWidth = (width - borderWidth)/4;
        //设置canvas宽高
        canvas.width = width;
        canvas.height = width / 2 * Math.sqrt(3) + borderWidth;

        //绘制六边形,裁切
        context.beginPath();
        context.save();
        context.translate(canvas.width/2,canvas.height/2);
        context.strokeStyle = '#333333';
        context.lineWidth = borderWidth;
        context.lineTo(-1*hexagonWidth,Math.sqrt(3)*hexagonWidth);
        context.lineTo(1*hexagonWidth,Math.sqrt(3)*hexagonWidth);
        context.lineTo(2*hexagonWidth,0*hexagonWidth);
        context.lineTo(1*hexagonWidth,-1 * Math.sqrt(3)*hexagonWidth);
        context.lineTo(-1*hexagonWidth,-1 * Math.sqrt(3)*hexagonWidth);
        context.lineTo(-2*hexagonWidth,0*hexagonWidth);
        context.lineTo(-1*hexagonWidth,Math.sqrt(3)*hexagonWidth);
 
        context.stroke();
        context.restore();
        context.clip();
        context.closePath();

QQ图片20220721151022.png
Snipaste_2022-07-21_15-10-45.jpg
怎么旋转一下变成这样样子!


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:72% (23/32)

签到天数: 9 天

 楼主| 发表于 2022-7-21 15:45:43 | 显示全部楼层   浙江省宁波市
没有大佬吗
回复

使用道具 举报

结帖率:100% (9/9)
发表于 2022-7-21 21:22:26 | 显示全部楼层   澳门特别行政区*
[HTML] 纯文本查看 复制代码
<html>
        <head>
                <style>
                        html,body{
                                width:100%;
                                height:100%;
                                padding:0;
                                margin:0;
                        }
                        canvas{
                                position: absolute;
                                top:0;
                                left:0;
                                right:0;
                                bottom:0;
                                margin:auto;
                        }
                </style>
        </head>
        <body>
                <canvas></canvas>
        </body>
        <script type="text/javascript">
                var canvas = document.getElementsByTagName('canvas')[0];
                var context = canvas.getContext("2d");
                
                //六边形横向宽
                width = 209;
                //边框粗细
                borderWidth = 3;
                //六边形边长
                hexagonWidth = (width - borderWidth)/4;
                
                //设置canvas宽高
                canvas.width = width;
                canvas.height = width / 2 * Math.sqrt(3) + borderWidth;
                
                //图片缩放比例
                imgScale = 0.5;
                
                //绘制图片
                var img = new Image()
                img.src = './1.png'
                img.onload = function(){
                    context.drawImage(this, canvas.width/2 - img.width/2*imgScale , canvas.height/2 - img.height/2*imgScale , img.width*imgScale , img.height*imgScale)
                        
                        //如果图片绘制后覆盖边框,可再次调用一边绘制六边形代码
                }
                
                //绘制六边形,裁切
                context.beginPath();
                context.save(); 
                context.translate(canvas.width/2,canvas.height/2);
                context.strokeStyle = '#79b1f7'; 
                context.lineWidth = borderWidth; 
                context.lineTo(-1*hexagonWidth,Math.sqrt(3)*hexagonWidth);
                context.lineTo(1*hexagonWidth,Math.sqrt(3)*hexagonWidth);
                context.lineTo(2*hexagonWidth,0*hexagonWidth);
                context.lineTo(1*hexagonWidth,-1 * Math.sqrt(3)*hexagonWidth);
                context.lineTo(-1*hexagonWidth,-1 * Math.sqrt(3)*hexagonWidth);
                context.lineTo(-2*hexagonWidth,0*hexagonWidth);
                context.lineTo(-1*hexagonWidth,Math.sqrt(3)*hexagonWidth);
                context.stroke(); 
                context.restore();
                context.clip();
                context.closePath();
        </script>
</html>
回复

使用道具 举报

结帖率:72% (23/32)

签到天数: 9 天

 楼主| 发表于 2022-7-22 08:43:29 | 显示全部楼层   浙江省宁波市
承易 发表于 2022-7-21 21:22
[mw_shl_code=html,true]
       
               

你这不就是我网上找的那个,和我这个图形一样的啊
回复

使用道具 举报

结帖率:72% (23/32)

签到天数: 9 天

 楼主| 发表于 2022-7-22 11:05:17 | 显示全部楼层   浙江省宁波市
问题解决了,麻烦关闭一下帖子@精易客服
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表