html - 使用 HTML canvas 绘制一系列旋转的线条

标签 html canvas html5-canvas

我想画这样一条折线

enter image description here

来自由多组角度和长度(50 和 100、90 和 20、90 和 30 等)组成的数组

有什么想法吗?

最佳答案

那是一个艰难的...

例如角度和长度的对象数组:

var arr = [
    { angle: 0, h: 50 },
    { angle: 90, h: 60 },
    { angle: 180, h: 70 },
    { angle: 270, h: 80 },
    { angle: 180, h: 90 }
];

下面的 draw 方法将从前面的数组中绘制线条,

function getAngle(ctx, x, y, angle, h) {
    var radians = angle * (Math.PI / 180);
    return { x: x + h * Math.cos(radians), y: y + h * Math.sin(radians) };
}
function draw() {
    var canvas = document.getElementById('canvas');
    if (canvas.getContext) {
        var ctx = canvas.getContext('2d');
        ctx.beginPath();

        var pos = { x: 400, y: 400 };

        for (var i = 0; i < arr.length; i++) {
            ctx.moveTo(pos.x, pos.y);
            pos = getAngle(ctx, pos.x, pos.y, arr[i].angle, arr[i].h);
            ctx.lineTo(pos.x, pos.y);
        }
        ctx.stroke();
    }
}

可以在canvas元素之后调用draw

<div style="width:800px;height:800px;border:solid 1px red;">
    <canvas id="canvas" width="800" height="800"></canvas>
</div>
<script type="text/javascript">
    draw();
</script>

编辑: 尝试将绘图功能更改为此,

function draw() {
    var canvas = document.getElementById('canvas');
    if (canvas.getContext) {
        var ctx = canvas.getContext('2d');
        ctx.beginPath();

        var pos = { x: 400, y: 400 },
            angle = 0;

        for (var i = 0; i < arr.length; i++) {

            angle += arr[i].angle;
            angle = (arr[i].angle + angle) % 360;

            ctx.moveTo(pos.x, pos.y);
            pos = getAngle(ctx, pos.x, pos.y, arr[i].angle + angle, arr[i].h);
            ctx.lineTo(pos.x, pos.y);
        }
        ctx.stroke();
    }
}

关于html - 使用 HTML canvas 绘制一系列旋转的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424367/

相关文章:

python - 如何使用 python 和 selenium 从 map (例如 Pokevision)中抓取 GIS 坐标?

javascript - 元素定位

javascript - 将 div 居中放在 Canvas 的顶部,该 Canvas 的大小响应于 window.innerWidth 和 window.innerHeight

c# - 如何在 WPF 中叠加图像?

javascript - 使用 angular.js 时,实例化 javascript 小部件/图表/实用程序的合适位置在哪里?

html - 在 HTML5 Canvas 中绘制 X 数量的圆圈的最快方法是什么?

javascript - html5-canvas 使用 javascript 在线斜率上移动球

javascript - CanvasContext2D drawImage() 问题 [onload 和 CORS]

javascript - 单击 anchor 时淡入/淡出 div 元素

javascript - jQuery - 将 div 从中心增长到动画