Giriş
tl; Dr.
Dünyadan Güneş'e olan mevcut mesafeyi sürekli olarak verin.
Basitleştirilmiş, Dünya'nın Güneş çevresindeki yörüngesi bir elipstir. Yani ikisi arasındaki gerçek mesafe sürekli değişiyor. Bu mesafe, bu formül kullanılarak herhangi bir gün için hesaplanabilir :
Denklem aşağıdaki bölümlere ayrılabilir 2 :
1
temsil 1 AB (astronomik birim), eşittir149,597,870.691 km
0.01672
olan yörünge basıklık Dünya ile Güneş arasındakicos
elbette kosinüs işlevidir, ancak radyan yerine derece cinsinden argümanla0.9856
olan 360 ° / 365,256363 gün , bir yıl içinde tam bir rotasyon,365.256363
ortalama güneş günde bir yıldız yıl boyu,day
yılın günü[1-365]
4
4 - 6 Ocak arasındaki perihelion ofsetini temsil eder
Formül bir gün sürer, ancak bu zorluğun amacı için - sürekli bir çıktı - daha doğru olmalısınız; ya da ertesi güne kadar çok şey olmayacak. Geçmiş zamanın yüzdesini geçerli güne ekleyin, örneğin 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Birkaç Örnek:
- 1 Ocak, 23:59:59
1.99998842592593
- 1 Ocak, 18:00:00
1.75
- 1 Ocak, 12:00:00
1.50
- 1 Ocak, 06:00:00
1.25
Giriş
Bu zorluğun girdisi yok.
Diliniz geçerli saati alamıyorsa, bunu programınıza girdi olarak alabilirsiniz. Geçerli girdiler, zaman damgaları veya dile en uygun tam tarih-saat dizeleridir . Geçerli günün tek başına geçmesine ( 5
5 Ocak veya 5.25
aynı gün saat 6'da olduğu gibi) izin verilmez.
Çıktı
Dünya ile Güneş arasındaki geçerli mesafeyi çıktılayın:
- Değeri çıktı olarak girin
km
. - Değeri en az saniyede bir güncelleyin .
Örnek çıktı:
152098342
Bayt sayınızı artırmazsa, sonucu da güzel yazdırabilirsiniz:
152,098,342
152,098,342 km
Gereksinimler
- Bir program veya işlev yazabilirsiniz. Anonim bir işlevse, lütfen onu nasıl çağıracağınıza ilişkin bir örnek ekleyin.
- Bu kod-golf çok kısa bayt kazanır cevap.
- Standart boşluklara izin verilmez.
Örnek uygulama
JavaScript'te örnek bir uygulama hazırladım. Ne rekabetçi ne de 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 Karmaşıklığı makul olmayan bir şekilde arttırmamak için yerel saatinizi UTC'ye dönüştürmeniz gerekmez. UTC kullanıyorsanız lütfen cevabınıza bir not ekleyin.
2 Daha fazla ayrıntı için Physics'teki " yılın belirli bir gününde Dünya-Güneş mesafesi " konusuna bakın.
Math.cos
Radyan kullandığından örneğinizin yanlış olduğuna inanıyorum . Ve bu formül çok yaklaşık göründüğünden , cevapların nasıl doğrulanacağı konusunda net olmanız gerekir.