From b71eb244af8c489dac9f5cb3acbae9124a04d579 Mon Sep 17 00:00:00 2001 From: GotPPay Date: Mon, 25 Dec 2017 22:24:24 +0100 Subject: [PATCH] angle calculation fix ; created tests --- helix/presenters/panel_presenter.py | 12 ++++-- test/helpers/panel_presenter_test.py | 60 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/helix/presenters/panel_presenter.py b/helix/presenters/panel_presenter.py index d14e5be..cb493ad 100644 --- a/helix/presenters/panel_presenter.py +++ b/helix/presenters/panel_presenter.py @@ -87,14 +87,17 @@ class ProjectPresenter(object): corner_length_ccw = sqrt((next_corner[0] - corner[0])**2 + (next_corner[1] - corner[1])**2) corner_length_cw = sqrt((previous_corner[0] - corner[0])**2 + (previous_corner[1] - corner[1])**2) - k1 = (corner[1] - previous_corner[1]) / (corner[0] - previous_corner[0]) - k2 = (next_corner[1] - corner[1]) / (next_corner[0] - corner[0]) + + k1 = float('Inf') if (corner[0]==previous_corner[0]) else (corner[1] - previous_corner[1]) / (corner[0] - previous_corner[0]) + k2 = float('Inf') if (corner[0]==next_corner[0]) else (next_corner[1] - corner[1]) / (next_corner[0] - corner[0]) + theta2 = degrees(atan(k2)) theta1 = degrees(atan(k1)) - theta2 + if (theta1 < 0): if (k1 < 0 and k2 < 0): theta1 = 360 + theta1 - elif (k1 < 0 and k2 > 0): + elif (k1 <= 0 and k2 >= 0): theta1 = 180 + theta1 else: if (k1 > 0 and k2 > 0): @@ -102,8 +105,9 @@ class ProjectPresenter(object): if (theta1 < 135): presentable_building.append(Corner(corner[0], corner[1], corner_length_ccw,corner_length_cw, theta1).__dict__) + previous_corner = corner - + return result diff --git a/test/helpers/panel_presenter_test.py b/test/helpers/panel_presenter_test.py index fe565df..3561f68 100644 --- a/test/helpers/panel_presenter_test.py +++ b/test/helpers/panel_presenter_test.py @@ -76,6 +76,66 @@ class PanelPresenterTest(unittest.TestCase): actual_buildings = self.subject.get_buildings(buildings,60) assert_array_equal(actual_buildings,expected_buildings) + def test_get_corners_box_building(self): + self.subject = ProjectPresenter(SystemType.singleTilt, ModuleType.Cell96) + buildings = [ [ [0, 0], [60, 0], [60,60], [0, 60] ] ] # big square + expected_corners = [[ + {'x': 0, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 60, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 60, 'y': 60, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 0, 'y': 60, 'length_cw': 60, 'length_ccw':60, 'angle':90} + ]] + actual_corners = self.subject.get_corners(buildings) + assert_array_equal(actual_corners,expected_corners) + + def test_get_corners_box_building_rotated_30_degrees(self): + self.subject = ProjectPresenter(SystemType.singleTilt, ModuleType.Cell96) + buildings = [ [ [0, 0], [51.96, 30], [21.96, 81.96], [-30, 51.96] ] ] # big square + expected_corners = [[ + {'x': 0, 'y': 0, 'length_cw': 59.99867998547968, 'length_ccw':59.99867998547968, 'angle':90}, + {'x': 51.96, 'y': 30, 'length_cw': 59.99867998547968, 'length_ccw':59.998679985479676, 'angle':90}, + {'x': 21.96, 'y': 81.96, 'length_cw': 59.998679985479676, 'length_ccw':59.998679985479676, 'angle':90}, + {'x': -30, 'y': 51.96, 'length_cw': 59.998679985479676, 'length_ccw':59.99867998547968, 'angle':90} + ]] + actual_corners = self.subject.get_corners(buildings) + assert_array_equal(actual_corners,expected_corners) + + def test_get_corners_box_building_rotated_90_degrees(self): + self.subject = ProjectPresenter(SystemType.singleTilt, ModuleType.Cell96) + buildings = [ [ [0, 0], [0, 60], [-60,60], [-60, 0] ] ] # big square + expected_corners = [[ + {'x': 0, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 0, 'y': 60, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': -60, 'y': 60, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': -60, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90} + ]] + actual_corners = self.subject.get_corners(buildings) + assert_array_equal(actual_corners,expected_corners) + + def test_get_corners_box_building_rotated_180_degrees(self): + self.subject = ProjectPresenter(SystemType.singleTilt, ModuleType.Cell96) + buildings = [ [ [0, 0], [-60, 0], [-60,-60], [0, -60] ] ] # big square + expected_corners = [[ + {'x': 0, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': -60, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': -60, 'y': -60, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 0, 'y': -60, 'length_cw': 60, 'length_ccw':60, 'angle':90} + ]] + actual_corners = self.subject.get_corners(buildings) + assert_array_equal(actual_corners,expected_corners) + + def test_get_corners_box_building_rotated_270_degrees(self): + self.subject = ProjectPresenter(SystemType.singleTilt, ModuleType.Cell96) + buildings = [ [ [0, 0], [0, -60], [60,-60], [60, 0] ] ] # big square + expected_corners = [[ + {'x': 0, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 0, 'y': -60, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 60, 'y': -60, 'length_cw': 60, 'length_ccw':60, 'angle':90}, + {'x': 60, 'y': 0, 'length_cw': 60, 'length_ccw':60, 'angle':90} + ]] + actual_corners = self.subject.get_corners(buildings) + assert_array_equal(actual_corners,expected_corners) + def test_get_max_y(self): self.subject = ProjectPresenter(SystemType.singleTilt, ModuleType.Cell96) panels = [