20180803 调试版_追星.zip (728 K) 下载次数:53 刚调试完成,烦请大家协助测试。后续功能有待增加。
使用E4A编程,有兴趣的朋友可以安装调试。压缩包内附有全部源码。
另有excel的计算方法,中文公式,简单易懂。也可以随意改编,扩展功能。
以下是核心部分源码:
函数 取儒略日(年 为 整数型, 月 为 整数型 , 日 为 整数型 ,时 为 整数型, 分 为 整数型 ,秒 为 整数型) 为 双精度小数型
变量 参数A 为 整数型
变量 参数B 为 整数型
参数A = 取整(年 /100)
参数B = 2-参数A+取整(参数A/4)
取儒略日 = 取整(365.25*(年+4716))+取整(30.6001*(月+1))+日+参数B-1524.5 +((时-8)*3600+ 分*60 +秒)/24/3600
结束 函数
过程 计算卫星位置()
变量 年 为 整数型
变量 确定平近点角的儒略日 为 双精度小数型
变量 参数T 为 双精度小数型
变量 恒星时 为 双精度小数型
变量 春分圈地理经度 为 双精度小数型
变量 卫星角速度 为 双精度小数型
变量 半长轴 为 双精度小数型
变量 近地点 为 双精度小数型
变量 远地点 为 双精度小数型
变量 过近地点儒略日 为 双精度小数型
变量 过近地点当前时间差 为 双精度小数型
变量 星历生成当前时间差 为 双精度小数型
变量 近地点幅角变化率 为 双精度小数型
变量 修正后的近地点幅角 为 双精度小数型
变量 过近地点后所转圈数 为 双精度小数型
变量 圈数取模 为 双精度小数型
变量 实时平近点角 为 双精度小数型
变量 Ek 为 双精度小数型
变量 偏近点角 为 双精度小数型
变量 轨道平面进动率 为 双精度小数型
变量 卫星速度 为 双精度小数型
变量 地心距离 为 双精度小数型
变量 真近点角 为 双精度小数型
'变量 X2 为 双精度小数型
'变量 Y2 为 双精度小数型
变量 卫星幅角 为 双精度小数型
变量 参数J 为 双精度小数型
变量 卫星旋转经度变量 为 双精度小数型
变量 地心角 为 双精度小数型
变量 卫星用户经度差 为 双精度小数型
变量 纬度阈值 为 双精度小数型
变量 L1 为 双精度小数型
变量 方位角1 为 双精度小数型
变量 方位角2 为 双精度小数型
变量 多普勒系数 为 双精度小数型
当前儒略日=取儒略日( 取年份(取现行时间()), 取月份(取现行时间()),取日(取现行时间()),取小时(取现行时间()),取分钟(取现行时间()),取秒(取现行时间()))+(上次更新时间%1000)/1000/3600/24
年 = "20"& 取文本中间(星历1,18,2)
确定平近点角的儒略日 = 取儒略日(年,1,1,32,0,0) + 确定平近点角的UTC时间%1000
参数T =(确定平近点角的儒略日-2451545)/36525
恒星时 =280.46061837+360.98564736629*(确定平近点角的儒略日-2451545)+0.000387933*参数T^2-参数T^3/38710000
春分圈地理经度 = 360 - 恒星时 % 360
卫星角速度 =每日绕行圈数*2*PI/24/3600
半长轴 =(万有引力常数/卫星角速度/卫星角速度)^(1/3)
近地点 = 半长轴*(1-轨道偏心率)-地球半径
远地点 = 半长轴*(1+轨道偏心率)-地球半径
过近地点儒略日 =确定平近点角的儒略日-指定历元的平近点角/360/每日绕行圈数
过近地点当前时间差 = 当前儒略日 - 过近地点儒略日
星历生成当前时间差 = 当前儒略日 - 确定平近点角的儒略日
近地点幅角变化率 =4.97*(地球半径/半长轴)^3.5*(5*求余弦(轨道倾角/180*PI)^2-1)/(1-轨道偏心率^2)^2
修正后的近地点幅角 =近地点幅角+近地点幅角变化率*星历生成当前时间差
过近地点后所转圈数 =过近地点当前时间差 * 每日绕行圈数
圈数取模 =过近地点后所转圈数 % 1
实时平近点角 = 圈数取模 * 360
Ek =2* 求反正切(((1-轨道偏心率)/(1+轨道偏心率))^0.5*求正切(实时平近点角/2*PI/180))*180/PI
偏近点角 =Ek-轨道偏心率*求正弦(Ek/180*PI)
地心距离 =半长轴*(1-轨道偏心率*求余弦(Ek/180*PI))
轨道平面进动率 =-9.95*(地球半径/地心距离)^3.5*求余弦(轨道倾角/180*PI)/(1-轨道偏心率^2)^2
卫星速度 =(万有引力常数*(2/地心距离-1/半长轴))^0.5
真近点角 =(2/PI*180*求反正切(((1+轨道偏心率)/(1-轨道偏心率))^0.5*求正切(Ek/180*PI/2))+360)%360
卫星幅角 =(真近点角+修正后的近地点幅角)%360
如果 卫星幅角 > 90 则
如果 卫星幅角 > 180 则
如果 卫星幅角> 270 则
参数J =0
否则
参数J= -180
结束 如果
否则
参数J =180
结束 如果
否则
参数J=0
结束 如果
卫星旋转经度变量 =求反正切(求正切((卫星幅角)/180*PI)*求余弦(轨道倾角/180*PI))*180/PI+参数J
卫星经度 = ((春分圈地理经度+升交点赤经+卫星旋转经度变量-星历生成当前时间差*(360.98563)+轨道平面进动率*星历生成当前时间差+180)%360+720)%360-180
卫星纬度 =求反正弦(求正弦(轨道倾角/180*PI)*求正弦(卫星幅角/180*PI))*180/PI
地心角 =求反余弦(求正弦(用户纬度/180*PI)*求正弦(卫星纬度/180*PI)+求余弦(用户纬度/180*PI)*求余弦(卫星纬度/180*PI)*求余弦(用户经度/180*PI-卫星经度/180*PI))
卫星俯仰角 = 求反正切((地心距离*求余弦(地心角)-(地球半径+用户海拔))/地心距离/求正弦(地心角))*180/PI
卫星用户经度差 =(卫星经度-用户经度+360)%360
纬度阈值 =求余弦(卫星用户经度差/180*PI)*用户纬度
L1 =求反余弦(求正弦(用户纬度/180*PI)*求正弦(卫星纬度/180*PI)+求余弦(用户纬度/180*PI)*求余弦(卫星纬度/180*PI)*求余弦(卫星用户经度差/180*PI))
方位角1 =(求反正弦(求正弦(卫星用户经度差/180*PI)*求正弦((90-卫星纬度)/180*PI)/求正弦(L1))*180/PI+360)%360
方位角2 =(540-方位角1)%360
如果 卫星纬度 < 纬度阈值 则
卫星方位角 = 方位角2
否则
卫星方位角=方位角1
结束 如果
当前距离=((地球半径+用户海拔) ^2 + 地心距离^2 - 2 * (地球半径+用户海拔) * 地心距离 * 求余弦(地心角))^0.5
距移率=(当前距离-上次距离)/时间差*1000
多普勒系数 = 300000000 / (300000000 + 距移率)
下行频率修正 = 下行频率 * 多普勒系数
上行频率修正 = 2 * 上行频率 - 上行频率 * 多普勒系数
列表框1.清空项目()
列表框1.添加项目("确定平近点角的UTC时间:"&确定平近点角的UTC时间)
列表框1.添加项目("轨道倾角:" & 轨道倾角)
列表框1.添加项目("升交点赤经:"&升交点赤经)
列表框1.添加项目("轨道偏心率:"&轨道偏心率)
列表框1.添加项目("近地点幅角:"&近地点幅角)
列表框1.添加项目("指定历元的平近点角:"&指定历元的平近点角)
列表框1.添加项目("每日绕行圈数:"&每日绕行圈数)
列表框1.添加项目("年:" & 年)
列表框1.添加项目("确定平近点角的儒略日:"&确定平近点角的儒略日)
列表框1.添加项目("当前儒略日:"&当前儒略日)
列表框1.添加项目("过近地点儒略日:"&过近地点儒略日)
列表框1.添加项目("恒星时:"&恒星时)
列表框1.添加项目("春分圈地理经度:"&春分圈地理经度)
列表框1.添加项目("卫星角速度:"&卫星角速度)
列表框1.添加项目("半长轴:"&半长轴)
列表框1.添加项目("近地点:"&近地点)
列表框1.添加项目("远地点:"&远地点)
列表框1.添加项目("过近地点当前时间差:"&过近地点当前时间差)
列表框1.添加项目("星历生成当前时间差:"&星历生成当前时间差)
列表框1.添加项目("近地点幅角变化率:"&近地点幅角变化率)
列表框1.添加项目("修正后的近地点幅角:"&修正后的近地点幅角)
列表框1.添加项目("过近地点后所转圈数:"&过近地点后所转圈数)
列表框1.添加项目("圈数取模:"&圈数取模)
列表框1.添加项目("实时平近点角:"&实时平近点角)
列表框1.添加项目("Ek:"&Ek)
列表框1.添加项目("偏近点角:"&偏近点角)
列表框1.添加项目("地心距离:"&地心距离)
列表框1.添加项目("轨道平面进动率:"&轨道平面进动率)
列表框1.添加项目("卫星速度:"&卫星速度)
列表框1.添加项目("真近点角:"&真近点角)
列表框1.添加项目("卫星幅角:"&卫星幅角)
列表框1.添加项目("参数J:"&参数J)
列表框1.添加项目("卫星旋转经度变量:"&卫星旋转经度变量)
列表框1.添加项目("地心角:"&地心角)
列表框1.添加项目("卫星用户经度差:"&卫星用户经度差)
列表框1.添加项目("纬度阈值:"&纬度阈值)
列表框1.添加项目("L1:"&L1)
列表框1.添加项目("方位角1:"&方位角1)
列表框1.添加项目("方位角2:"&方位角2)
列表框1.添加项目("当前距离:"&当前距离)
列表框1.添加项目("上次距离:"&上次距离)
列表框1.添加项目("时间差:"&时间差)
列表框1.添加项目("距移率:"&距移率)
列表框1.添加项目("磁偏角:"&磁偏角)
列表框1.添加项目("用户经度:"&用户经度)
列表框1.添加项目("用户纬度"&用户纬度)
列表框1.添加项目("用户海拔:"&用户海拔)
结束 过程
过程 结果输出()
变量 X 为 整数型
变量 Y 为 整数型
X =取整(卫星方位角 - 手机方位角)
如果 X < -180 则
X=X+360
结束 如果
如果 X>180 则
X=X-360
结束 如果
X=(X+152)/304* 画板1.宽度
Y=取整(手机俯仰角-卫星俯仰角)
Y=(Y+100)/200*画板1.高度
画板1.清空()
'画板1.画笔类型=1
'画板1.画圆(X,Y,40)
画板1.画图片缩放("sat.jpg",X-72,Y-52,144,104)
画板1.画笔粗细=4
画板1.画笔类型=2
画板1.画圆(画板1.宽度/2,画板1.高度/2,50)
画板1.画直线(画板1.宽度*0.25,画板1.高度*0.5,画板1.宽度*0.75,画板1.高度*0.5)
画板1.画直线(画板1.宽度*0.5,画板1.高度*0.3,画板1.宽度*0.5,画板1.高度*0.7)
丰富文本框1.内容 = "当前时间:"& 取现行时间文本(":")
丰富文本框1.内容 = 丰富文本框1.内容 & "\n手机方位角:"& 取整( 手机方位角)
丰富文本框1.内容 = 丰富文本框1.内容 & " 手机俯仰角:"& 取整( 手机俯仰角)
丰富文本框1.内容 = 丰富文本框1.内容 & "\n卫星方位角:"& 取整( 卫星方位角)
丰富文本框1.内容 = 丰富文本框1.内容 & " 卫星俯仰角:"& 取整( 卫星俯仰角)
丰富文本框1.内容 = 丰富文本框1.内容 & "\n卫星经 度:"& 取整( 卫星经度)
丰富文本框1.内容 = 丰富文本框1.内容 & " 卫星纬 度:"& 取整( 卫星纬度)
丰富文本框1.内容 = 丰富文本框1.内容 & "\n上 行 频 率:"& 取整(上行频率修正*10000)/10000
丰富文本框1.内容 = 丰富文本框1.内容 & " 下 行 频 率:"& 取整(下行频率修正*10000)/10000
结束 过程