TAG ,

얼추 맞는 듯..^^

알고리듬이 간단해서
암산으로도 할 수 있을 정도^^

정밀한 계산은 실제 해와 달의 움직임을 시뮬레이션하는 모듈을 만들어야 함^^

특히 2019년까지는 암산으로 할 필요도 없을 정도로 간단^^

아래 소스는 vc++ 6.0에서 console 모드에서 돌게 만들었음.

#include <math.h>
#include <stdio.h>
//
// John Horton Conway's moon phase calculation algorithm
// from : http://www.faqs.org/faqs/astronomy/faq/part3/section-15.html
//
float CalculateMoonPhase( int y, int m, int d ) {
 float delta, moon;
 int ry;

 if ( y < 1900 || y > 2099 ) return -1;

 switch ( y / 100 ) {
 case 19: delta = -4; break;  // 20th century
 case 20: delta = -8.3; break; // 21st century
 default: break; // error
 }

 ry = y % 100; // get last two digits
 ry %= 19;  // get reminder divided by 19
 if ( ry > 9 ) ry -= 19;  // make -9 <= ry <= 9
 ry *= 11; // -99 <= ry <= 99
 ry %= 30; // -29 <= ry <= 29
 if ( m < 3 ) m += 2;

 //moon = ( 30 + ry + m + d - delta ) % 30;
 moon = fmod( 30 + ry + m + d + delta, 30. );
 return moon;
}

main() {
 float m;
 m = CalculateMoonPhase( 1944, 6, 6 );
 printf( "1944, 6, 6 : %f\n", m );
 m = CalculateMoonPhase( 2007, 12, 10 );
 printf( "2007, 12, 10 : %f\n", m );
}

Posted by Flexagon . .

댓글을 달아 주세요

  1. Favicon of https://wanso.santa21.com BlogIcon Flexagon . . 2007.12.11 21:13 신고  댓글주소  수정/삭제  댓글쓰기

    그믐이나 초하루 전후로는 여행이 불길하다는 말이 있어서
    암산할 필요가 있어 만들어 봄^^