以文本方式查看主题
- 中华农历论坛 (http://bbs.nongli.net/index.asp)
-- 历法知识 (http://bbs.nongli.net/list.asp?boardid=2)
---- 求助:如何求某时某地的东方地平线与黄道的交点? (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=26291)
|
-- 作者:buffettlamb
-- 发布时间:2010/3/3 19:45:00
-- 求助:如何求某时某地的东方地平线与黄道的交点?
如何求某时某地的东方地平线与黄道的交点?
地平线:观察者所在位置的切平面与天球的交线
谢谢!
|
-- 作者:xjw01
-- 发布时间:2010/3/3 22:17:00
--
使用球坐标变换公式即可。(球面三角公式)
|
-- 作者:buffettlamb
-- 发布时间:2010/3/5 16:00:00
--
以下是引用xjw01在2010-3-3 22:17:00的发言: 使用球坐标变换公式即可。(球面三角公式)
许老师,我不会啊。
|
-- 作者:xjw01
-- 发布时间:2010/3/5 18:59:00
--
ε黄赤交角
90表示90度,不是弧度编程时应注意
g是格林尼治恒星时
L是地理经度,向东测量为正
黄极的赤道坐标是(-90,90-ε) 黄极的时角坐标是(g+L-(-90),90-ε) = (g+L+90,90-ε) 黄极的正西起算的时角坐标是(90-(g+L+90),90-ε) = (-g-L,90-ε) 最后,把(-g-L,90-ε)代入黄道转赤道坐标的公式中,即得到黄极在地平坐标系中的坐标
参见: tan(α) = ( sin(λ)*cos(ε) - tan(β)*sin(ε) ) / cos(λ)
sin(δ) = sin(β)*cos(ε) + cos(β)*sin(ε)*sin(λ)
把式中的λ用(-g-L)代入,β用90-ε代入即可。
当然(α,δ)变成了地平坐标
我就不化简了,你自己简吧。
注:黄极计算出来后,你要得答案易得。
|
-- 作者:buffettlamb
-- 发布时间:2010/3/6 1:39:00
--
谢谢许老师,我对星历很感兴趣,很感谢您的指导,可我的天文知识太少太少了,正在努力学习中,刚知道了啥叫黄极。 能看懂您的,但不会继续推下去。
东方地平线交于黄道的那个点就叫上升点,我想知道它在黄道的经度。
是不是您程序sunShengJ(jd-dt_T(jd)+L/pi2,L,fa,-1) 中的VAR a就是我要的结果?
function sunShengJ(jd,L,fa,sj){ //太阳升降计算。jd儒略日(须接近L当地平午UT),L地理经度,fa地理纬度,sj=-1升,sj=1降 var i; jd=floor(jd+0.5)-L/pi2; for(i=0;i<2;i++){ var="var" t="jd/36525," e="(84381.4060" -46.836769*T)/rad; //黄赤交角 var="var" t="t" = T+(32*(T+1.8)*(T+1.8)-20)/86400/36525; //儒略世纪年数,力学时
var="var" J="J" = (48950621.66 + 6283319653.318*t + 53*t*t - 994 +334166 * cos( 4.669257+ 628.307585*t) + 3489="3489" * cos( 4.6261 + 1256.61517*t ) +2060.6 * cos( 2.67823 + 628.307585*t ) * t)/10000000; var="var" sinj="sin(J)," cosj="cos(J);" //太阳黄经以及它的正余弦值 var="var" gst="gst" = (0.7790572732640 + 1.00273781191135448*jd)*pi2 + (0.014506 + 4612.15739966*T + 1.39667721*T*T)/rad; //恒星时(子午圈位置) var="var" A="A" = atan2( sinJ*cos(E), cosJ="cosJ" ); //太阳赤经 var="var" D="D" = asin="asin" ( sin(E)*sinJ ); //太阳赤纬 var="var" cosH0="cosH0" = (sin(-50*60/rad) - sin(fa)*sin(D) ) / ( cos(fa)*cos(D) ); if(abs(cosH0)>=1) return 0; //太阳在地平线上的cos(时角)计算 jd += rad2rrad(sj*acos(cosH0) - (gst+L-A) )/6.28; //(升降时角-太阳时角)/太阳速度 } return jd; //反回格林尼治UT }
|
-- 作者:xjw01
-- 发布时间:2010/3/6 9:52:00
--
ε黄赤交角 90表示90度,不是弧度编程时应注意 g是格林尼治恒星时 L是地理经度,向东测量为正 D=g+L是本地恒星时
黄极的赤道坐标是(-90,90-ε) 黄极的时角坐标是(D-(-90),90-ε) = (D+90,90-ε) 黄极的正西起算的时角坐标是(90-(D+90),90-ε) = (-D,90-ε) 最后,把(-D,90-ε)代入黄道转赤道坐标的公式中,即得到黄极在地平坐标系中的坐标 tanα = ( sinλ*cosε - tanβ*sinε ) / cosλ sinδ = sinβ*cosε + cosβ*sinε*sinλ (把式中的λ用-D代入,β用90-ε代入即可。α为黄极的经度J,δ为黄极的纬度W)
所以: tan(J) = ( -sinD*cosε - tan(90-ε)*sin(ε) ) / cosD sin(W) = cosε*cosε - sinε*sinε*sinD
化简得最后公式: J = atan2( -cosε(1+sinD), cosD) W = asin( 1 - sin 平方ε(1+sinD) ) 这就得到了黄极的坐标(J,W) 注意,这个坐标是从正西起算(北球正西点:沿赤道逆时针(即顺行),经过该点,高度角由负变正,是个升交点) 的。
当(J,W)计算出来以后,升降交点就可求得(J+-90度,0),黄道面与地平面的夹角为90-W
你认真计算一下,也许我算错了。你要作图计算!!!!把地球画正立(赤道),北极在上。
|
-- 作者:xjw01
-- 发布时间:2010/3/6 10:01:00
--
以下是引用buffettlamb在2010-3-6 1:39:00的发言: 谢谢许老师,我对星历很感兴趣,很感谢您的指导,可我的天文知识太少太少了,正在努力学习中,刚知道了啥叫黄极。 能看懂您的,但不会继续推下去。
东方地平线交于黄道的那个点就叫上升点,我想知道它在黄道的经度。
是不是您程序sunShengJ(jd-dt_T(jd)+L/pi2,L,fa,-1) 中的VAR a就是我要的结果?
sunShengJ(jd-dt_T(jd)+L/pi2,L,fa,-1) 是用来求日出日没时间的。
var a我怎么没有找到。当时给出这个程序时,好象有给出算法的描述。
|
-- 作者:buffettlamb
-- 发布时间:2010/3/6 12:29:00
--
太感谢许老师了!
上面那段里有VAR A,但看不清,弄张图片上来,看得清楚些。这段代码在EPH0.JS里。
此主题相关图片如下:vara.jpg
|
-- 作者:buffettlamb
-- 发布时间:2010/3/7 2:57:00
--
许老师,您好。我在您的代码上修改了下: function sunShengD(jd2,L,fa){ //上升点计算。jd2儒略日(L当地平午UT),L地理经度,fa地理纬度 var i; var now=new Date(); var jd=jd2 - J2000; jd += now.getTimezoneOffset()/60/24+dt_T(jd); //转为力学时; //求星历 var T=jd/36525, E=(84381.4060 -46.836769*T)/rad; //黄赤交角 var gst =pGST2(jd); //恒星时 var D=gst+L; var AA = atan2( -1*cos(E)*(1+sin(D)),cos(D))+90/radd; return AA; }
计算sunShengD(jd2,L,fa) // L = 121.46/radd, fa = 31.23/radd 得到: 2010-03-08 12:00 53°46\'22.51"
和正确的上升点数值92°15\'不一样。不知我错在哪里?
[此贴子已经被作者于2010-3-7 16:07:27编辑过]
|
-- 作者:xjw01
-- 发布时间:2010/3/7 10:00:00
--
你的题目是“求助:如何求某时某地的东方地平线与黄道的交点?”
并不是求太阳运动,也不是求太阳升降。太阳升降问题:太阳在平行圈上运动,不是简单的在黄道上运动!
你现在求黄道与地平圈的交点。那只要给出黄道位置、地平圈位置,不就可以知道交点了。黄道位置用黄极描述,地平圈位置用天顶描述。在这个表述过程中,没用到“太阳”位置,苦苦计算太阳位置又作何用。
|