aboutsummaryrefslogtreecommitdiffstats
path: root/src/solar_python.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/solar_python.py')
-rw-r--r--src/solar_python.py73
1 files changed, 41 insertions, 32 deletions
diff --git a/src/solar_python.py b/src/solar_python.py
index 2fa2d2d..e35c299 100644
--- a/src/solar_python.py
+++ b/src/solar_python.py
@@ -14,8 +14,6 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from math import *
-import time
SOLAR_APPARENT_RADIUS = 32 / 60
@@ -146,6 +144,7 @@ def epoch():
@return :float The current POSIX time
'''
+ import time
return time.time()
@@ -174,7 +173,8 @@ def radians(deg):
@param deg:float The angle in degrees
@return :float The angle in radians
'''
- return deg * pi / 180
+ import math
+ return deg * math.pi / 180
def degrees(rad):
@@ -184,7 +184,8 @@ def degrees(rad):
@param rad:float The angle in radians
@return :float The angle in degrees
'''
- return rad * 180 / pi
+ import math
+ return rad * 180 / math.pi
def sun_geometric_mean_longitude(t):
@@ -239,10 +240,11 @@ def sun_equation_of_centre(t):
@param t:float The time in Julian Centuries
@return :float The Sun's equation of the centre, in radians
'''
+ import math
a = sun_geometric_mean_anomaly(t)
- rc = sin(1 * a) * (-0.000014 * t ** 2 - 0.004817 * t + 1.914602)
- rc += sin(2 * a) * (-0.000101 * t + 0.019993)
- rc += sin(3 * a) * 0.000289
+ rc = math.sin(1 * a) * (-0.000014 * t ** 2 - 0.004817 * t + 1.914602)
+ rc += math.sin(2 * a) * (-0.000101 * t + 0.019993)
+ rc += math.sin(3 * a) * 0.000289
return radians(rc)
@@ -264,8 +266,9 @@ def sun_apparent_longitude(t):
@param t:float The time in Julian Centuries
@return :float The longitude, in radians
'''
+ import math
rc = degrees(sun_real_longitude(t)) - 0.00569
- rc -= 0.00478 * sin(radians(-1934.136 * t + 125.04))
+ rc -= 0.00478 * math.sin(radians(-1934.136 * t + 125.04))
return radians(rc)
@@ -291,8 +294,9 @@ def corrected_mean_ecliptic_obliquity(t):
@param t:float The time in Julian Centuries
@return :float The mean obliquity, in radians
'''
+ import math
rc = -1934.136 * t + 125.04
- rc = 0.00256 * cos(radians(rc))
+ rc = 0.00256 * math.cos(radians(rc))
rc += degrees(mean_ecliptic_obliquity(t))
return radians(rc)
@@ -304,9 +308,10 @@ def solar_declination(t):
@param t:float The time in Julian Centuries
@return :float The Sun's declination, in radians
'''
- rc = sin(corrected_mean_ecliptic_obliquity(t))
- rc *= sin(sun_apparent_longitude(t))
- return asin(rc)
+ import math
+ rc = math.sin(corrected_mean_ecliptic_obliquity(t))
+ rc *= math.sin(sun_apparent_longitude(t))
+ return math.asin(rc)
def equation_of_time(t):
@@ -317,15 +322,16 @@ def equation_of_time(t):
@param t:float The time in Julian Centuries
@return :float The equation of time, in degrees
'''
+ import math
l = sun_geometric_mean_longitude(t)
e = earth_orbit_eccentricity(t)
m = sun_geometric_mean_anomaly(t)
y = corrected_mean_ecliptic_obliquity(t)
- y = tan(y / 2) ** 2
- rc = y * sin(2 * l)
- rc += (4 * y * cos(2 * l) - 2) * e * sin(m)
- rc -= 0.5 * y ** 2 * sin(4 * l)
- rc -= 1.25 * e ** 2 * sin(2 * m)
+ y = math.tan(y / 2) ** 2
+ rc = y * math.sin(2 * l)
+ rc += (4 * y * math.cos(2 * l) - 2) * e * math.sin(m)
+ rc -= 0.5 * y ** 2 * math.sin(4 * l)
+ rc -= 1.25 * e ** 2 * math.sin(2 * m)
return 4 * degrees(rc)
@@ -339,12 +345,13 @@ def hour_angle_from_elevation(latitude, declination, elevation):
@param hour_angle:float The Sun's elevation, in degrees
@return :float The solar hour angle, in degrees
'''
+ import math
if elevation == 0:
return 0
- rc = cos(abs(elevation))
- rc -= sin(radians(latitude)) * sin(declination)
- rc /= cos(radians(latitude)) * cos(declination)
- rc = acos(rc)
+ rc = math.cos(abs(elevation))
+ rc -= math.sin(radians(latitude)) * math.sin(declination)
+ rc /= math.cos(radians(latitude)) * math.cos(declination)
+ rc = math.acos(rc)
return -rc if (rc < 0) == (elevation < 0) else rc;
@@ -358,10 +365,11 @@ def elevation_from_hour_angle(latitude, declination, hour_angle):
@param hour_angle:float The solar hour angle, in degrees
@return :float The Sun's elevation, in degrees
'''
- rc = cos(radians(latitude))
- rc *= cos(hour_angle) * cos(declination)
- rc += sin(radians(latitude)) * sin(declination)
- return asin(rc)
+ import math
+ rc = math.cos(radians(latitude))
+ rc *= math.cos(hour_angle) * math.cos(declination)
+ rc += math.sin(radians(latitude)) * math.sin(declination)
+ return math.asin(rc)
def time_of_solar_noon(t, longitude):
@@ -762,6 +770,7 @@ def past_elevation_derivative(latitude, longitude, derivative, t = None):
# TODO: This algorithm is imprecise, gives an incorrent sunrise and I do not fully know its behaviour
def sunrise_equation(latitude, longitude, t = None):
+ import math
# Calculate Julian Cycle
j_cent = julian_centuries() if t is None else t
j_date = julian_centuries_to_julian_day(j_cent)
@@ -780,17 +789,17 @@ def sunrise_equation(latitude, longitude, t = None):
ecliptic_longitude = (solar_mean_anomaly + 102.9372 + equation_of_centre + 180) % 360
# Calculate solar transit
- solar_transit = approx_solar_noon + 0.0053 * sin(solar_mean_anomaly)
- solar_transit -= 0.0069 * sin(2 * ecliptic_longitude)
+ solar_transit = approx_solar_noon + 0.0053 * math.sin(solar_mean_anomaly)
+ solar_transit -= 0.0069 * math.sin(2 * ecliptic_longitude)
# Calculate solar declination
- declination = asin(sin(ecliptic_longitude) * sin(radians(23.45)))
+ declination = math.asin(math.sin(ecliptic_longitude) * math.sin(radians(23.45)))
# Calculate solar hour angle
- hour_angle = sin(radians(-0.83))
- hour_angle -= sin(latitude) * sin(declination)
- hour_angle /= cos(latitude) * cos(declination)
- hour_angle = degrees(acos(hour_angle))
+ hour_angle = math.sin(radians(-0.83))
+ hour_angle -= math.sin(latitude) * math.sin(declination)
+ hour_angle /= math.cos(latitude) * math.cos(declination)
+ hour_angle = degrees(math.acos(hour_angle))
# Calculate time of sunset and sunrise
sunset = 2451545.0009 + (hour_angle + longitude) / 360