下午好,
我们创建了一个以以下格式运行的模拟时钟
28小时= 1天
56分钟= 1小时
56秒= 1分钟
在模拟28小时时钟中,秒数贯穿整个时钟面,持续112滴答。当秒数达到56和112时,分钟发生变化。同样,小时数经过56小时逐渐变化。我们注意到,当分钟越过14处的56分钟标记时,时针就会每2小时异常移动一次。
任何人都可以为我们提供解决我们正在遇到的阻碍因素的解决方案。
我们正在为“我们的月球生活”组织中的研究工作创建上述时钟。这项研究工作的目的是帮助科学共同体在月球上创造生活条件。我们认为整个研究工作是共同的财产。我们将以最大的敬意接受您对我们研究工作的帮助。
非常感谢你, 亲切的问候。
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var radius = canvas.height / 2;
ctx.translate(radius, radius);
radius = radius * 0.90
setInterval(drawClock, 1000);
var ms_per_sec = 0.984; // 1000
var sec_per_min = 56; // 55.54920598892;
var min_per_hr = 56; // 55.54920598892;
var hrs_per_day = 28;
// let's make our target date at some fixed distance in our own time system
const countDownDate = 1555157555171; // 5 seconds
function loop() {
// Get todays date and time
var now = new Date().getTime();
// Find the distance between now and the count down date
var total_ms = (countDownDate + now);
// from here our values are based on our own time system
var total_seconds = (total_ms / ms_per_sec);
var total_minutes = (total_seconds/ sec_per_min);
var total_hours = (total_minutes / min_per_hr);
var total_days = (total_hours / hrs_per_day);
var days = Math.floor(total_days);
var hours = Math.floor(total_hours % hrs_per_day);
var minutes = Math.floor(total_minutes % 112);
var seconds = Math.floor(total_seconds % 112);
// Output the result in an element with id="demo"
document.getElementById("demo").textContent = hours + "h "
+ minutes + "m " + seconds + "s ";
drawFace(ctx, radius);
drawNumbers(ctx, radius);
drawTime(ctx, radius, days, hours, minutes, seconds);
// If the count down is over, write some text
if (total_ms < 0) {
document.getElementById("demo").innerHTML = "EXPIRED";
return;
}
requestAnimationFrame(loop);
}
loop();
function drawClock() {
}
function drawFace(ctx, radius) {
var grad;
ctx.beginPath();
ctx.arc(0, 0, radius, 0, 2*Math.PI);
ctx.fillStyle = 'white';
ctx.fill();
grad = ctx.createRadialGradient(0,0,radius*0.95, 0,0,radius*1.05);
grad.addColorStop(0, '#333');
grad.addColorStop(0.5, 'white');
grad.addColorStop(1, '#333');
ctx.strokeStyle = grad;
ctx.lineWidth = radius*0.1;
ctx.stroke();
ctx.beginPath();
ctx.arc(0, 0, radius*0.1, 0, 2*Math.PI);
ctx.fillStyle = '#333';
ctx.fill();
}
function drawNumbers(ctx, radius) {
var ang;
var num;
ctx.font = radius*0.08 + "px arial";
ctx.textBaseline="middle";
ctx.textAlign="center";
for(num = 1; num < 29; num++){
ang = num * Math.PI / 14;
ctx.rotate(ang);
ctx.translate(0, -radius*0.85);
ctx.rotate(-ang);
ctx.fillText(num.toString(), 0, 0);
ctx.rotate(ang);
ctx.translate(0, radius*0.85);
ctx.rotate(-ang);
}
}
function drawTime(ctx, radius, days, hours, minutes, seconds){
var hour = hours;
var minute = minutes;
var second = seconds;
//hour
hour=hours%28;
hour=(hours*Math.PI/14)+
(minutes*Math.PI/(14*112))+
(seconds*Math.PI/(1568*112));
drawHand(ctx, hour, radius*0.5, radius*0.07);
//minute
minute=(minutes*Math.PI/56)+(seconds*Math.PI/(224*112));
drawHand(ctx, minute, radius*0.8, radius*0.07);
// second
second=(seconds*Math.PI/56);
drawHand(ctx, second, radius*0.9, radius*0.02);
}
function drawHand(ctx, pos, length, width) {
ctx.beginPath();
ctx.lineWidth = width;
ctx.lineCap = "round";
ctx.moveTo(0,0);
ctx.rotate(pos);
ctx.lineTo(0, -length);
ctx.stroke();
ctx.rotate(-pos);
}
<html>
<body>
<p id="demo"></p>
<canvas id="canvas" width="400" height="400"
style="background-color:#333">
</canvas>
</body>
</html>
答案 0 :(得分:0)
问题出在您使用分钟或秒来计算分钟和秒的方式上,具体取决于您将如何使用它们。我在这个小提琴中修复了它:https://jsfiddle.net/1kx3scug/
唯一的变化是:
hour = ((second / sec_per_min + minute) / min_per_hr + hour) / hrs_per_day * 2 * Math.PI;
内部drawTime