Пример #1
0
    def add_triangulo(self, v1, v2, v3):
        a1 = Arista(v1, v2)
        a2 = Arista(v2, v3)
        a3 = Arista(v3, v1)

        self.triangulacion.agregar_arista(a1)
        self.triangulacion.agregar_arista(a2)
        self.triangulacion.agregar_arista(a3)
Пример #2
0
 def removeV(self, v):
     siguiente = self.siguiente(v)
     anterior = self.anterior(v)
     self.vertices.remove(v)
     #if self.orientacion == 1:
     self.aristas.remove(Arista(v, siguiente))
     self.aristas.remove(Arista(anterior, v))
     self.aristas.append(Arista(anterior, siguiente))
Пример #3
0
    def getVConvexo(self):
        '''Determina un vertice convexo en P, un vertice convexo es aquel cuyo angulo interior es menor o igual a 180 grados'''

        for v in self.vertices:
            u = self.siguiente(v)
            w = self.anterior(v)
            a = Arista(w, v)
            if a.lado_p_arista(u) == 'der':
                return v

        return False
Пример #4
0
	def addVertice_XY(self, x1, y1):
		'''agrega un vertice nuevo, a partir de sus coordenadas x, y, a la lista de vertices del poligono'''
		v = Punto(x1, y1)
		if self.checaInterseccion(v):
			return False
		else:		
			if self.esVacio():
				self.vertices = self.vertices + [Punto(x1, y1)]
			elif self.cierraPoligono(v):
				self.aristas = self.aristas + [Arista(self.vertices[-1], self.vertices[0])]
			else:	
				self.aristas = self.aristas + [Arista(self.vertices[-1], Punto(x1, y1))]
				self.vertices = self.vertices + [Punto(x1, y1)]
			return True
Пример #5
0
 def cerrar(self):
     '''Cierra el poligono uniendo el primer y el ultimo vertice'''
     self.aristas = self.aristas + [
         Arista(self.vertices[-1], self.vertices[0])
     ]
     self.cerrado = True
     self.calculaOrientacion()
Пример #6
0
 def addV(self, v):
     '''Inserta un vertice en el poligono sin hacer ninguna verificacion'''
     if self.esVacio():
         self.vertices = self.vertices + [v]
     else:
         self.aristas = self.aristas + [Arista(self.vertices[-1], v)]
         self.vertices = self.vertices + [v]
Пример #7
0
 def addConexion(self,nodo1,nodo2,distancia=0,edad=0):
     if nodo1 in [i[0] for i in nodo2.vecinos] or nodo1==nodo2:
         #print ("Denegado: ",nodo1.id,nodo2.id)
         return 
     arista=Arista(nodo1,nodo2,edad,distancia)
     nodo1.vecinos.append((nodo2,arista))
     nodo2.vecinos.append((nodo1,arista))
     self.aristas.append(arista)
Пример #8
0
 def ubica_pto_inicio(self, recta_dir, lista):
     ''' '''
     # se crea una arista con los puntos que definen a recta_dir para utilizar el metodo lado_p_a_arista
     a = Arista(recta_dir.a, recta_dir.b)
     derecha = False
     re_ordenados = []
     i = 0
     for p in lista:
         if (a.lado_p_a_arista(p) == 'izq' and derecha):
             re_ordenados = lista[i:] + re_ordenados
             return re_ordenados
         else:
             if (a.lado_p_a_arista(p) == 'der'):
                 derecha = True
             re_ordenados.append(p)
         i += 1
     return re_ordenados
Пример #9
0
 def checaInterseccion(self, v):
     '''checa si la nueva arista construida con el vertice v intersecta a las aristas ya definidas'''
     if self.esVacio():
         return False
     else:
         b = Arista(self.vertices[-1], v)
         for a in self.aristas:
             if a.intersecta(b):
                 print("interseccion")
                 return True
         return False
Пример #10
0
	def addVertice(self, v):
		'''agrega un vertice nuevo a la lista de vertices del poligono'''
		if self.checaInterseccion(v):
			return False
		else:
			if self.esVacio():
				self.vertices = self.vertices + [v]
			else:	
				self.aristas = self.aristas + [Arista(self.vertices[-1],v)]
				self.vertices = self.vertices + [v]
			return True
