introduction
tl; dr
Émet en continu la distance actuelle de la Terre au Soleil.
Simplifiée, l'orbite de la Terre autour du Soleil est une ellipse. La distance réelle entre les deux est donc en constante évolution. Cette distance peut être calculée pour un jour donné en utilisant cette formule :
L'équation peut être divisée en les parties suivantes 2 :
1
représente 1 UA (unité astronomique), est égal à149,597,870.691 km
0.01672
est l' excentricité orbitale entre la Terre et le Soleilcos
est bien sûr la fonction cosinus, mais avec un argument en degrés plutôt qu'en radians0.9856
est de 360 ° / 365.256363 jours , une rotation complète en un an, où365.256363
est la longueur d'une année sidérale, en jours solaires moyensday
est le jour de l'année[1-365]
4
représente le décalage par rapport au périhélie , qui se situe entre le 4 et le 6 janvier
La formule prend une journée entière, mais pour ce défi - une sortie continue - vous devez être plus précis; ou il ne se passera pas grand-chose jusqu'au lendemain. Ajoutez simplement le pourcentage du temps passé au jour actuel, comme 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Quelques exemples:
- 1 janvier, 23:59:59
1.99998842592593
- 1 janvier, 18:00:00
1.75
- 1 janvier, 12:00:00
1.50
- 1 janvier, 06:00:00
1.25
Contribution
Ce défi n'a aucune entrée.
Si votre langue ne peut pas obtenir l'heure actuelle, vous pouvez l'obtenir comme entrée dans votre programme. Les entrées valides sont des horodatages ou des chaînes de date-heure complètes qui conviennent le mieux à la langue. Passer seul le jour en cours (comme 5
pour le 5 janvier ou 5.25
pour le même jour à 6 heures) n'est pas autorisé.
Production
Sortie de la distance actuelle de la Terre au Soleil:
- Sortez la valeur en
km
. - Mettez à jour la valeur au moins toutes les secondes .
Exemple de sortie:
152098342
Si cela n'augmente pas votre nombre d'octets, vous pouvez également imprimer le résultat:
152,098,342
152,098,342 km
Exigences
- Vous pouvez écrire un programme ou une fonction. S'il s'agit d'une fonction anonyme, veuillez inclure un exemple de la façon de l'invoquer.
- C'est le code-golf, donc la réponse la plus courte en octets gagne.
- Les failles standard ne sont pas autorisées.
Exemple d'implémentation
J'ai préparé un exemple d'implémentation en JavaScript. Ce n'est ni compétitif ni golfé.
// 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 Pour ne pas augmenter déraisonnablement la complexité, vous n'avez pas besoin de convertir votre heure locale en UTC. Si vous utilisez UTC, veuillez ajouter une note à votre réponse.
2 Pour plus de détails, voir " Distance Terre-Soleil un jour donné de l'année " sur Physics
Math.cos
utilise des radians. Et puisque cette formule semble très approximative, vous devrez être clair sur la façon dont les réponses doivent être vérifiées.