Ejemplo n.º 1
0
def draw_triang(pt1, pt2, pt3):
    seg1 = segment.Segment(pt1, pt2)
    seg2 = segment.Segment(pt1, pt3)
    seg3 = segment.Segment(pt2, pt3)
    seg1.hilight("yellow")
    seg2.hilight("yellow")
    seg3.hilight("yellow")
    control.sleep()
    seg1.unhilight()
    seg2.unhilight()
    seg3.unhilight()
Ejemplo n.º 2
0
    def __hilightAdjacentEdges(self, adjacentEdges):
        u = self.dcel.originVertex(adjacentEdges[1])
        v = self.dcel.endVertex(adjacentEdges[1])
        w = self.dcel.endVertex(adjacentEdges[0])

        segOne = segment.Segment(u.coordinates, v.coordinates)
        segTwo = segment.Segment(u.coordinates, w.coordinates)
        segOne.hilight(color_line="green", color_point="green")
        segTwo.hilight(color_line="green", color_point="green")

        return [segOne, segTwo]
Ejemplo n.º 3
0
 def build_ans(self):
     '''
     constroi o segmento de resposta
     '''
     closest = segment.Segment(self.best[0][0], self.best[0][1])
     closest.extra_info = 'Menor distancia: %.4f' % self.best[0][2]
     return closest
Ejemplo n.º 4
0
    def partitionatePoly(self):
        for diagonal in self.diagonalQueue:
            u = self.dcel.originVertex(diagonal[0]).coordinates
            v = self.dcel.endVertex(diagonal[0]).coordinates
            seg = segment.Segment(u, v)
            seg.hilight(color_line="cyan", color_point="cyan")

            if not self.essentialEdge(diagonal[0]):
                self.dcel.removeHalfEdge(diagonal[0])
                control.plot_delete(diagonal[1])

            control.sleep()
            seg.unhilight()
def Divide_conquer(pts):

    # ordenando os pontos recebidos, O(nlogn) (leia mais no relatorio)
    pts = sorted(pts, key=cmp_to_key(compare_x))

    # melhor par encontrado ate agora, distancia entre eles e
    # id's da parte grafica
    best = [[None, None, float('inf')], [None, None, None]]

    distancia_rec_sh(pts, 0, len(pts), best)

    if best[0][2] == float('inf'):
        return

    ret = segment.Segment(best[0][0], best[0][1])
    ret.extra_info = 'Menor distancia: %.4f' %best[0][2]
    return ret
Ejemplo n.º 6
0
 def buildSegmentFromEdge(self, edge):
     return segment.Segment(edge[0].coordinates, edge[1].coordinates)
Ejemplo n.º 7
0
def treat_event(p, Q, T):
    ''' Recebe o ponto evento e o trata conforme seu tipo: extremo esquerdo,
    extremo direito e ponto de intersecção. 
    '''
    event = p[1]
    point = p[0]

    print(event, end="\n\n")
    print("ANTES")
    # print(dic)
    for seg in T:
        print(f"key: {T.key(seg)}, value: {seg}")

    linea = 0
    point.hilight("green")
    if event.t == "left":
        s = event.s
        T.add((s, s))
        linea = control.plot_vert_line(s.lower.x, "cyan")
        control.sleep()
        control.update()
        try:
            prev_index = T.bisect_left((s, s))
            prev_index -= 1
            if prev_index >= 0:
                pred = T[prev_index][1]
                print("PRED: ", pred)
                if s.intersects(pred):
                    print("INTERSECTA!!!!")
                    verify_new_event(point, Q, s, pred)
        except IndexError:
            pass
        try:
            next_index = T.bisect_right(s)
            if next_index <= len(T):
                succ = T[next_index][1]
                print("SUCC: ", succ)
                if s.intersects(succ):
                    verify_new_event(point, Q, s, succ)
        except IndexError:
            pass

    if event.t == "right":
        s = dic[event.s]
        segmnt = s[1]
        linea = control.plot_vert_line(segmnt.upper.x, "cyan")
        control.sleep()
        control.update()
        try:
            print(s)
            prev_index = T.bisect_left(s)
            next_index = T.bisect_right(s)
            prev_index -= 1
            if prev_index >= 0 and next_index <= len(T):
                pred = T[prev_index][1]
                succ = T[next_index][1]
                print("PRED: ", pred)
                print("SUCC: ", succ)
                T.pop(T.index(s))
                if pred.intersects(succ):
                    verify_new_event(point, Q, succ, pred)
        except IndexError:
            T.pop(T.index(s))

    if event.t == "inter":
        s1 = event.s1
        s2 = event.s2
        if right(s2.lower, s2.upper, s1.lower):
            s1, s2 = s2, s1
        rs1 = dic[s1]
        rs2 = dic[s2]

        intersection = intersection_point(s1, s2)
        intersections.append(intersection)
        intersections[len(intersections) - 1].hilight("yellow")
        print(len(intersections))
        linea = control.plot_vert_line(intersection.x, "cyan")
        control.sleep()
        control.update()
        try:
            prev_index = T.bisect_left(rs1)
            prev_index -= 1
            if prev_index < 0:
                pred = None
            if rs1 == T[prev_index]:
                prev_index -= 1
            elif prev_index >= 0:
                pred = T[prev_index][1]
                print("PRED: ", pred)
        except IndexError:
            pred = None
        try:
            next_index = T.bisect_right(rs2)
            if next_index >= len(T):
                succ = None
            if rs2 == T[next_index]:
                next_index += 1
            elif next_index < len(T):
                succ = T[next_index][1]
                print("SUCC: ", succ)
        except IndexError:
            succ = None
        print("s1: ", s1, " rs1: ", rs1)
        print("s2: ", s2, " rs2: ", rs2, "\n")
        T.pop(T.index(rs1))
        T.pop(T.index(rs2))
        # Insere ao contrário
        new_s1 = segment.Segment(intersection, s1.upper)
        new_s2 = segment.Segment(intersection, s2.upper)
        print(f"new_s1: {new_s1}, new_s2:{new_s2}")
        T.add((new_s2, s2))
        T.add((new_s1, s1))
        dic[s1] = (new_s1, s1)
        dic[s2] = (new_s2, s2)

        if pred != None and pred.intersects(s2):
            verify_new_event(point, Q, pred, s2, intersection)
        if succ != None and s1.intersects(succ):
            verify_new_event(point, Q, s1, succ, intersection)

    control.plot_delete(linea)
    control.sleep()
    control.update()
    point.unhilight()

    print("DEPOIS")
    for seg in T:
        print("key: ", str(seg))
    print("")