Skip to content
Snippets Groups Projects
Commit 260c1964 authored by Raphael Sturgis's avatar Raphael Sturgis
Browse files

testing angle operations

parent 90bbeaf7
No related branches found
No related tags found
2 merge requests!6Develop,!4Draft: Resolve "Angles calculated using compute_point_angles seem incorect"
This commit is part of merge request !4. Comments created here will be created in the context of that merge request.
...@@ -137,17 +137,26 @@ def compute_position_dist_std(dat, radius): ...@@ -137,17 +137,26 @@ def compute_position_dist_std(dat, radius):
return dist_means return dist_means
@jit(nopython=True)
def angle_between_three_points(p1, p2, p3):
alpha = bearing(p2, p1)
beta = bearing(p2, p3)
return alpha - beta
def compute_point_angles(dat): def compute_point_angles(dat):
angles = np.zeros(dat.shape[0]) angles = np.zeros(dat.shape[0])
p1 = (dat[0][0], dat[0][1])
p2 = (dat[1][0], dat[1][1])
angles[0] = bearing(p2, p1)
for i in range(1, dat.shape[0] - 1): for i in range(1, dat.shape[0] - 1):
p1 = (dat[i - 1][0], dat[i - 1][1]) p1 = (dat[i - 1][0], dat[i - 1][1])
p2 = (dat[i][0], dat[i][1]) p2 = (dat[i][0], dat[i][1])
p3 = (dat[i + 1][0], dat[i + 1][1]) p3 = (dat[i + 1][0], dat[i + 1][1])
alpha = bearing(p2, p1) angles[i] = angle_between_three_points(p1, p2, p3)
beta = bearing(p2, p3)
angles[i] = 180 - abs(abs(alpha - beta) - 180)
return angles return angles
...@@ -182,6 +191,7 @@ def angle_dispersion(dat, radius): ...@@ -182,6 +191,7 @@ def angle_dispersion(dat, radius):
return disp return disp
class AISTrajectory: class AISTrajectory:
def __init__(self, df, interpolation_time=None): def __init__(self, df, interpolation_time=None):
df = df.drop_duplicates(subset=['ts_sec']) df = df.drop_duplicates(subset=['ts_sec'])
......
...@@ -4,7 +4,8 @@ import unittest ...@@ -4,7 +4,8 @@ import unittest
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from skais.ais.ais_trajectory import AISTrajectory, compute_std, to_rad, bearing, to_deg, compute_point_angles from skais.ais.ais_trajectory import AISTrajectory, compute_std, to_rad, bearing, to_deg, compute_point_angles, \
angle_between_three_points
class TestAISTrajectory(unittest.TestCase): class TestAISTrajectory(unittest.TestCase):
...@@ -354,6 +355,35 @@ class TestAISTrajectory(unittest.TestCase): ...@@ -354,6 +355,35 @@ class TestAISTrajectory(unittest.TestCase):
self.assertAlmostEqual(result, expected) self.assertAlmostEqual(result, expected)
def test_angle_between_three_points_1(self):
p1 = (0, 0)
p2 = (0, 10)
p3 = (10, 10)
self.assertEqual(90, angle_between_three_points.py_func(p1, p2, p3))
def test_angle_between_three_points_2(self):
p1 = (0, 0)
p2 = (0, 10)
p3 = (-10, -10)
self.assertEqual(-90, angle_between_three_points.py_func(p1, p2, p3))
def test_angle_between_three_points_3(self):
p1 = (0, 0)
p2 = (0, 10)
p3 = (10, 20)
self.assertEqual(42.814167, angle_between_three_points.py_func(p1, p2, p3))
def test_angle_between_three_points_4(self):
p1 = (0, 0)
p2 = (00, 10)
p3 = (0, 0)
self.assertEqual(180, abs(angle_between_three_points.py_func(p1, p2, p3)))
# def test_compute_position_angle_std(self): # def test_compute_position_angle_std(self):
# dat = [(0, i * 10) for i in range(5)] + [(0, 50 - i * 10) for i in range(5)] # dat = [(0, i * 10) for i in range(5)] + [(0, 50 - i * 10) for i in range(5)]
# result = compute_position_angle_std(dat, 2) # result = compute_position_angle_std(dat, 2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment