09.05.2017, 12:22
(14.12.2015, 08:07)admin Wrote: This function should work, though it was not tested much:Hi
Code:-- solar altitude, azimuth (degrees) function sunposition(latitude, longitude, time) time = time or os.time() if type(time) == 'table' then time = os.time(time) end local date = os.date('*t', time) local timezone = (os.time(date) - os.time(os.date('!*t', time))) / 3600 if date.isdst then timezone = timezone + 1 end local utcdate = os.date('*t', time - timezone * 3600) local latrad = math.rad(latitude) local fd = (utcdate.hour + utcdate.min / 60 + utcdate.sec / 3600) / 24 local g = (2 * math.pi / 365.25) * (utcdate.yday + fd) local d = math.rad(0.396372 - 22.91327 * math.cos(g) + 4.02543 * math.sin(g) - 0.387205 * math.cos(2 * g) + 0.051967 * math.sin(2 * g) - 0.154527 * math.cos(3 * g) + 0.084798 * math.sin(3 * g)) local t = math.rad(0.004297 + 0.107029 * math.cos(g) - 1.837877 * math.sin(g) - 0.837378 * math.cos(2 * g) - 2.340475 * math.sin(2 * g)) local sha = 2 * math.pi * (fd - 0.5) + t + math.rad(longitude) local sza = math.acos(math.sin(latrad) * math.sin(d) + math.cos(latrad) * math.cos(d) * math.cos(sha)) local saa = math.acos((math.sin(d) - math.sin(latrad) * math.cos(sza)) / (math.cos(latrad) * math.sin(sza))) return 90 - math.deg(sza), math.deg(saa) end
I used this today. What I see is that when the azimuth get to 180, it starts counting down rather than going on to the full 360... Any ideas why?
There are 10 kinds of people in the world; those who can read binary and those who don't