主题最新回顾(发布时间:2016/10/17 12:47:00) |
---|
-- 作者:hero_hacker
-- . |
主题最新回顾(发布时间:2016/10/16 22:20:00) |
---|
-- 作者:hero_hacker
-- // 例十 月亮过升交点、降交点 /* 月球交点是月球的轨道交点,它是月球轨道在天球上穿越过黄道(太阳在以恒星为背景的天球上移动的路径)的位置。 升交点是月球穿越黄道进入北方的点,降交点是穿越黄道进入南方的点。 当月亮经过升交点或者降交点时 其地心黄纬为零。 */ void moon_node() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = pd.year; double jut = 0.0; double tjd_ut, x[6],x1,x2,x0; long iflag=SEFLG_SPEED; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int32 iyear_out, imonth_out, iday_out, ihour_out, imin_out; double dsec_out; int flag=0; strcpy(buf,""); swe_set_ephe_path(NULL); // 年月日转换为儒略日数 tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; while(TRUE) { swe_calc(tjd_ut-(double)1/1440, SE_MOON, iflag, x, serr); x0=x[1]; swe_calc(tjd_ut, SE_MOON, iflag, x, serr); x1=x[1]; swe_calc(tjd_ut+(double)1/1440, SE_MOON, iflag, x, serr); x2=x[1]; flag=0; if( (x1>0 && x0<0) || (x1<0 && x0="x0" >0) ) flag=1; swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); if(jyear>pd.year) break; if(flag>=1) { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); swe_utc_time_zone( jyear, jmon, jday, jhour, jmin, jsec, d_timezone, &iyear_out, &imonth_out, &iday_out, &ihour_out, &imin_out, &dsec_out ); if(jyear>pd.year) break; if(x1 sprintf(s, "月过降交点 %d.%d.%d - %02d:%02d\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out); else sprintf(s, "月过升交点 %d.%d.%d - %02d:%02d\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out); do_print(buf, s); tjd_ut = swe_julday(jyear,jmon,jday+13,d_timezone,SE_GREG_CAL); } tjd_ut+=(double)1/1440; } MessageBox(0,buf,"",0); return ; } |
主题最新回顾(发布时间:2016/10/15 8:59:00) |
---|
-- 作者:hero_hacker
-- // 例九 地球的近日点远日点计算 void perihelion_aphelion() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = 2016; double jut = 0.0; double tjd_ut, x[6],x1,x2,x0; long iflag, iflgret; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int direct=0; double buffer=0; int32 iyear_out, imonth_out, iday_out, ihour_out, imin_out; double dsec_out; int flag=0; jyear = pd.year; strcpy(buf,""); swe_set_ephe_path(NULL); iflag = SEFLG_SPEED; // 年月日转换为儒略日数 tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; while(TRUE) { swe_calc(tjd_ut-(double)1/1440, SE_SUN, iflag, x, serr); x0=x[2]; iflgret = swe_calc(tjd_ut, SE_SUN, iflag, x, serr); x1=x[2]; iflgret = swe_calc(tjd_ut+(double)1/1440, SE_SUN, iflag, x, serr); x2=x[2]; flag=0; if(x1>x0 && x1>x2) flag=1; if(x1 flag=2; if(flag>=1) { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); swe_utc_time_zone( jyear, jmon, jday, jhour, jmin, jsec, d_timezone, &iyear_out, &imonth_out, &iday_out, &ihour_out, &imin_out, &dsec_out ); if(jyear>pd.year) break; if(jmon==1) sprintf(s, "地球过近日点 %d.%d.%d - %02d:%02d %fau\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out,x[2]); else sprintf(s, "地球过远日点 %d.%d.%d - %02d:%02d %fau\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out,x[2]); do_print(buf, s); tjd_ut = swe_julday(jyear,jmon,jday+160,d_timezone,SE_GREG_CAL); } tjd_ut+=(double)1/1440; } MessageBox(0,buf,"",0); return ; } |
主题最新回顾(发布时间:2016/10/14 9:39:00) |
---|
-- 作者:hero_hacker
-- // 例八 月过赤纬点计算 void declination() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = 2016; double jut = 0.0; double tjd_ut, x[6],x1,x2,x0; long iflag, iflgret; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int direct=0; double buffer=0; int32 iyear_out, imonth_out, iday_out, ihour_out, imin_out; double dsec_out; int flag=0; jyear = pd.year; strcpy(buf,""); swe_set_ephe_path(NULL); iflag = SEFLG_SPEED; // 年月日转换为儒略日数 tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; while(TRUE) { swe_calc(tjd_ut-(double)1/1440, SE_MOON, iflag, x, serr); swe_calc(tjd_ut-(double)1/1440, SE_MOON, iflag | SEFLG_EQUATORIAL, x, serr); x0=x[1]; iflgret = swe_calc(tjd_ut, SE_MOON, iflag, x, serr); iflgret = swe_calc(tjd_ut, SE_MOON, iflag | SEFLG_EQUATORIAL, x, serr); x1=x[1]; iflgret = swe_calc(tjd_ut+(double)1/1440, SE_MOON, iflag, x, serr); iflgret = swe_calc(tjd_ut+(double)1/1440, SE_MOON, iflag | SEFLG_EQUATORIAL, x, serr); x2=x[1]; flag=0; if(x1>x0 && x1>x2) flag=1; if(x1 flag=2; if(flag>=1) { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); swe_utc_time_zone( jyear, jmon, jday, jhour, jmin, jsec, d_timezone, &iyear_out, &imonth_out, &iday_out, &ihour_out, &imin_out, &dsec_out ); if(jyear>pd.year) break; if(x[1]>0) sprintf(s, "月过赤纬北点 %d.%d.%d - %02d:%02d %f°\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out,x[1]); else sprintf(s, "月过赤纬南点 %d.%d.%d - %02d:%02d %f°\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out,x[1]); do_print(buf, s); tjd_ut = swe_julday(jyear,jmon,jday+10,d_timezone,SE_GREG_CAL); } tjd_ut+=(double)1/1440; } MessageBox(0,buf,"",0); return ; } |
主题最新回顾(发布时间:2016/10/13 9:39:00) |
---|
-- 作者:hero_hacker
-- // 例七 月过近地点、远地点时间计算 void Apogee_Perigee() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = 2016; double jut = 0.0; double tjd_ut, x[6],x1,x2,x0; long iflag, iflgret; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int direct=0; double buffer=0; int32 iyear_out, imonth_out, iday_out, ihour_out, imin_out; double dsec_out; int flag=0,a; jyear = pd.year; strcpy(buf,""); swe_set_ephe_path(NULL); iflag = SEFLG_SPEED; // 年月日转换为儒略日数 tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; while(TRUE) { swe_calc(tjd_ut-(double)1/1440, SE_MOON, iflag, x, serr); x0=x[2]; iflgret = swe_calc(tjd_ut, SE_MOON, iflag, x, serr); x1=x[2]; iflgret = swe_calc(tjd_ut+(double)1/1440, SE_MOON, iflag, x, serr); x2=x[2]; flag=0; if(x1>x0 && x1>x2) flag=1; if(x1 flag=2; if(flag>=1) { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); swe_utc_time_zone( jyear, jmon, jday, jhour, jmin, jsec, d_timezone, &iyear_out, &imonth_out, &iday_out, &ihour_out, &imin_out, &dsec_out ); if(jyear>pd.year) break; a=(x1*149597870700)/1000; if(a>400000) sprintf(s, "月球过远地点 %d.%d.%d - %02d:%02d %dkm\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out,a); else sprintf(s, "月球过近地点 %d.%d.%d - %02d:%02d %dkm\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out,a); do_print(buf, s); tjd_ut = swe_julday(jyear,jmon,jday+12,d_timezone,SE_GREG_CAL); } tjd_ut+=(double)1/1440; } MessageBox(0,buf,"",0); return ; } |
主题最新回顾(发布时间:2016/10/10 10:51:00) |
---|
-- 作者:hero_hacker
-- // 例六 土星方照 void quadrature() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = 2016; double jut = 0.0; double tjd_ut, x[6],x1,x2,y; long iflag, iflgret; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int direct=0; double buffer=0; int flag=0,j,k; jyear = pd.year; strcpy(buf,""); swe_set_ephe_path(NULL); iflag = SEFLG_SPEED; tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; for (i = 0; i <= 365; i++) { iflgret = swe_calc(tjd_ut, SE_SATURN, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc(tjd_ut, SE_SUN, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(fabs(x2-x1)-90); if(y>=buffer && buffer!=0 && y<2) { tjd_ut-=2; flag=0; buffer=0; for (j = 0; j <= 24; j++) { iflgret = swe_calc(tjd_ut, SE_SATURN, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc(tjd_ut, SE_SUN, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(fabs(x2-x1)-90); if(y>=buffer && buffer!=0) { buffer=0; tjd_ut-=(double)2/24; flag=0; for (k = 0; k <= 60; k++) { iflgret = swe_calc(tjd_ut, SE_SATURN, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc(tjd_ut, SE_SUN, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(fabs(x2-x1)-90); if(y>=buffer && buffer!=0) { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); sprintf(s, "土星方照 %d.%d.%d - %02d:%02d\r\n", jyear, jmon, jday,jhour, jmin); do_print(buf, s); flag=0; buffer=0; direct=0; i=i+3; tjd_ut = swe_julday(jyear,jmon,jday+3,d_timezone,SE_GREG_CAL); goto out; } tjd_ut=tjd_ut+(double)1/1440; buffer = y; } } tjd_ut+=(double)1/24; buffer = y; } } tjd_ut+=1; buffer = y; out:; } MessageBox(0,buf,"",0); return ; } [此贴子已经被作者于2016-10-12 8:37:52编辑过]
|
主题最新回顾(发布时间:2016/10/9 19:05:00) |
---|
-- 作者:hero_hacker
-- // 例五 土星冲日 // SE_SATURN /* 土星冲日是指土星、地球、太阳三者依次排成一条直线, 也就是土星与太阳黄经相差180度的现象,天文学上称为“土星冲日”。 */ int opposition() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = 2016; double jut = 0.0; double tjd_ut, x[6],x1,x2,y; long iflag, iflgret; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int direct=0; double buffer=0; int flag=0,j,k; jyear = pd.year; strcpy(buf,""); swe_set_ephe_path(NULL); iflag = SEFLG_SPEED; tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; for (i = 0; i <= 365; i++) { iflgret = swe_calc(tjd_ut, SE_SATURN, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc(tjd_ut, SE_SUN, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(fabs(x2-x1)-180); if(y>=buffer && buffer!=0 && y<2) { tjd_ut-=2; flag=0; buffer=0; for (j = 0; j <= 24; j++) { iflgret = swe_calc(tjd_ut, SE_SATURN, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc(tjd_ut, SE_SUN, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(fabs(x2-x1)-180); if(y>=buffer && buffer!=0) { buffer=0; tjd_ut-=(double)2/24; flag=0; for (k = 0; k <= 60; k++) { iflgret = swe_calc(tjd_ut, SE_SATURN, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc(tjd_ut, SE_SUN, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(fabs(x2-x1)-180); if(y>=buffer && buffer!=0) { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); sprintf(s, "土星冲日 %d.%d.%d - %02d:%02d\r\n", jyear, jmon, jday,jhour, jmin); do_print(buf, s); flag=0; buffer=0; direct=0; i=i+3; tjd_ut = swe_julday(jyear,jmon,jday+3,d_timezone,SE_GREG_CAL); goto out; } tjd_ut=tjd_ut+(double)1/1440; buffer = y; } } tjd_ut+=(double)1/24; buffer = y; } } tjd_ut+=1; buffer = y; out:; } MessageBox(0,buf,"",0); return OK; } [此贴子已经被作者于2016-10-11 16:53:17编辑过]
|
主题最新回顾(发布时间:2016/10/7) |
---|
-- 作者:iflfwl
-- 感谢汉化了!想请教,读取了Swiss Ephemeris中经度、纬度、距离、经度速度这些数据怎么转换成星盘上黄道和赤道上的度数? |
主题最新回顾(发布时间:2016/10/6 22:18:00) |
---|
-- 作者:hero_hacker
-- // 例四 水星“留”的计算 void retention() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = 2016; double jut = 0.0; double tjd_ut, x[6]; long iflag, iflgret; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int direct=0; double buffer=0; int32 iyear_out, imonth_out, iday_out, ihour_out, imin_out; double dsec_out; int flag=0,j,k; jyear = pd.year; strcpy(buf,""); swe_set_ephe_path(NULL); iflag = SEFLG_SPEED; // 年月日转换为儒略日数 tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; for (i = 0; i <= 365; i++) { iflgret = swe_calc(tjd_ut, SE_MERCURY, iflag, x, serr); if(buffer!=0) { flag=0; if(x[3]>=buffer) //上升 { if(x[3]>0 && buffer<0) flag=1; } else if(x[3] { if(buffer>=0 && x[3]<0) flag=2; } if(flag>=1) { tjd_ut-=1; //回退一天 0.412155 flag=0; buffer=0; for (j = 0; j <= 24; j++) // 小时计算 { iflgret = swe_calc(tjd_ut, SE_MERCURY, iflag, x, serr); if( (buffer>0 && x[3]<0) || (buffer<0 && x[3]>0) )// { buffer=0; tjd_ut-=(double)2/24; //回退一小时 0.083471 flag=0; for (k = 0; k <= 120; k++) // 分计算 { iflgret = swe_calc(tjd_ut, SE_MERCURY, iflag, x, serr); if( (buffer>0 && x[3]<0) || (buffer<0 && x[3]>0) )//上升 { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); swe_utc_time_zone( jyear, jmon, jday, jhour, jmin, jsec, d_timezone, &iyear_out, &imonth_out, &iday_out, &ihour_out, &imin_out, &dsec_out ); sprintf(s, "水星留 %d.%d.%d - %02d:%02d\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out); //sprintf(s, "水星留 %d.%d.%d - %02d:%02d\r\n", jyear, jmon, jday,jhour, jmin); do_print(buf, s); flag=0; buffer=0; direct=0; i=i+19; tjd_ut = swe_julday(jyear,jmon,jday+19,d_timezone,SE_GREG_CAL); goto out; } tjd_ut=tjd_ut+(double)1/1440; buffer = x[3]; } } tjd_ut+=(double)1/24; buffer = x[3]; } } } tjd_ut+=1; buffer = x[3]; out:; } MessageBox(0,buf,"",0); return ; } [此贴子已经被作者于2016-10-10 10:50:30编辑过]
|
主题最新回顾(发布时间:2016/10/5 11:09:00) |
---|
-- 作者:hero_hacker
-- // 例三 木星合月的测试计算 int Conjunction() { char serr[AS_MAXCH]; int jday = 1, jmon = 1, jyear = 2016; double jut = 0.0; double tjd_ut, x[6],x1,x2,y; long iflag, iflgret; double d_timezone=-8; char buf[8000]; char s[AS_MAXCH]; int direct=0; double buffer=0; int32 iyear_out, imonth_out, iday_out, ihour_out, imin_out; double dsec_out; int flag=0,j,k; jyear = pd.year; strcpy(buf,""); swe_set_ephe_path(NULL); iflag = SEFLG_SPEED; // 年月日转换为儒略日数 tjd_ut = swe_julday(jyear,jmon,jday,d_timezone,SE_GREG_CAL); tjd_ut--; for (i = 0; i <= 365; i++) { iflgret = swe_calc_ut(tjd_ut, SE_JUPITER, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc_ut(tjd_ut, SE_MOON, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(x2-x1); if(y>=buffer && buffer!=0) //当前值大于上一次的值。取用上一次的时间 { tjd_ut-=1; //回退一天 0.412155 flag=0; buffer=0; for (j = 0; j <= 24; j++) // 小时计算 { iflgret = swe_calc_ut(tjd_ut, SE_JUPITER, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc_ut(tjd_ut, SE_MOON, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(x2-x1); if(y>=buffer && buffer!=0) // { buffer=0; tjd_ut-=(double)2/24; //回退一小时 0.083471 flag=0; for (k = 0; k <= 60; k++) // 分计算 { iflgret = swe_calc_ut(tjd_ut, SE_JUPITER, iflag, x, serr); x1 = swe_degnorm(x[0]); iflgret = swe_calc_ut(tjd_ut, SE_MOON, iflag, x, serr); x2 = swe_degnorm(x[0]); y=fabs(x2-x1); if(y>=buffer && buffer!=0) //上升 { swe_revjul(tjd_ut, gregflag, &jyear, &jmon, &jday, &jut); jut += 0.5 / 3600; jhour = (int) jut; jmin = (int) fmod(jut * 60, 60); jsec = (int) fmod(jut * 3600, 60); swe_utc_time_zone( jyear, jmon, jday, jhour, jmin, jsec, d_timezone, &iyear_out, &imonth_out, &iday_out, &ihour_out, &imin_out, &dsec_out ); sprintf(s, "木星合月 %d.%d.%d - %02d:%02d\r\n", iyear_out, imonth_out, iday_out,ihour_out, imin_out); do_print(buf, s); flag=0; buffer=0; direct=0; i=i+27; tjd_ut = swe_julday(jyear,jmon,jday+27,d_timezone,SE_GREG_CAL); goto out; } tjd_ut=tjd_ut+(double)1/1440; buffer = y; } } tjd_ut+=(double)1/24; buffer = y; } } out: tjd_ut+=1; buffer = y; } MessageBox(0,buf,"",0); return OK; } [此贴子已经被作者于2016-10-9 19:04:54编辑过]
|