中华农历论坛知识讨论区历法知识 → 寿星万年历5.08(测试版)


  共有934479人关注过本帖树形打印

主题:寿星万年历5.08(测试版)

帅哥哟,离线,有人找我吗?
xjw01
  851楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/12/23 22:07:00

寿星的内核程序只能在 ActionScript2.0中调试通过,无法在ActionScript3.0中调试通过。因为3.0的语法要求与2.0相差较多,象C++一样比较严格,适合编译,所以目前只能在2.0中调试通过。目前eph.js和eph0.js可同时在IE和flash8.0中调试成功,flash9.0可能也可以,但没有调试。

 

本来不打算接入flash的,但考虑到flash的绘图和动画能力比vml好一些,所以还是加入了。

可惜flash的文字处理能力太弱,远不如html语言,加之本人flash的功力浅薄,如果没有更好的创意,就不打算在flash中做过多的事情。

 

在flash中,vml.js是不能被正确调用的,所以tu3物件改写为

 

//本程序在as2中运行
var tu3={
 isInit:0, eR:250, x0:350, y0:300,
 init:function(can){
 },
 P1:[0.1,0xA0A0A0,100], //地图
 P2:[0.1,0xD0D0FF,100], //地图国界
 P3:[0.1,0xE0E0E0,100], //经纬线
 A: [0.1,0xF08080,100], //食界线1
 B: [0.1,0x80F080,100], //食界线2
 C: [0.1,0x8080F0,100], //晨昏圈
 D: [0.1,0x000000,100], //影子界线

 tylx:0, //地图投影的类型设置

 lineArr:function(d,xian){ //画曲线
   _root.lineStyle(xian[0], xian[1], xian[2])
   var i, dz, G=new Object(); //dz动作
   var ln=-1,lx,ly, dd=0; //某条线的最后一个画线点(ln,lx,ly),dd为画线状态
   var x1=this.jb[0]-this.jb[2], x2=this.jb[0]+this.jb[2];
   var y1=this.jb[1]-this.jb[3], y2=this.jb[1]+this.jb[3];
   for(i=0; i<d.length; i+=2){
     if(d[i]=='e') break;
     if(d[i]=='m') {dz='m',dd=0; i--; continue;} //新线开始,清除最后画点
     if(d[i]=='l') {dz='l';      i--; continue;}
     if(d[0]!='m' && i<3){ //不以moveTo开头的数组
       if(i==0) dz='m';
       if(i==2) dz='l';
     }
     touY.toxy(d[i],d[i+1],G);
     if(G.x<x1||G.x>x2||G.y<y1||G.y>y2) G.z=-1;
     G.X=this.x0+this.eR*G.x;
     G.Y=this.y0-this.eR*G.y;

     if(G.z<0) {//不显示的点
       if(dd%2==1) dd=2;
       continue;
     }
     if(dd%2==0){
       if(dz!='m') _root.moveTo(G.X,G.Y);
       dd++,ln=-1;
     }
     if(this.tylx==4){ //摩氏地图投影
       if(abs(lx-G.x)>1/3) //防止出现水平回扫线(地图被边界切割时会有此问题)
         if(dz!='m') _root.moveTo(G.X,G.Y);
     }
     if(this.tylx==5||this.tylx==6){ //正轴等距或等角圆柱
       if(abs(lx-G.x)>1/3||abs(ly-G.y)>1/3) //防止出现水平回扫线
         if(dz!='m') _root.moveTo(G.X,G.Y);
     }
     if(this.tylx==7||this.tylx==8||this.tylx==9){ //多圆锥
       var cy=abs(ly-G.y), cx=abs(lx-G.x);
       if(cx>1/3 || abs(G.y)>1/2 && lx*G.x<0) //防止出现水平回扫线
         if(dz!='m') _root.moveTo(G.X,G.Y);
     }

     if(dz=='m') _root.moveTo(G.X,G.Y);
     else        _root.lineTo(G.X,G.Y);
     ln=i, lx=G.x, ly=G.y;
   }
 },
 showDitu:function(n,m){//显示地图
  this.lineArr(ditu1, this.P1);
  this.lineArr(ditu2, this.P2);

  var i,k, a=new Array(), N=96, pi=Math.PI; //N经纬圈描点的个数
  for(k=0;k<m;k++){ //画纬圈
   for(i=0,f=0;i<=N;i++) a[2*i] = i*pi2/N, a[2*i+1] = (k+1)*pi/(m+1)-pi_2;
   this.lineArr(a,this.P3);
  }
  for(k=0;k<n;k++){ //画经圈
   for(i=0,f=0;i<=N;i++) a[2*i] = k*pi2/n, a[2*i+1] = i*pi/N-pi_2;
   this.lineArr(a,this.P3);
  }
 },

 lineNN:function(p1,n1,p2,n2, A){ //连接p1中的n1到p2中的n2
  if(!p1.length||!p2.length) return;
  if(n1==-1) n1=p1.length-2;
  if(n2==-1) n2=p2.length-2;
  this.lineArr( [ p1[n1],p1[n1+1],  p2[n2],p2[n2+1] ], A ); //p1与p2两线头部连接
 },
 draw:function(F, J0,W0, eR, jb, tylx){ //jb局部放大参数
  this.eR=eR, this.tylx=tylx, this.jb=jb;
  touY.setlx(tylx,J0,W0);

   _root.clear();

  this.showDitu(24,11);

  var n, A=this.A, B=this.B, C=this.C, D=this.D;

  this.lineArr( F.p1, A ); //初亏复圆线1,二次方程第1根
  this.lineArr( F.p2, A ); //初亏复圆线1,二次方程第2根
  this.lineArr( F.p3, A ); //初亏复圆线2,二次方程第1根
  this.lineArr( F.p4, A ); //初亏复圆线2,二次方程第2根

  n = F.p1.length-2;
  this.lineNN( F.p1,0, F.p2,0,  A ); //p1与p2两线头部连接
  this.lineNN( F.p1,n, F.p2,n,  A ); //p1与p2两线尾部连接

  n = F.p3.length-2;
  this.lineNN( F.p3,0, F.p4,0,  A ); //p3与p4两线头部连接
  this.lineNN( F.p3,n, F.p4,n,  A ); //p3与p4两线尾部连接

  this.lineArr( F.q1, A ); //日出日没食甚线线1,第1根
  this.lineArr( F.q2, A ); //日出日没食甚线线1,第2根
  this.lineArr( F.q3, A ); //日出日没食甚线线2,第1根
  this.lineArr( F.q4, A ); //日出日没食甚线线2,第1根
  if(F.q1.length&&F.q2.length&&F.q3.length&&F.q4.length){
   this.lineNN( F.q1, 0, F.q2, 0,  A ); //补接头
   this.lineNN( F.q3,-1, F.q4,-1,  A ); //补接尾
  }


  this.lineArr( F.L0, A ); //中心线
  this.lineArr( F.L1, A ); //半影北界
  this.lineArr( F.L2, A ); //半影南界
  this.lineArr( F.L3, A ); //本影北界(或伪本影南界)
  this.lineArr( F.L4, A ); //本影南界(或伪本影北界)
  this.lineArr( F.L5, B ); //0.5半影北界
  this.lineArr( F.L6, B ); //0.5半影南界

  this.isDrawed=1;
 },
 draw2:function(F){
   if(!this.isDrawed) {alert('底图未画,无法显示.'); return;}
   var C=this.C, D=this.D;
   this.lineArr( F.p3, C ); //晨昏圈
   this.lineArr( F.p1, D ); //本影
   this.lineArr( F.p2, D ); //半影
 }
};

 

