소개
tl; dr
지구에서 태양까지의 현재 거리를 지속적으로 출력합니다.
간단히 말해, 태양 주위의 지구 궤도는 타원입니다. 따라서 둘 사이의 실제 거리는 지속적으로 변합니다. 이 거리는 다음 공식을 사용하여 주어진 날짜에 대해 계산할 수 있습니다 .
방정식은 다음의 부분으로 분할 될 수있다 2 :
1
1AU (천문 단위)를 나타내며149,597,870.691 km
0.01672
지구와 태양 사이 의 궤도 편심cos
물론 코사인 함수 이지만 라디안 대신 각도로 인수를 사용합니다.0.9856
인 360 ° / 365.256363 일 , 일년에 전체 회전,365.256363
평균 태양 일 항성 년의 길이,day
올해의 날이다[1-365]
4
perihelion 의 오프셋을 나타냅니다. 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
. - 최소한 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 자세한 내용은 물리 에서 " 일년의 지구-태양 거리 "를 참조하십시오.
Math.cos
라디안을 사용하기 때문에 귀하의 예가 잘못되었다고 생각합니다 . 이 공식은 매우 근사해 므로 답변을 확인하는 방법을 명확히해야합니다.