def classify_point(point, previous_point, next_point): orientation = orient(previous_point, point, next_point) if is_below(point, previous_point, next_point): if orientation > 0: return ENDING else: return CONNECTING elif is_above(point, previous_point, next_point): if orientation > 0: return STARTING else: return DIVIDING else: return CORRECT
def find_init_segment(self): if not self.segments: return None init_segment = self.segments[0] for segment in self.segments[1:]: if segment.max_y() < init_segment.max_y(): continue init_x, init_y = init_segment.max_point() seg_mx, seg_my = segment.max_point() if seg_my > init_y: init_segment = segment elif seg_my == init_y: if orient(segment.max_point(), segment.min_point(), init_segment.min_point()) > 0: init_segment = segment return init_segment
def belongs_to_polygon(triangle, chain): point1, point2, point3 = triangle.point1, triangle.point2, triangle.point3 orientation = orient(point1, point2, point3) return (chain == LEFT and orientation > 0) or (chain == RIGHT and orientation < 0)