diff --git a/flockompass.kv b/flockompass.kv index 6c66aeb..7b7aa26 100644 --- a/flockompass.kv +++ b/flockompass.kv @@ -81,8 +81,8 @@ canvas.after: PopMatrix Image: - id: to_flock - source: 'needle_to_flock.png' + id: to_dest + source: 'needle_to_dest.png' canvas.before: PushMatrix Rotate: diff --git a/main.py b/main.py index 35b2bff..91ae13e 100644 --- a/main.py +++ b/main.py @@ -75,22 +75,9 @@ class FlockompassApp(App): self.ms.ids.mapview.center_on(self.session_data['dest_lat'], self.session_data['dest_lon']) else: - lat1 = self.gps_data['lat'] - lon1 = self.gps_data['lon'] - - lat2 = self.session_data['dest_lat'] - lon2 = self.session_data['dest_lon'] - - self.fbearing = atan2(sin(lon2 - lon1) * cos(lat2), - cos(lat1) * sin(lat2) - - sin(lat1) * cos(lat2) * cos(lon2-lon1)) - self.fbearing = self.needle_angle - degrees(self.fbearing) - self.fbearing = (self.fbearing + 360) % 360 - self.dest_distance = "D: %0.1f km" % geodesic( (self.gps_data['lat'], self.gps_data['lon']), (self.session_data['dest_lat'], self.session_data['dest_lon'])).kilometers - print(self.dest_distance) def center_map_on_gps(self): self.ms.ids.mapview.center_on(self.gps_data['lat'], @@ -106,7 +93,7 @@ class FlockompassApp(App): if self.cs.facade.field != (None, None, None): x, y, z = self.cs.facade.field - smoothingFactor = 0.5 + smoothingFactor = 0.88 angle = atan2(y, x) self.last_angle = smoothingFactor * self.last_angle + (1 - smoothingFactor) * angle @@ -124,8 +111,26 @@ class FlockompassApp(App): if self.cs._anim: self.cs._anim.stop(self) self.cs._anim = Animation(needle_angle=needle_angle, - d=0.2, + d=0.1, t='out_quad') + + lat1 = self.gps_data['lat'] + lon1 = self.gps_data['lon'] + + lat2 = self.session_data['dest_lat'] + lon2 = self.session_data['dest_lon'] + + fbearing = atan2(sin(lon2 - lon1) * cos(lat2), + cos(lat1) * sin(lat2) + - sin(lat1) * cos(lat2) * cos(lon2-lon1)) + fbearing = self.needle_angle - degrees(fbearing) + + fbearing = (fbearing + 360) % 360 + + self.cs._anim &= Animation(fbearing=fbearing, + d=0.1, + t='out_quad') + self.cs._anim.start(self) def compass_enable(self): @@ -170,7 +175,8 @@ class FlockompassApp(App): self.cs = CompassScreen(name='compass') self.cs._anim = None - self.cs.p = None + self.cs._anim1 = None + screen_manager.add_widget(self.cs) # smoothing vars for compass diff --git a/needle_to_flock.png b/needle_to_dest.png similarity index 100% rename from needle_to_flock.png rename to needle_to_dest.png diff --git a/dest_needle.svg b/needle_to_dest.svg similarity index 100% rename from dest_needle.svg rename to needle_to_dest.svg