1

我正在尝试实现天文历书对太阳位置的近似。

我的代码如下所示:

var now := OS.get_datetime()
var lat := deg2rad(player_latlon.x)
var lon := deg2rad(player_latlon.y)

### Astronomical Almanac, https://en.wikipedia.org/wiki/Position_of_the_Sun
# days since J2000.0
var n := Utils.get_julian_from_unix(OS.get_unix_time()) - 2451545.0
# mean longitude of sun
var L := fmod( deg2rad(280.46) + deg2rad(0.9856474)*n, 2*PI)
# mean anomaly of sun
var g := fmod( deg2rad(357.528) + deg2rad(0.9856003)*n, 2*PI)

### conversions, same page
# ecliptic longitude
var eclon := L + deg2rad(1.915)*sin(g) + deg2rad(0.020)*sin(2*g)
# ecliptic latitude (always < 0.00033deg)
var eclat := 0

### conversions, https://en.wikipedia.org/wiki/Celestial_coordinate_system
# obliquity of the ecliptic
var obl := deg2rad(23.4)
# equatorial right ascension
var eqra := atan( ( sin(eclon)*cos(obl) - tan(eclat)*sin(obl) )/cos(eclon) )
# equatorial declination
var eqde := asin( sin(eclat)*cos(obl) + cos(eclat)*sin(eclon)*sin(obl) )
# hour angle (assumes `now` in local sidereal time)
var eqha := deg2rad((now.hour as int) + (now.minute as int)) - eqra
# horizontal azimuth
var haz := atan( sin(eqha) / ( cos(eqha)*sin(lat) - tan(eqde)*cos(lat) ) )
# horizontal altitude
var hal := asin( sin(lat)*sin(eqde) + cos(lat)*cos(eqde)*cos(eqha) )

var sun_latlon := Vector2(rad2deg(hal),rad2deg(haz))

现实说靠近我所在的地方,结果应该是这样的:在此处输入图像描述

(azim,elev) == (292.7,6.09)在那张照片中,我希望我的代码(至少大约)返回sun_latlon

但是使用与输入完全相同的数据,我得到了这个:

sun_latlon: (3.291654, -63.823071)

这显然是不对的,但我已经连续几天检查了每一行,这对我来说都是正确的。

4

0 回答 0