Canvas绘画之简单的多边形绘画

简介: Canvas绘画之简单的多边形绘画

效果:

源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>简单的多边形</title>
</head>
<body>
 
<canvas id="canvas"></canvas>
<p>试试选择不同的边数</p>
<label for="sidesSelects">多边形边数</label>
<select id="sidesSelects">
    <option selected value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
</select>
</body>
<script>
    'use strict';
 
    let canvas = document.getElementById('canvas'),
        context = canvas.getContext('2d'),
 
        sidesSelect = document.getElementById('sidesSelects'),
 
 
 
        Point = function (x, y) {
            this.x = x;
            this.y = y;
        };
 
    //Function……
    /**
     * 获得多边形的所有外接圆顶点
     * @param centerX
     * @param centerY
     * @param radius
     * @param sides
     * @param startAngle
     */
    function getPolygonPoints(centerX,centerY,radius,sides,startAngle) {
        let points = [],
            //这里的angle是基于钟表0点的位置开始计算,0点位置为0度,3点位置为π/2度
            angle = startAngle||0;
 
        for (let i=0;i<sides;++i){
            points.push(new Point(centerX+radius*Math.sin(angle),centerY+radius*Math.cos(angle)));
            angle += 2*Math.PI/sides;
        }
 
        return points;
    }
 
    /**
     * 根据每个顶点的位置,创建多边形的路径
     * @param centerX
     * @param centerY
     * @param radius
     * @param sides
     * @param startAngle
     */
    function createPolygonPath(centerX,centerY,radius,sides,startAngle) {
        let points = getPolygonPoints(centerX,centerY,radius,sides,startAngle);
 
        context.beginPath();
        context.moveTo(points[0].x,points[0].y);
 
        for (let i=0;i<sides;++i){
            context.lineTo(points[i].x,points[i].y);
        }
        context.closePath();
    }
 
    /**
     * 绘制多边形
     */
    function drawRubberbandShape() {
        createPolygonPath(canvas.width/2,canvas.height/2,canvas.width/4,parseInt(sidesSelect.value),0);
        context.stroke();
    }
 
    drawRubberbandShape();
 
    //event
    sidesSelect.onchange=function () {
        context.clearRect(0,0,canvas.width,canvas.height);
        drawRubberbandShape();
    }
</script>
</html>
相关文章
|
5月前
|
移动开发 前端开发 HTML5
彩色大风车泡泡Canvas特效
彩色大风车泡泡Canvas特效
51 7
彩色大风车泡泡Canvas特效
|
3月前
|
计算机视觉 Python
图像绘制以及写字
【7月更文挑战第28天】图像绘制以及写字。
26 7
|
3月前
|
前端开发 JavaScript
canvas系列教程06 ——边界检测、碰撞检测
canvas系列教程06 ——边界检测、碰撞检测
37 2
|
3月前
|
前端开发
Canvas绘画之文本缩放并旋转
Canvas绘画之文本缩放并旋转
|
3月前
|
前端开发
Canvas绘画之图像合成,图像层叠效果
Canvas绘画之图像合成,图像层叠效果
|
3月前
|
前端开发
Canvas绘画之倒三角形,渐变色效果源码
Canvas绘画之倒三角形,渐变色效果源码
|
3月前
|
前端开发
Canvas绘画之多边形画板,绘制多边形,携带背景图和绘画功能,带有全部清除的功能,用这个
Canvas绘画之多边形画板,绘制多边形,携带背景图和绘画功能,带有全部清除的功能,用这个
|
4月前
|
前端开发
canvas图像阴影处理
canvas图像阴影处理
|
5月前
|
前端开发 API
canvas详解03-绘制图像和视频
canvas详解03-绘制图像和视频
71 1