Ejemplo n.º 1
0
def particione (P, l, r):

    # P[l + 1] recebe ponto extremo
    for i in range(l + 1, r):
        P[i].lineto(P[l], "gray")
        P[i].lineto(P[r], "gray")
        sleep()
        P[i].remove_lineto(P[l])
        P[i].remove_lineto(P[r])
        if abs(area2(P[i], P[l], P[r])) > abs(area2(P[l + 1], P[l], P[r])):
            P[i], P[l + 1] = P[l + 1], P[i]

    # Desenha o triangulo
    if hasattr(P[l + 1], 'hi'): P[l + 1].unhilight()
    P[l + 1].hilight("firebrick")
    linha_esq = P[l].lineto(P[l + 1], "green")
    linha_dir = P[r].lineto(P[l + 1], "red")
    sleep()
    
    p = q = r
    for k in range(r - 1, l + 1, -1):
        if hasattr(P[k], 'hi'): P[k].unhilight()
        P[k].hilight("yellow")
        sleep()
        P[k].unhilight()
        if left (P[l], P[l + 1], P[k]):
            # ponto da partição esquerda (verde)
            p -= 1
            P[p], P[k] = P[k], P[p]
            P[p].hilight("green")
            sleep()
        elif right (P[r], P[l + 1], P[k]):
            # ponto da partição direita (vermelho)
            p -= 1
            q -= 1
            P[q], P[k] = P[k], P[q]
            if p != q: P[p], P[k] = P[k], P[p]
            P[q].hilight("red")
            sleep()
    
    # Ajustes finais no vetor
    p -= 1
    q -= 1
    P[q], P[l + 1] = P[l + 1], P[q]
    if p != q:
        P[p], P[l + 1] = P[l + 1], P[p]
    p -= 1
    P[l], P[p] = P[p], P[l]

    return p, q, linha_esq, linha_dir
Ejemplo n.º 2
0
def extreme_point(points, start, end):
    area = -1.0
    ind = -1
    for i in range(start + 1, end):
        n_area = prim.area2(points[start], points[end], points[i])
        if area < n_area:
            ind = i
            area = n_area
    return ind
Ejemplo n.º 3
0
 def __gt__ (self, other):
     ref = other.ref
     # Se o ponto de referencia é uma interseção, 
     if abs(area2 (self.seg.init, self.seg.to, ref)) < eps:
         # O ponto de referência vai ser o ponto da direita
         ref = other.seg.to
     
     # Self > other <=> other está a esquerda do self
     return left (self.seg.init, self.seg.to, ref)
Ejemplo n.º 4
0
def area2 (a, b, c):
	"retorna duas vezes a area do triangulo abc"
	ret = prim.area2 (a, b, c)
	triang (a, b, c)
	return ret
Ejemplo n.º 5
0
def area2(a, b, c):
    "retorna duas vezes a area do triangulo abc"
    ret = prim.area2(a, b, c)
    triang(a, b, c)
    return ret
Ejemplo n.º 6
0
def area(a, b, c):
    '''Devolve a área do triângulo cujos extremos são os pontos a, b, c.'''
    return abs(area2(a, b, c) / 2.0)