Пример #1
0
    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
Пример #2
0
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
Пример #3
0
 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
Пример #4
0
    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
Пример #5
0
    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()
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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)
Пример #9
0
        )  #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)
Пример #10
0
             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
Пример #11
0
 def __init__(self, som_gauche, som_milieu, som_droit):
     self.liste_sommets = Sommet([som_gauche, som_milieu, som_droit])