def increase_section_granularity(self, section, best_polygon=None): p_inside = points_inside(self.data, polygon_to_array(section)) if not all_points_have_same_position( p_inside) and have_points_of_both_classes(p_inside): new_edges = [] remove_edges = [] # Cut edges in two for edge in section: v_mid = Vertex(((edge.a.x + edge.b.x) / 2), ((edge.a.y + edge.b.y) / 2)) if v_mid not in self.vertices: self.vertices.append(v_mid) else: v_mid = next(v for v in self.vertices if v == v_mid) new_edges.extend([ Edge(edge.a, v_mid, edge.pheromone_strength), Edge(v_mid, edge.b, edge.pheromone_strength) ]) if best_polygon: if edge in best_polygon: best_polygon.remove(edge) best_polygon.extend(new_edges[-2:]) remove_edges.extend(section) connect_edges_to_vertices(new_edges) v_lower_left = section[0].a v_down = v_lower_left.connected_edges[DIRECTION['RIGHT']].b v_right = v_down.connected_edges[ DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']].b v_left = v_lower_left.connected_edges[DIRECTION['UP']].b v_up = v_left.connected_edges[DIRECTION['UP']].b.connected_edges[ DIRECTION['RIGHT']].b v_center = Vertex(v_down.x, v_left.y) new_edges.extend([ Edge(v_down, v_center, pheromone_strength=self.tau_initial), Edge(v_left, v_center, pheromone_strength=self.tau_initial), Edge(v_center, v_right, pheromone_strength=self.tau_initial), Edge(v_center, v_up, pheromone_strength=self.tau_initial) ]) self.vertices.append(v_center) connect_edges_to_vertices(new_edges) corners = [v_lower_left, v_down, v_left, v_center] subsections = [] for c in corners: subsections.append([ c.connected_edges[DIRECTION['RIGHT']], c.connected_edges[ DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']], c.connected_edges[DIRECTION['UP']].b.connected_edges[ DIRECTION['RIGHT']], c.connected_edges[DIRECTION['UP']] ]) return subsections, new_edges, remove_edges
def increase_section_granularity(self, section, best_polygon=None): p_inside = points_inside(self.data, polygon_to_array(section)) if not all_points_have_same_position(p_inside) and have_points_of_both_classes(p_inside): new_edges = [] remove_edges = [] # Cut edges in two for edge in section: v_mid = Vertex(((edge.a.x + edge.b.x) / 2), ((edge.a.y + edge.b.y) / 2)) if v_mid not in self.vertices: self.vertices.append(v_mid) else: v_mid = next(v for v in self.vertices if v == v_mid) new_edges.extend([Edge(edge.a, v_mid, edge.pheromone_strength), Edge(v_mid, edge.b, edge.pheromone_strength)]) if best_polygon: if edge in best_polygon: best_polygon.remove(edge) best_polygon.extend(new_edges[-2:]) remove_edges.extend(section) connect_edges_to_vertices(new_edges) v_lower_left = section[0].a v_down = v_lower_left.connected_edges[DIRECTION['RIGHT']].b v_right = v_down.connected_edges[DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']].b v_left = v_lower_left.connected_edges[DIRECTION['UP']].b v_up = v_left.connected_edges[DIRECTION['UP']].b.connected_edges[DIRECTION['RIGHT']].b v_center = Vertex(v_down.x, v_left.y) new_edges.extend([Edge(v_down, v_center, pheromone_strength=self.tau_initial), Edge(v_left, v_center, pheromone_strength=self.tau_initial), Edge(v_center, v_right, pheromone_strength=self.tau_initial), Edge(v_center, v_up, pheromone_strength=self.tau_initial)]) self.vertices.append(v_center) connect_edges_to_vertices(new_edges) corners = [v_lower_left, v_down, v_left, v_center] subsections = [] for c in corners: subsections.append([ c.connected_edges[DIRECTION['RIGHT']], c.connected_edges[DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']], c.connected_edges[DIRECTION['UP']].b.connected_edges[DIRECTION['RIGHT']], c.connected_edges[DIRECTION['UP']] ]) return subsections, new_edges, remove_edges
def test_returns_list_with_two_elements(self): points = np.array([[0.5, 0.5, 1], [1.0, 2.0, 0], [.7, .7, 1]]) result = rc.points_inside(points, self.edges) self.assertEqual(result.shape, (2, 3))
def test_returns_list(self): points = np.array([[0.5, 0.5, 1], [1.0, 2.0, 0], [.7, .7, 1]]) result = rc.points_inside(points, self.edges) self.assertEqual(type(result), np.ndarray)