Archive 2016 年 7 月 6 日

弦截法计算日月合朔

设时刻T还有T',并设T'=T,再设一个t 1、计算T时刻太阳黄经 2、计算T+t太阳黄经 3、计算T-t太阳黄经 4、计算T时刻月球黄经 5、计算T+t月球黄经 6、计算T-t月球典经 7、求T时刻太阳黄经与月球黄经之差 8、T+t的时刻的月亮黄经 减去 T-t时刻的月球黄经 加上 T- t时刻的太阳黄经 送去 T+t时刻的太阳黄经 ,再除以1e-6 9、第7步结果除以第8步结果,再用T减去这个结果,得到 T' 10、判断T'与T的差值绝对值,是否达到精度要求,如果未达到,则设T=T',然后从头开始再算。 如此T会不断更新为新的计算结果,然后不断精度越来越高,通常达到一分钟以下的精度即可,而且即使是一分钟的精度,也会与现实有所误差,所以这种计算也只是一个模拟值。  

Read More

SwissEphNet

为了尝试能够实现Windows上开发,Linux上运行,所以采用了Asp.net core,然而在使用SwissEphNet时,发现一个重大的问题,SwissEphNet读文件是调用一个事件,然后在这个事件用返回一个文件流,然后在这个文件流又返回给一个包装的CFile,然后CFile又返回给一另外的对象,更糟糕的是它层层迭代后,弄得一片混乱,有地方没有对流进行Dispose,因为没有释放资源就导致了在多线程访问时,会提示文件已经被其它进程占用。   因为其调用代码简直是满目疮痍,混乱一片,无法从内部进行修改,所以就采用了取巧的方法解决,每次创建一个CFILE对象时,就将它注册到一个字典里,并将当前的流记录下来,遇到再次访问相同文件时,就去反查该文件的流,并进行Dispose释放,然后重新创建CFile对象,如此暂时解决了问题。 推测应该是内存回收管理机制的问题,因为包装引用太多,虽然在代码中进行Dispose了,但仍然有地方可能有牵扯不清的引用,导致它不能指针变空,结果就导致了流无法翻译。

Read More