diff --git a/aman/sys/WeatherModel.py b/aman/sys/WeatherModel.py index 6114507..6e7736e 100644 --- a/aman/sys/WeatherModel.py +++ b/aman/sys/WeatherModel.py @@ -132,11 +132,10 @@ class WeatherModel: else: self.LastWeatherUpdate = None - def calculateGS(self, altitude : int, ias : int, heading : int): + def interpolateWindData(self, altitude : int): self.updateWindModel() - tas = self.calculateTAS(altitude, ias) - # initialize the wind data + # initialized the wind data if None != self.WindDirectionModel and None != self.WindSpeedModel: direction = 0.0 speed = 0.0 @@ -151,5 +150,32 @@ class WeatherModel: speed = 0 direction = 0 - # calculate the ground speed based on the headwind component + return speed, direction + + def calculateGS(self, altitude : int, ias : int, heading : int): + speed, direction = self.interpolateWindData(altitude) + tas = self.calculateTAS(altitude, ias) return tas + speed * math.cos(math.radians(direction) - math.radians(heading)) + + def convertGSToTAS(self, altitude : int, gs : int, heading : int): + speed, direction = self.interpolateWindData(altitude) + return gs - speed * math.cos(math.radians(direction) - math.radians(heading)) + + def estimateCourse(self, altitude : int, gs : int, heading : int): + tas = self.convertGSToTAS(altitude, gs, heading) + speed, direction = self.interpolateWindData(altitude) + + aca = heading - direction + wca = speed * aca / tas + + if 0 <= aca: + course = heading + wca + else: + course = heading - wca + + while 0 > course: + course += 360 + while 360 < course: + course -= 360 + + return course