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


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

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

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


加好友 发短信
等级:论坛游侠 帖子:190 积分:1585 威望:0 精华:1 注册:2008/7/6 15:34:00
  发帖心情 Post By:2008/12/12 21:32:00

/返回农历日数及日月食信息的函数,如-324.57923415,负号表示闰月,百位3表示月偏食(2为月全食,1为日食0为无食),百位及十位表示日数,小数部分是朔望时刻(单位为天,若该天不朔或望则小数部分为零)

function lunDate(y,m,d){
  var t=(y-1899.5)/100;
  var ms=floor((y-1900)*12.3685);
  var rpi=180/PI();
  var zone=8;  //时区
  var f0=ang(ms,t,0,0.75933,2.172e-4,1.55e-7)+0.53058868*ms-8.37e-4*t+zone/24+0.5;
  var fc=0.1734-3.93e-4*t;
  var j0=693595+29*ms;
  var aa0=ang(ms,t,0.08084821133,359.2242/rpi,0.0000333/rpi,0.00000347/rpi);
  var ab0=ang(ms,t,7.171366127999999e-2,306.0253/rpi,-0.0107306/rpi,-0.00001236/rpi);
  var ac0=ang(ms,t,0.08519585128,21.2964/rpi,0.0016528/rpi,0.00000239/rpi);
  var leap=0;  //闰月数,0则不闰
  var ecli=0;  //日月食
  var lunD=-1;  //农历日数
  var shuoD=0;  //本阴历月的阴历朔日数
  var shuoT=0;  //本阴历月的朔时刻
  var wangD=0;  //本阴历月的望时刻
  var wangT=0;  //本阴历月的阴历望日数

  for(var k=-1;k<=13;k+=0.5){  //k=整数为朔,k=半整数为望
    var aa=aa0+0.507984293*k;
    var ab=ab0+6.73377553*k;
    var ac=ac0+6.818486628*k;
    var f1=f0+1.53058868*k+fc*sin(aa)-0.4068*sin(ab)+0.0021*sin(2*aa)+0.0161*sin(2*ab)+0.0104*sin(2*ac)-0.0074*sin(aa-ab)-0.0051*sin(aa+ab);
    var j=j0+28*k+f1;  //朔或望的等效标准天数及时刻

    //记录当前日期的j值
    var lunD0=erD(y,m,d)-floor(j);  //当前日距朔日的差值
    if(k==floor(k)&&lunD0>=0&&lunD0<=29){
      var k1=k;  //记录当前时间对应的k值
      shuoT=tail(j);
      lunD=lunD0+1;
    }
    if(k==(k1+0.5)){
      wangT=tail(j); 
      wangD=floor(j)-(erD(y,m,d)-lunD+1)+1;
    }
   
    //判断日月食
    if((lunD==1&&k==k1)||(lunD==wangD&&k==(k1+0.5))){
      if(abs(sin(ac))<=0.36){
        var s=5.19595-0.0048*cos(aa)+0.002*cos(2*aa)-0.3283*cos(ab)-0.006*cos(aa+ab)+0.0041*cos(aa-ab);
        var r=0.207*sin(aa)+0.0024*sin(2*aa)-0.039*sin(ab)+0.0115*sin(2*ab)-0.0073*sin(aa+ab)-0.0067*sin(aa-ab)+0.0117*sin(2*ac);
        var p=abs(s*sin(ac)+r*cos(ac));
        var q=0.0059+0.0046*cos(aa)-0.0182*cos(ab)+0.0004*cos(2*ab)-0.0005*cos(aa+ab);
        if(p-q<=1.5572){
          ecli=1;  //日食
          if(k!=floor(k)){
            if(p+q>=1.0129)
              ecli=3;  //月偏食
            else
              ecli=2;  //月全食
          }
        }
      }
     }
  }
//k循环结束


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


加好友 发短信
等级:论坛游民 帖子:58 积分:3673 威望:0 精华:0 注册:2008/8/6 9:17:00
  发帖心情 Post By:2008/12/12 21:48:00

以下是引用xjw01在2008-12-12 11:51:00的发言:

问题如下:

1、星历(九行星及恒星)计算方面的C++算法在今年4月份已全部写好,但一直不敢把它转换为JavaScript程序。关键问题是javascript的运行速度问题。如果加入了五行计算,造成软件变慢太多,就没有太大意义。五行计算所需的作标变换比日月计算的变换要多一些,速度比日月计算要慢一些,是否可以考虑降低精度,比如降低到“角分”精度,不知这样大家会不会接受。

再者,九行计算的数据量很大,程序可能又要上涨近百k,也是很头疼的事。

2、日月食的计算是很麻烦的,如果仅仅是计算有无日月食(如《天文算法》或“日梭万年历”中所介绍的),那单然比较简单。但这样计算意义太小。举例说,我们都知道今年8月有日食。关键问题是在哪里有日食,路径如何,在全球范围内的情况是怎样的,在北京会是怎样的情形,在福建又是怎样的?要算出这些,需要直观的图形处理才有价值。我一直认为,计算日月食的“有无”是没有意义,如果这样,不如拿出近几千年的日月食总表即可,不必现场计算,现场计算无疑会降低程序性能。我的思路是,利用vml图形处理方法计算全球的日食情况,我有信心把这个做成《日月食宝典》。

3、在日食计算中,地球不是正球形,无形中给计算带来不少麻烦。我再考虑使用根数表计算日月食,效果可能会好一些。还有一种思路:把日食参数先用C++算好,在Javascript中调用这些参数,可大大减少计算量。

4、总之,在功能与性能方面还有很多需要平衡考虑的因素。前一段时间我有考虑过这些问题,但后来搁置,而先把万年历做好,然后再考虑天象问题。

不知大家有何想法,不妨一同讨论。

谢谢许老师发布了V3.15版。功能非常强大的万年历。

提个一个相当冒昧的建议:如果许老师能寿星万年历的C++代码开源,或做一个开源的工程,如sourceforge.net上的开源工程,那就更好了。

相信论坛里也应该有很多用C++的。

仅个人建议,请许老师考虑一下。再次感谢许老师。

 

 


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


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

已发布V1.35版本

改正了晚上23点至24的纪时错误


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


加好友 发短信
等级:论坛游侠 帖子:190 积分:1585 威望:0 精华:1 注册:2008/7/6 15:34:00
  发帖心情 Post By:2008/12/13 8:02:00

可以在主页面用高速地精度算法显示九大行星,在跳转页面用搞精度

另外请提供计都月波的数据  也就是远地点  升交点--古历都要计算这些

还有以行星黄经倒求时间的算法


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


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

想请教一下许兄,你的万年历里,附了一些信息,这些名词的具体意义是什么?请有空解释一下.谢谢.

我输入杭州的地理坐标(经度:-120.166666,纬度:30.25),输入时间2008年6月21日12:01:07(那天是夏至日,杭州的日上中天时间是12:01:07也是用日月升降计算的.)

我进行坐标计算(TD)得到:太阳的当日真分点地心坐标
视黄经纬   90°28'38.54" -  0°00'00.07"
视赤经纬    6h 02m04.87s   23°26'20.85"
地平方位  139°37'21.15" -  6°12'53.52"
径向距离 1.016285AU 时角   44°34'57.56"
平太阳时 15:00:11 真太阳时 14:58:20
时差 -01m51.15s (地平方位以站点为坐标中心)

我进行坐标计算(UT)得到:太阳的当日真分点地心坐标
视黄经纬   90°09'36.53" -  0°00'00.11"
视赤经纬    6h 00m41.89s   23°26'23.54"
地平方位  247°10'32.83" - 15°50'09.86"
径向距离 1.016262AU 时角 - 75°07'26.47"
平太阳时 07:01:17 真太阳时 06:59:30
时差 -01m46.84s (地平方位以站点为坐标中心)

我想请教许兄的是:

地平方位(以前的版本,你是写的"方位角,高度角"),具体指什么?

按说在夏至日,日上中天的时候,杭州看到的太阳高度角应当为(90-(30.15-23.4397))=83.28度.太阳方位角应当为0度(正南方向).

但我在计算结果里找不到这样的数据.或许是我的理解有错.请许兄指正.


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


加好友 发短信
等级:论坛游民 帖子:49 积分:381 威望:0 精华:0 注册:2008/12/5 15:39:00
  发帖心情 Post By:2008/12/13 18:09:00

那个坐标计算似乎不正确,输入当前时间计算结果和历表左边实时显示的对不上。


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


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

已发布v3.16

1、根据浪淘沙的指正,修改了下方的坐标计算错误。

2、修改了地标数准没有正确写入cookies的错误(造成下次打开时无法保留原来的地标数据)


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


加好友 发短信
等级:论坛游民 帖子:49 积分:381 威望:0 精华:0 注册:2008/12/5 15:39:00
  发帖心情 Post By:2008/12/13 21:13:00

发现B222~B221年历法有衔接问题,不知是否是历史上确有其事?

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


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

BC221年是秦历与古六历(春秋战国)的交界点,《三千五年历日天象》先取BC222年10月31日作为分界点(此日开始为秦历),月建为十月,《寿星万年历》使用BC222年年11月29日,月建为十一月。也就是说,《寿星万年历》从天正十一月开始重现秦历。

一般在朝代更替时会有重叠现象,有多部历法同时运行是正常的。这个道理是明显的,国家统一之前,各国实行各国的历法,国家统一之后常会发行一部统一的历法,而且强制颁行需要有一个过程(一般历时1年至数年是正常的)。另一方面,在-104年以前,史料不足,今推算的准确性也受到影响,《寿星万年历》主要参考《三千五百年历日天象》


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


加好友 发短信
等级:论坛游侠 帖子:159 积分:583 威望:0 精华:1 注册:2008/9/3 16:55:00
  发帖心情 Post By:2008/12/14 11:11:00

说实在的,这些数据就是天文学家大多也不会太在意的
作为门外汉,我们可能只对日食月食这些结果性数据感兴趣
个人建议把这些数据隐藏起来,需要时通过选项调出或者单列。


力学时  2008-12-14 02:58:51 ΔT=66.3秒
黄经章 12.35" 交角章 5.48" ε=23°26'22.70"
月球的当日真分点地心坐标
视黄经纬  102°53'20.67"    2°21'49.66"
视赤经纬    6h 57m01.40s   25°10'04.13"
地平方位  142°38'03.58" - 18°42'59.51"
径向距离 358059千米 时角  140°18'28.62"
亮面比例 96.985% 站心视半径 16.59'
太阳的当日真分点地心坐标
视黄经纬  262°29'24.14"    0°00'00.04"
视赤经纬   17h 27m17.60s - 23°13'36.18"
地平方位  342°01'19.76"   27°58'37.20"
径向距离 0.98428AU 时角 - 17°15'34.37"
平太阳时 10:45:37 真太阳时 10:50:58
时差  05m20.88s (地平方位以站点为坐标中心)

比较一下,在这一点上还是日梭万年历处理的好些,使用直观图表示出来了。


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

返回版面帖子列表

寿星万年历5.08(测试版)








签名