Пример #11
0
    def triangular(self):
        ordenados = self.ordena_puntos()
        self.add_triangulo(ordenados[0], ordenados[1], ordenados[2])
        visitados = [ordenados[0], ordenados[1], ordenados[2]]
        for i in range(len(ordenados) - 3):
            #print("--------------------------------------------")
            #print("punto: "+ordenados[i+3].toString())
            aristas_triang = self.triangulacion.get_aristas()
            for v in visitados:
                #print(self.triangulacion.toString())
                arista = Arista(ordenados[i + 3], v)
                interseccion = False
                for a in aristas_triang:
                    if arista.intersecta(a):
                        #print(arista.toString()+" y "+a.toString()+" se intersectan")
                        interseccion = True
                    else:
                        #print(arista.toString()+" y "+a.toString()+" no se intersectan")
                        continue
                if not (interseccion):
                    self.triangulacion.agregar_arista(arista)
            visitados.append(ordenados[i + 3])

        self.dcel_triangulacion.construir(self.triangulacion)
Пример #12
0
    def get_oreja(self, poligono):
        t = Poligono()
        vertices = poligono.getVertices()
        es_oreja = True
        for v in vertices:
            t.limpiaPoligono()
            print("-------------------------------------------------------")
            print("analizando el vertice " + v.toString())
            v_i = poligono.anterior(v)
            v_j = poligono.siguiente(v)
            t.addV(v)
            t.addV(v_i)
            t.addV(v_j)
            t.cerrar()
            #print("v: "+v.toString()+" v_i: "+v_i.toString()+" v_j: "+v_j.toString())
            s = Segmento(v_i, v)
            if poligono.getOrientacion() == 1:
                lado_interior = "der"
            else:
                lado_interior = "izq"

            if s.lado_p(v_j) == lado_interior or s.lado_p(v_j) == "col":
                continue
            else:
                v_restantes = vertices[:]
                v_restantes.remove(v)
                v_restantes.remove(v_i)
                v_restantes.remove(v_j)
                es_oreja = True
                for u in v_restantes:
                    print(t.isInterior(u))
                    if t.isInterior(u):
                        print("el punto " + u.toString() +
                              " esta en el interior interior del triangulo: " +
                              t.toString() + "   :(")
                        es_oreja = False

                if es_oreja:
                    return (t, Arista(v_i, v_j), v)
        return False
Пример #13
0
 def agregaarista(self, source, target):
     id = str(source) + " -- " + str(target)
     idx = id
     # Si no es dirigido comprobar que no existe la arista en ambos sentidos
     if not self.dirigido:
         idx = str(target) + " -- " + str(source)
     if self.existearista(id) == 1 or self.existearista(idx) == 1:
         # print(" ya existe arista " + id + " or " + idx)
         agregada = 0
     else:
         # Si no existe la arista, verificar que sí existen los nodos
         if self.existenodo(source) == 0 or self.existenodo(target) == 0:
             # print(" no existe el nodo " + str(source) + " o el nodo " + str(target))
             agregada = 0
         else:
             # Crear la arista y agregarla al conjunto de aristas del grafo
             nuevaarista = Arista(id, str(source), str(target))
             self.aristas.add(nuevaarista)
             agregada = 1
             # Incrementar el grado de los vértices de la arista
             self.incrementagradoalnodo(source)
             self.incrementagradoalnodo(target)
     # Devolver si la arista fue o no agregada
     return agregada
Пример #14
0
 def vm_connect(self):
     self.vm_handle = Arista(self.neigh_vm, None, self.test_args)
     self.vm_handle.connect()
Пример #15
0
class SadPath(object):
    def __init__(self, oper_type, vm_list, portchannel_ports, vm_dut_map,
                 test_args):
        self.oper_type = oper_type
        self.vm_list = vm_list
        self.portchannel_ports = portchannel_ports
        self.vm_dut_map = vm_dut_map
        self.test_args = test_args
        self.neigh_vm = None
        self.neigh_name = None
        self.vm_handle = None
        self.neigh_bgp = None
        self.dut_bgp = None
        self.log = []
        self.fails = dict()
        self.fails['dut'] = set()

    def cmd(self, cmds):
        process = subprocess.Popen(cmds,
                                   shell=False,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE)
        stdout, stderr = process.communicate()
        return_code = process.returncode

        return stdout, stderr, return_code

    def select_vm(self):
        self.vm_list.sort()
        # use the day of the month to select a VM from the list for the sad pass operation
        vm_index = datetime.datetime.now().day % len(self.vm_list)
        self.neigh_vm = self.vm_list.pop(vm_index)

    def get_neigh_name(self):
        for key in self.vm_dut_map.keys():
            if self.vm_dut_map[key]['mgmt_addr'] == self.neigh_vm:
                self.neigh_name = key
                break

    def down_neigh_port(self):
        # extract ptf ports for the selected VM and mark them down
        for port in self.vm_dut_map[self.neigh_name]['ptf_ports']:
            self.portchannel_ports.remove(port)

    def vm_connect(self):
        self.vm_handle = Arista(self.neigh_vm, None, self.test_args)
        self.vm_handle.connect()

    def __del__(self):
        self.vm_disconnect()

    def vm_disconnect(self):
        self.vm_handle.disconnect()

    def setup(self):
        self.select_vm()
        self.get_neigh_name()
        self.down_neigh_port()
        self.vm_connect()
        self.neigh_bgp, self.dut_bgp = self.vm_handle.get_bgp_info()
        self.fails[self.neigh_vm] = set()
        self.log.append('Neighbor AS: %s' % self.neigh_bgp['asn'])
        self.log.append('BGP v4 neighbor: %s' % self.neigh_bgp['v4'])
        self.log.append('BGP v6 neighbor: %s' % self.neigh_bgp['v6'])
        self.log.append('DUT BGP v4: %s' % self.dut_bgp['v4'])
        self.log.append('DUT BGP v6: %s' % self.dut_bgp['v6'])

    def retreive_test_info(self):
        return self.vm_list, self.portchannel_ports, self.neigh_vm

    def retreive_logs(self):
        return self.log, self.fails['dut'], self.fails[self.neigh_vm]
