From ab5a918f2c21e402f79370554c9b007c5d8b8853 Mon Sep 17 00:00:00 2001 From: rgarcia-herrera Date: Tue, 11 Aug 2020 00:27:57 -0500 Subject: [PATCH] flock bearing on compass --- flockompass.kv | 11 +++++++++++ main.py | 19 +++++++++++++++++-- needle_to_flock.png | Bin 0 -> 3913 bytes 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 needle_to_flock.png diff --git a/flockompass.kv b/flockompass.kv index 2bdca28..fbf016d 100644 --- a/flockompass.kv +++ b/flockompass.kv @@ -73,3 +73,14 @@ origin: self.center canvas.after: PopMatrix + Image: + id: to_flock + source: 'needle_to_flock.png' + canvas.before: + PushMatrix + Rotate: + angle: app.fbearing + axis: 0, 0, 1 + origin: self.center + canvas.after: + PopMatrix diff --git a/main.py b/main.py index f981d89..409d273 100644 --- a/main.py +++ b/main.py @@ -10,7 +10,7 @@ from kivy.uix.screenmanager import ScreenManager, Screen, RiseInTransition from kivy.vector import Vector from kivy.animation import Animation -from math import floor +from math import atan2, sin, cos, degrees, floor class MapScreen(Screen): @@ -26,6 +26,7 @@ class FlockompassApp(App): gps_data = DictProperty() session_data = DictProperty() needle_angle = NumericProperty(0) + fbearing = NumericProperty(0) def dump(self, dt): print(dt, self.gps_data, self.session_data) @@ -68,6 +69,18 @@ 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 def get_field(self, dt): needle_angle = 7 @@ -88,7 +101,9 @@ class FlockompassApp(App): # animate the needle if self.cs._anim: self.cs._anim.stop(self) - self.cs._anim = Animation(needle_angle=needle_angle, d=.2, t='out_quad') + self.cs._anim = Animation(needle_angle=needle_angle, + d=0.2, + t='out_quad') self.cs._anim.start(self) def compass_enable(self): diff --git a/needle_to_flock.png b/needle_to_flock.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6d47dc5928f9abe8e98ad097d19d2e31f50dd0 GIT binary patch literal 3913 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 Qr0@vURxdx#au2TX|91&KcK`qY literal 0 HcmV?d00001