前書き
tl; dr
現在の地球から太陽までの距離を継続的に出力します。
簡単に言えば、太陽の周りの地球の軌道は楕円です。したがって、両方の実際の距離は常に変化しています。この距離は、次の式を使用して特定の日に計算できます。
方程式は、次のパート2に分割できます。
1
1 AU(天文単位)を表し、等しい149,597,870.691 km
0.01672
地球と太陽の間の 軌道離心率ですcos
もちろんコサイン関数ですが、引数はラジアンではなく度単位です0.9856
である360°/ 365.256363日、1年間で全回転、365.256363
平均太陽日で恒星年の長さであり、day
年の日です[1-365]
4
1月4日から6日までの近日点へのオフセットを表します
数式は1日かかりますが、この課題の目的である継続的な出力のためには、より正確でなければなりません。翌日まで何も起こりません。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
。 - 少なくとも1秒ごとに値を更新します。
出力例:
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詳細については、「物理学」の「1年の特定の日の地球と太陽の距離」を参照してください。
Math.cos
ラジアンを使用しているため、あなたの例は間違っていると思います。また、この式は非常に近似しているように見えるので、回答を検証する方法を明確にする必要があります。