鱼C论坛

 找回密码
 立即注册
查看: 2316|回复: 1

[技术交流] canvas 画多边形

[复制链接]
发表于 2020-1-13 19:54:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么能画出来 看不懂
<!DOCTYPE html>
<html>
<head>
        <title>正六边形</title>
        <meta charset="utf-8">
</head>
<body>
        <canvas id="canvas" width="400" height="400"></canvas>
</body>
<script type="text/javascript">
        var canvas = document.querySelector('#canvas'),
                context = canvas.getContext('2d');


        // 定义边长、颜色、边数、canvas大小
        var length = 100, fillColor = '#000', vertices = 6, size = 1000;
        canvas.width = size;
        canvas.height = size;

        var getDegree = function(vertices, index) {
                return 360 / vertices * (i + 0.5) + 90;//这个是什么意思?
        }

        var getRadian = function(degree) {
            return degree * Math.PI / 180;//这里是什么意思?
        };
       
    context.beginPath();
    for (var i = 0; i < vertices; i++) {
            // 计算偏转
            var degree = getDegree(vertices, i),
                    radian = getRadian(degree);

            // 增加1/3的canvas大小位移量以免被边缘挡住
        var x = Math.cos(radian) * length + size / 3;//为什么这样算可以得出x?
        var y = Math.sin(radian) * length + size / 3 ;//为什么这样算可以得出y?
        context.lineTo(x, y);
    }
    context.closePath();
    context.stroke();
</script>
</html>
————————————————
版权声明:本文为CSDN博主「sysuzjz」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sysuzjz/article/details/53107594
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-25 21:42:06 | 显示全部楼层
        var canvas = document.querySelector('#canvas'),
                context = canvas.getContext('2d');

       
        // 定义多边形外接圆半径、颜色、边数、canvas大小
        var length = 100, fillColor = '#000', vertices = 9, size = 1000;
        canvas.width = size;//定义画布大小
        canvas.height = size;

        var getDegree = function(vertices, index) {
        //360/vertices 获取圆心角 ,0.5 决定图像显示的方向 可以为0 或 0.5,90  从y轴开始计算角度 最后角度超过360 参考sin cos 正弦 余弦函数图像
        //求出当前角角度
        //当前知识点属于平面直角坐标系三角函数
                return 360 / vertices *  (i + 0.5) + 90;
                //return 360 / vertices *  i ;//一样可以画出多边形
        }

        var getRadian = function(degree) {
            return degree * Math.PI / 180;//求弧度
        };
        context.moveTo(size/2,0);
        context.lineTo(size/2,size);
        context.moveTo(0,size/2);
        context.lineTo(size,size/2);
        context.stroke();
       
    context.beginPath();//重置路径 , 路径将不予之前路径链接
        context.translate(size/2,size/2);
        context.font ='18px bold 黑体';
        var randio = new Array;
    for (var i = 0; i < vertices; i++) {
            // 计算偏转
            var degree = getDegree(vertices, i),
                    radian = getRadian(degree);
                        console.log(degree);
            // 增加1/3的canvas大小位移量以免被边缘挡住
      

        //附件 //x y 为何这么求
        var x = Math.cos(radian) * length; //+ size / 3;
        var y = Math.sin(radian) * length ;//+ size / 3 ;

               
                y = -y;//显示的坐标系 右 x + 下 y +  使其变成正常的坐标系
        //context.lineTo(x, y);
                context.fillText(i+1,x+20,y-10);//点显示
                context.lineTo(x,y);
                randio.push([x,y]);
                console.log(x,y);
    }
       
    context.closePath();//当前点到开始点的路线 使其成为完整的图形
    context.stroke();//绘制所有点
       
    context.beginPath();
公式解析.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-2 14:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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