-static double sun_angle( const SGTime &t, sgVec3 world_up,
- double lon_rad, double lat_rad ) {
- sgVec3 nup, nsun;
- Point3D p, rel_sunpos;
+/* given a particular time expressed in side real time at prime
+ * meridian (GST), compute position on the earth (lat, lon) such that
+ * sun is directly overhead. (lat, lon are reported in radians */
+
+void fgSunPositionGST(double gst, double *lon, double *lat) {
+ /* time_t ssue; seconds since unix epoch */
+ /* double *lat; (return) latitude */
+ /* double *lon; (return) longitude */
+
+ double tmp;
+
+ SGPropertyNode* sun = fgGetNode("/ephemeris/sun");
+ assert(sun);
+ double xs = sun->getDoubleValue("xs");
+ //double ys = sun->getDoubleValue("ys");
+ double ye = sun->getDoubleValue("ye");
+ double ze = sun->getDoubleValue("ze");
+ double ra = atan2(ye, xs);
+ double dec = atan2(ze, sqrt(xs * xs + ye * ye));
+
+ tmp = ra - (SGD_2PI/24)*gst;
+
+ double signedPI = (tmp < 0.0) ? -SGD_PI : SGD_PI;
+ tmp = fmod(tmp+signedPI, SGD_2PI) - signedPI;
+
+ *lon = tmp;
+ *lat = dec;
+}