gpt4 book ai didi

javascript - 如何使用 Canvas 将圆圈分成 24/7 等份?

转载 作者:数据小太阳 更新时间:2023-10-29 04:08:13 25 4
gpt4 key购买 nike

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Growing Circles</title>
</head>
<body>
<canvas id="c" width="960" height="720"></canvas>
</body>
</html>

JavaScript

var canvas = document.getElementById( "c" ),
ctx = canvas.getContext( "2d" );

ctx.lineWidth = 3;

ctx.beginPath();
ctx.arc( 500, 350, 60, 0, 2 * Math.PI, false );
ctx.fillStyle = "#4DA54D";
ctx.fill();
ctx.strokeStyle = "DarkRed";
ctx.stroke();

ctx.beginPath();
ctx.arc( 500, 350, 120, 0, 2 * Math.PI, false );
ctx.strokeStyle = "OliveDrab";
ctx.stroke();

ctx.beginPath();
ctx.arc( 500, 350, 180, 0, 2 * Math.PI, false );
ctx.strokeStyle = "#530053";
ctx.stroke();

ctx.beginPath();
ctx.arc( 500, 350, 240, 0, 2 * Math.PI, false );
ctx.strokeStyle = "#208181";
ctx.stroke();

ctx.beginPath();
ctx.arc( 500, 350, 300, 0, 2 * Math.PI, false );
ctx.strokeStyle = "#CC7A00";
ctx.stroke();

ctx.beginPath();
ctx.arc( 500, 350, 360, 0, 2 * Math.PI, false );
ctx.strokeStyle = "#205450";
ctx.stroke();

我要分This demo使用线条进入 24 小时时间线。我尝试了一些但没有达到标准。代码量很大!有没有其他方法可以用一小段代码解决这个问题,比如在 Tried demo 中使用 slice ?

Tried Demo

我的要求是按照This demo做的.我想要 This demo 24/7 切片,其中 24 代表小时,7 代表天。

进一步要求::即使我必须能够访问 particular arc我想要这取决于 day and hour !

最后我想看看这个样子Image我将传递参数(天、小时、颜色),然后那个特定的部分应该改变颜色,如图中所示。

这就是我尝试打印数字的方式.. function drawnumbers(){
for(var i=1; i< hours+1;i++){
context.font="18px sans-serif";
context.fillText(+i,20+i*30,20+i*30);
}
}
但我希望它们像 png 图像一样在外圈

最佳答案

虽然Harsh已经提供了一个非常有用的答案,它与您描绘的线框图有关。

我认为向您展示如何实现各个线段的绘制也会很有用。

我认为您对 PNG 的要求有点过高,因为我们实际上会为您创建您的元素,但根据我的回答和 Harsh 的回答,我相信您可以得到您想要的:

var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');

// centre or center for US :) the drawing
var x = canvas.width / 2;
var y = canvas.height / 2;

// number of days
var days = 7;

// number of hours
var hours = 24;

// one segment represents an hour so divide degrees by hours
var segmentWidth = 360 / hours;

// begin at 0 and end at one segment width
var startAngle = 0;
var endAngle = segmentWidth;

// how thick you want a segment
var segmentDepth = 30;

function init() {
for (var i = 1; i <= days; i++) {
drawSegments(i * segmentDepth);
}
}

function drawSegments(radius) {
for (var i = 0; i < hours; i++) {
context.beginPath();
context.arc(x, y, radius,
(startAngle * Math.PI / 180), (endAngle * Math.PI / 180), false);
context.lineWidth = segmentDepth;
context.strokeStyle = '#' +
(Math.random() * 0xFFFFFF << 0).toString(16);
context.stroke();

// increase per segment
startAngle += segmentWidth;
endAngle += segmentWidth;
}
}

// start drawing our chart
init();

查看我的 http://jsfiddle.net/U2tPJ/6/演示。

关于javascript - 如何使用 Canvas 将圆圈分成 24/7 等份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com