介绍
tl; dr
连续输出当前从地球到太阳的距离。
简化地说,地球绕太阳的轨道是椭圆形的。因此两者之间的实际距离在不断变化。可以使用以下公式针对任何给定日期计算此距离:
该方程可被分成以下几部分2:
1
代表1 AU(天文单位),等于149,597,870.691 km
0.01672
是地球和太阳之间的 轨道偏心率cos
当然是余弦函数,但是参数是度数而不是弧度0.9856
是360°/ 365.256363天,一年中的完整旋转,这365.256363
是恒星年的长度,以平均太阳日为准day
是一年中的一天[1-365]
4
代表距近日点的偏移量,它在1月4日至6日之间
公式需要一整天,但要解决这一挑战(持续输出),您必须更加准确;否则直到第二天什么事情都不会发生。只需将过去时间的百分比添加到当天,例如1:
day + (h * 3600 + m * 60 + s) / 864 / 100
几个例子:
- 1月1日,23:59:59
1.99998842592593
- 1月1日,18:00:00
1.75
- 1月1日,12:00:00
1.50
- 1月1日,06:00:00
1.25
输入值
这个挑战没有投入。
如果您的语言无法获取当前时间,则可以将其作为程序的输入。有效输入是最适合该语言的时间戳或完整的日期时间字符串。仅通过当天(例如5
1月5日或5.25
不允许 6点的同一天)。
输出量
输出从地球到太阳的当前距离:
- 在中输出值
km
。 - 至少每秒更新一次值。
输出示例:
152098342
如果它没有增加字节数,您还可以打印结果:
152,098,342
152,098,342 km
要求
- 您可以编写程序或函数。如果它是一个匿名函数,请举例说明如何调用它。
- 这是代码高尔夫球,因此最短答案以字节为单位。
- 不允许出现标准漏洞。
示例实施
我已经用JavaScript准备了一个示例实现。它既不竞争也不打高尔夫球。
// dayOfYear from http://stackoverflow.com/a/8620357/1456376
Date.prototype.dayOfYear = function() {
var j1= new Date(this);
j1.setMonth(0, 0);
return Math.round((this-j1)/8.64e7);
}
// vars
var e = document.getElementById('view'),
au = 149597870.691,
deg2rad = Math.PI/180,
date = now = value = null;
// actual logic
function calculate() {
date = new Date();
now = date.dayOfYear() + (date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds()) / 864 / 100;
value = 1 - 0.01672 * Math.cos(deg2rad * 0.9856 * (now - 4));
// supported in Firefox and Chrome, unfortunately not in Safari
e.innerHTML = Math.round(value * au).toLocaleString('en-US') + ' km';
setTimeout(calculate, 1000);
}
// let's do this
calculate();
<div id="view"></div>
1为了不增加不必要的复杂性,您不必将本地时间转换为UTC。如果您使用UTC,请在答案中添加注释。
2有关更多详细信息,请参见物理上的“一年中给定日期的地球-太阳距离 ”
Math.cos
使用了弧度。而且,由于该公式看起来非常近似,因此您必须清楚如何验证答案。