tu3物件的使用方法与index.htm调用tu3的方法是一样的。如果flash爱好者,利用eph.js与eph0.js就可以制作出精确的日食计算器了。我的flash水平看来还有等于提高。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
子卯午酉
  852楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:10 积分:242 威望:0 精华:0 注册:2009/12/19 16:56:00
  发帖心情 Post By:2009/12/24 8:24:00

在此借用一下楼主的楼层问一个问遍百度、查遍网址而一无所获的无聊问题:“地球(水星、金星、火星、木星、土星、天王星、海王星)公转轨道面与太阳赤道面的夹角是多少?”这是个与天文历法无关的问题,请版主手下留情,有知道能提供一个相关的链接,非常感谢。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
浪-淘-沙
  853楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:2068 积分:4263 威望:5 精华:4 注册:2008/11/13 21:03:00
  发帖心情 Post By:2009/12/24 10:02:00

以下是引用子卯午酉在2009-12-24 8:24:00的发言:
在此借用一下楼主的楼层问一个问遍百度、查遍网址而一无所获的无聊问题:“地球(水星、金星、火星、木星、土星、天王星、海王星)公转轨道面与太阳赤道面的夹角是多少?”这是个与天文历法无关的问题,请版主手下留情,有知道能提供一个相关的链接,非常感谢。

请另开新贴吧。

等你开新贴后,我再来处理这个帖子吧。

请不用在这个帖子中回复我。

 

以后请发贴时与主题贴内容相关。谢谢支持。

 

 

太阳相关信息:数据来自NASA。

http://ssd.jpl.nasa.gov/horizons.cgi?s_type=1#top

 