Пример #16
0
	def agregarArista(self, nodo1, nodo2, peso):
		arista = Arista(nodo1, nodo2, peso)
		self.adyacencias[nodo1].append(arista)
Пример #17
0
 def getAristasIncidentes(self, v):
     '''Regresa las aristas que incide el vertice v '''
     a = (Arista(self.anterior(v), v), Arista(v, self.siguiente(v)))
     return a
Пример #18
0
if __name__ == '__main__':

    a = Punto(2, 4)
    b = Punto(5, 2)

    c = Punto(5, 1)
    d = Punto(7, 3)

    u = Punto(2, 2)
    v = Punto(4, 4)

    l1 = Recta(v, u)
    l2 = Recta(c, d)

    s = Arista(a, b)

    print("Intersccion debe ser verdadera")
    print("Recta l1" + l1.toString())
    i_1 = l1.interseccion_segm(s)
    print(i_1)

    print("Interseccion debe ser falsa")
    print("Recta l2 =" + l2.toString())
    i_2 = l2.interseccion_segm(s)
    print(i_2)

    print("punto pendiente:")
    print(Recta(Punto(3, 7), Punto(6, 4)).punto_pendiente())

    l3 = Recta(Punto(4, 3), Punto(1, 6))
Пример #19
0
	def addVertice_i(self, x, y, i):
		"""Sobreescribe el vertice en la posicion i por el creado con las coordenadas x, y """
		if i >= len(self.vertices) or i<0:
			return False
		v = Punto(x, y)
		print(i)

		if self.cerrado:
			if i == 0:
				a1 = Arista(self.vertices[-1], v)
				a2 = Arista(v, self.vertices[1])
			elif i == len(self.vertices)-1:
				a1 = Arista(self.vertices[i-1], v)
				a2 = Arista(v, self.vertices[0])
			else:
				a1 = Arista(self.vertices[i-1], v)
				a2 = Arista(v, self.vertices[i+1])
			aristas_tmp = self.aristas[:]
			self.aristas[i-1] = a1
			self.aristas[i] = a2
		
			if self.checaInterseccionArista(a1) or self.checaInterseccionArista(a2):
				self.aristas = aristas_tmp
				return False
			else:
				self.vertices[i] = v
				return True
		else:
			aristas_tmp = self.aristas[:]
			if i == 0:
				#a1 = Arista(self.vertices[-1], v)
				a = Arista(v, self.vertices[1])
				self.aristas[i] = a
				if self.checaInterseccionArista(a):
					self.aristas = aristas_tmp
					return False
				else:
					self.vertices[i] = v
					return True

			elif i == len(self.vertices)-1:
				a = Arista(self.vertices[i-1], v)
				self.aristas[-1] = a
				if self.checaInterseccionArista(a):
					self.aristas = aristas_tmp
					return False
				else:
					self.vertices[-1] = v
					return True
			else:
				a1 = Arista(self.vertices[i-1], v)
				a2 = Arista(v, self.vertices[i+1])
			
				self.aristas[i-1] = a1
				self.aristas[i] = a2
		
				if self.checaInterseccionArista(a1) or self.checaInterseccionArista(a2):
					self.aristas = aristas_tmp
					return False
				else:
					self.vertices[i] = v
					return True
Пример #20
0
 def vm_connect(self):
     for neigh_vm in self.neigh_vms:
         self.vm_handles[neigh_vm] = Arista(neigh_vm, None, self.test_args)
         self.vm_handles[neigh_vm].connect()
Пример #21
0
 def agregarArista(self, nodo1, nodo2, peso=1):
     arista = Arista(self.vertices[nodo1], self.vertices[nodo2], peso)
     self.aristas.append(arista)