def create_sommet_unique(self, position, speed, distance, depth, parent): #on check d'abord si ledit sommet n'existe pas déjà #pour cela, on cherche dans ceux de même depth if depth > self.start_current_depth: self.start_current_depth = self.indice_act indice = self.start_current_depth while indice < self.indice_act and self.list[indice].is_same( position, speed) is not True: indice += 1 if indice < self.indice_act: #alors on a un qui est True if self.list[indice].get_distance( ) <= distance: #aucun intéret à créer un nouveau sommet return 0 else: self.list[indice].set_data( distance, parent) #on remplace l'ancien sommet par le nouveau return 0 else: if self.indice_act < self.size: self.list[self.indice_act] = Sommet(position, speed, distance, depth, parent) self.indice_act += 1 else: self.list = np.concatenate((self.list, np.zeros(self.size)), axis=None) self.size = self.size * 2 self.list[self.indice_act] = Sommet(position, speed, distance, depth, parent) self.indice_act += 1 return 1
def main(): paysage = Paysage(Sommet(0, 0, 0), Sommet(1, 0, 0), Sommet(0, 1, 0)) nbre_coupe = input("Combien d'itération voulez-vous effectuer ? ") for i in range(int(nbre_coupe)): paysage.ajoutersommets() paysage.save("paysage3D.gnuplot") return
def create_sommet(self, position, speed, distance, depth, parent): if self.indice_act < self.size: self.list[self.indice_act] = Sommet(position, speed, distance, depth, parent) self.indice_act += 1 else: self.list = np.concatenate((self.list, np.zeros(self.size)), axis=None) self.size = self.size * 2 self.list[self.indice_act] = Sommet(position, speed, distance, depth, parent) self.indice_act += 1 return
def create_sommet_unique_bis(self, position, speed, distance, depth, parent): if self.indice_act >= self.size: self.list = np.concatenate((self.list, np.zeros(self.size)), axis=None) self.size = self.size * 2 compteur = 0 while compteur < self.indice_act and self.list[compteur].is_same( position, speed) == False: compteur += 1 if compteur < self.indice_act: #on a trouvé le meme avant if self.list[compteur].get_depth() >= depth: if self.list[compteur].get_distance() >= distance: #on fait un test bas de gamme: #on regarde tous les enfants, et on remplace toutes les locd,,,,d,d self.list[compteur].set_data(distance, depth, parent) return 0 #else: #on ne fait rien, on rajoutera le notre self.list[self.indice_act] = Sommet(position, speed, distance, depth, parent) self.indice_act += 1 return 1
def graph_from_file(self, file_name): file = open(file_name, "r") first_line = [int(x) for x in file.readline().split()] self.nb_sommets = first_line[0] self.nb_arcs = first_line[1] self.oriente = (first_line[2] == 1) # ajout de tous les sommets for i in range(self.nb_sommets): line = [a for a in file.readline().split()] sommet_cur = Sommet(line[0], lat=float(line[1]), long=float(line[2])) self.sommets[line[0]] = sommet_cur # ajout de tous les arcs for i in range(self.nb_arcs): line = [a for a in file.readline().split()] if len(line) == 0: print(i) else: s_source = self.sommets[line[0]] s_cible = self.sommets[line[1]] arc_cur = Arc(s_source, s_cible, value=float(line[2])) self.arcs['%s%s' % (s_source.name, s_cible.name)] = arc_cur # si le graphe n'est pas orienté, on ajoute l'inverse de chaque arc if not self.oriente: self.arcs['%s%s' % (s_cible.name, s_source.name)] = arc_cur.inverse() file.close()
def __init__(self, position): self.list = np.full(256, None) self.list[0] = Sommet(position, [0, 0], 0, 0, None) #on crée la racine self.size = 256 self.indice_act = 1 self.start_current_depth = 0 self.compteur = 0 return
def creer_sommet(self): """le triangle crée un nouveau sommet en son centre. Le bruit dépend de la surface au sol du triangle""" vec = self.trouve_milieu() bruit = Sommet(0, 0, (2 * random() - 1)*self.aire_projetee()*1) nouveausommet= vec + bruit triangle1 =Triangle(self.som1,self.som2,nouveausommet) #On crée les traingles associé au nouveau points triangle2 =Triangle(self.som1,self.som3,nouveausommet) triangle3 =Triangle(self.som2,self.som3,nouveausommet) return (nouveausommet,triangle1,triangle2,triangle3) #Renvoie le sommet ainsi crée et les trois triangles fils dont il est l'un des sommets
def trouve_milieu(self): """renvoie le milieu du triangle""" return Sommet((self.som1.x + self.som2.x + self.som3.x) / 3, (self.som1.y + self.som2.y + self.som3.y) / 3, (self.som1.z + self.som2.z + self.som3.z) / 3)
) #Renvoie le sommet ainsi crée et les trois triangles fils dont il est l'un des sommets def trouve_milieu(self): """renvoie le milieu du triangle""" return Sommet((self.som1.x + self.som2.x + self.som3.x) / 3, (self.som1.y + self.som2.y + self.som3.y) / 3, (self.som1.z + self.som2.z + self.som3.z) / 3) def __str__(self): """utile au débug""" return str("triangle définit par les trois sommets suivants : ") + str( self.som1) + " " + str(self.som2) + " " + str(self.som3) if __name__ == "__main__": Sommet1 = Sommet(1, 0, 0) Sommet2 = Sommet(0, 1, 0) Sommet3 = Sommet(0, 0, 1) triangle = Triangle(Sommet1, Sommet2, Sommet3) print(triangle) print("aire de triangle:") print(triangle.aire_projetee()) print("milieu de triangle:") print(triangle.trouve_milieu()) (nouveausommet, triangle1, triangle2, triangle3) = triangle.creer_sommet() print("nouveau sommet généré:") print(nouveausommet) print("nouveaux triangles générés:") print(triangle1) print(triangle2) print(triangle3)
triangle3) = triangle.creer_sommet() nouvliste_triangles += [triangle1, triangle2, triangle3] self.liste_sommets.append( nouvsommet ) #on rajoute les nouveaux sommets crées à la liste des sommet du paysage self.liste_triangles = nouvliste_triangles #on remplace les anciens triangles par les nouveaux, plus petits" return True def __str__(self): """écrit la liste des sommets. Utile pour sauvegarder les données""" string = "" for sommet in self.liste_sommets: string += str(sommet) + "\n" return string def save(self, nom_fichier): """méthode copiant les sommets dans un fichier texte exploitable par l'interface graphique""" with open(nom_fichier, 'w') as f: for som in self.liste_sommets: f.write(str(som)) f.write("\n") if __name__ == "__main__": paysage = Paysage(Sommet(0, 0, 0), Sommet(1, 0, 0), Sommet(0, 1, 0)) print("paysage:") print(paysage) paysage.ajoutersommets() print("nouveaupaysage") print(paysage) paysage.save
def __init__(self, som_gauche, som_milieu, som_droit): self.liste_sommets = Sommet([som_gauche, som_milieu, som_droit])