Revised: Sep 12, 1996                   Sun                                 10

PHYSICAL PROPERTIES:
  GM (10^11 km^3/s^2)   = 1.3271243994    Mass (10^30 kg)       =    1.9891
  Radius (photosphere)  = 6.960(10^5) km  Angular diam at 1 AU  = 1919.3"
  Mean density          = 1.408 g/cm^3    Surface gravity       =  274.0 m/s^2
  Moment of inertia     = 0.059           Escape velocity       =  617.7 km/s
  Adopted sidereal per  = 25.38 d         Pole (RA,DEC in deg.) =  286.13,63.87
  Obliquity to ecliptic = 7 deg 15'        (这个就是太阳的赤道面与黄道面的夹角)。

  Solar constant (1 AU) = 1367.6 W/m^2    Solar lumin.(erg/s)   =  3.846(10^33)
  Mass-energy conv rate = 4.3(10^12 gm/s) Effective temp (K)    =  5778
  Surf. temp (photosphr)= 6600 K (bottom) Surf. temp (photosphr)=  4400 K (top)
  Photospheric depth    = ~400 km         Chromospheric depth   = ~2500 km
  Sunspot cycle         = 11.4 yr         Cycle 22 sunspot min. =  1991 A.D.

  Motn. rel to nrby strs= apex : RA=271 deg; DEC=+30 deg
                          speed: 19.4 km/s = 0.0112 AU/day
  Motn. rel to 2.73K BB = apex : l=264.7+-0.8; b=48.2+-0.5
                          speed: 369 +-11 km/s


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  854楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/12/25 21:16:00

重新发布了v4.98版

1、在flash中增加了一些功能

2、改正toFixed的错误,当时为了与flash兼容而改写这个函数,发生了错误。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
shiyb
  855楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:7 积分:297 威望:0 精华:0 注册:2009/9/10 20:42:00
  发帖心情 Post By:2009/12/26 11:24:00

谢谢许老师的再次更新!

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  856楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/12/27 19:46:00

重新发布了V4.98版

 

对内核的几个语句改写,eph0.js和eph.js现已能够在flash9的ActionsScript3.0中调试通过


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
tony0208
  857楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:14 积分:294 威望:0 精华:0 注册:2009/12/29 15:59:00
  发帖心情 Post By:2009/12/29 17:08:00

最近几个月对农历的算法,有了想研究了想法,上网查资料等等,感觉只是仍然很片面,大多的例子都是农历对照200年的形式,
在这里终于发现了xjw01,激动万分。如果能为此也做上自己的一份努力,将不胜感激。
一位中国大连的程序员。

谢谢许老师!

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
tony0208
  858楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:14 积分:294 威望:0 精华:0 注册:2009/12/29 15:59:00
  发帖心情 Post By:2009/12/29 22:40:00

许老师,您好。
晚上下班后一直在看您的“寿星天文历”的说明帮助文件,还未开始研究源代码部分。
有一点问题及建议如下:
1.帮助文件 第一章 关于寿星天文历(万年历)sm1.htm中

算法的性能:一节
在P4/2.4G(FSB 800M)计算机中,本程序的高精度定朔速度约为500个/秒,底精度
定朔速度为5000个/秒,高精度定气速度900个秒,底精度定气速度为9000个/秒
上述“底精度”是否应该为“低精度”一词?(略有点咬文嚼字嫌疑,不过作为一个
程序人员,追求一点严谨应该还不算什么大错误吧。或者说是有些东西不理解应该弄个明白,没有其他意思)
2.既然程序是开源的,能否再加上一个“改版履历”的文件,因为我看现在的版本已经是
V4.98了,但是各版本更新之细节处不明,也许将来会有更新版本,升级及改版之处追加记录,
以做备用,我想对于作者及看软件的人员都应该有所帮助。

略微拙见,请勿见笑。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
tsingkong
  859楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:1 积分:191 威望:0 精华:0 注册:2009/12/30 14:09:00
  发帖心情 Post By:2009/12/30 20:31:00

支持许老师。支持楼上的。
改版履历,更新履历,更新记录,在本贴中都已经有了。只是需要整理的工作。
支持楼上的整理成文件,一来熟悉程序,二来造福人类,功德无量。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  860楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/12/30 21:05:00

谢谢指正,我已经更改了。并重新发布。

另外,如果仅是想了解农历的算法,建议使用早期版本的寿星(V3.0以下的版本),这样程序比较简短。

如果想研究算法原理,帮助中讲到的那些书籍、论文等可能是必要的。

 

我自己也没有早期版本的,也许浪淘沙版主那里有。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

寿星万年历5.08(测试版)








签名