Mercurial > atc
changeset 20:51e09ccbfd4e
Fixed that evil heading bug
committer: Jeff Sipek <jeffpc@jeff.(none)> 1121307898 -0400
author | Jeff Sipek <jeffpc@jeff.(none)> |
---|---|
date | Thu, 14 Jul 2005 02:24:58 -0400 |
parents | ed6ca4ee664c |
children | 4c026c5634f9 |
files | atc_plane.py |
diffstat | 1 files changed, 26 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/atc_plane.py Sat Jul 09 03:44:01 2005 -0400 +++ b/atc_plane.py Thu Jul 14 02:24:58 2005 -0400 @@ -107,9 +107,8 @@ def complete_vel(self, ijk=None, hac=None): """ Recalculate all the velocity variables """ if ijk == None and hac == None: - print "Nothing calculated" return - + if ijk == None: self.vel["i"] = sin(atc_utils.torad(self.vel["heading"])) * sqrt(self.vel["speed"]**2 - self.vel["climb"]**2) self.vel["j"] = cos(atc_utils.torad(self.vel["heading"])) * sqrt(self.vel["speed"]**2 - self.vel["climb"]**2) @@ -133,10 +132,10 @@ # FIXME: need physics if (self.targetPos["Z"] != None) and (self.pos["Z"] >= (self.targetPos["Z"] - 25)) and (self.pos["Z"] <= (self.targetPos["Z"] + 25)): - self.vel["k"] = 0 + self.vel["climb"] = 0 self.targetPos["Z"] = None - self.complete_vel(ijk=1) + self.complete_vel(hac=1) #if (self.pos["X"] < 0) or (self.pos["Y"] < 0): # FIXME: max values # self.status = plane_RANGE @@ -151,20 +150,32 @@ self.rect.move(m2pix(self.vel["i"])/10.0,m2pix(self.vel["j"])/10.0) self.timer = time.time() + m2pix(self.vel["speed"])**-1/10.0 - + def calc_head(self): - """ Calculate heading of the airplane (in radians)""" + """ Calculate heading of the airplane (in degrees)""" if (self.vel["i"] == self.vel["j"] == 0): # no movement return 0 - + try: - head = fabs(atan(self.vel["i"]/-self.vel["j"])) + head = fabs(atan(self.vel["i"]/self.vel["j"])) # yes this is "backwards" except ZeroDivisionError: if (self.vel["i"]>0): - return 90 # east - return 270 # west + return 90 # east + return 270 # west - return head*180.0/pi + head = abs(head*180/pi) + if self.vel["i"]>0 and self.vel["j"]>0: # quad I + return head + if self.vel["i"]<0 and self.vel["j"]>0: # quad II + return 360-head + if self.vel["i"]<0 and self.vel["j"]<0: # quad III + return 270-head + if self.vel["i"]>0 and self.vel["j"]<0: # quad IV + return 180-head + + if self.vel["i"]==0 and self.vel["j"]>0: # north + return 0 + return 180 # south def calc_geo(self, xy, prefix): """ Return a geographic coodrinate-formated xy """ @@ -189,10 +200,10 @@ if (parts[0] == "ALT"): print "Changing altitude to " + parts[1] + "m" self.targetPos["Z"] = int(parts[1]) - self.vel["k"] = self.specs["climb_normal"] + self.vel["climb"] = self.specs["climb_normal"] if (self.pos["Z"] > self.targetPos["Z"]): - self.vel["k"] *= -1 - self.complete_vel(ijk=1) + self.vel["climb"] *= -1 + self.complete_vel(hac=1) if (parts[0] == "HEAD"): self.vel["heading"] = int(parts[1]) @@ -212,7 +223,7 @@ def display(self,screen): """ Put everything onto the screen """ - rotimage = pygame.transform.rotate(self.image, 360-self.vel["heading"]) + rotimage = pygame.transform.rotate(self.image, 360.0-self.vel["heading"]) screen.blit(rotimage, (int(1024/2+m2pix(self.pos["X"])), int(768/2-m2pix(self.pos["Y"])))) # Plane info