Пример #1
0
def losange_inf_gauche(point, col, longueur, centre, rayon):
    """
        Réalise  le dessin du losange inferieur gauche
    """
    x, y = point
    t.fillcolor(col[1])
    t.begin_fill()
    p = (longueur * cos(2 * pi / 3) + x, longueur * sin(2 * pi / 3) + y, 0)
    p = (deformation(p, centre, rayon))
    t.goto(p[0], p[1])
    p = (longueur * cos(pi) + x, longueur * sin(pi) + y, 0)
    p = (deformation(p, centre, rayon))
    t.goto(p[0], p[1])
    p = (longueur * cos(-2 * pi / 3) + x, longueur * sin(-2 * pi / 3) + y, 0)
    p = (deformation(p, centre, rayon))
    t.goto(p[0], p[1])
    t.end_fill()
Пример #2
0
def losange_sup_droit(point, col, longueur, centre, rayon):
    """
        Réalise le dessin du losange supérieur droit
    """
    x, y = point
    t.fillcolor(col[2])
    t.begin_fill()
    p = (longueur * cos(0) + x, longueur * sin(0) + y, 0)
    p = (deformation(p, centre, rayon))
    t.goto(p[0], p[1])
    p = (longueur * cos(-pi / 3) + x, longueur * sin(-pi / 3) + y, 0)
    p = (deformation(p, centre, rayon))
    t.goto(p[0], p[1])
    p = (longueur * cos(-2 * pi / 3) + x, longueur * sin(-2 * pi / 3) + y, 0)
    p = (deformation(p, centre, rayon))
    t.goto(p[0], p[1])
    p = (x, y, 0)
    p = (deformation(p, centre, rayon))
    t.goto(p[0], p[1])
    t.end_fill()
Пример #3
0
    def losange_col_3(col, point, longueur, centre, rayon):
        """
        Dessine le premier losange
        """

        ## définition des différents points de référence du losange
        x, y, z = point

        # definition du deuxieme sommet
        x_bis = x - longueur * math.cos(math.pi / 3)
        y_bis = y + longueur * math.sin(math.pi / 3)
        point_2 = (x_bis, y_bis, z)

        # definition du troisieme sommet
        x_bis = x - longueur
        y_bis = y
        point_3 = (x_bis, y_bis, z)

        # definition du quatrieme sommet
        x_bis = x - longueur * math.cos(math.pi / 3)
        y_bis = y - longueur * math.sin(math.pi / 3)
        point_4 = (x_bis, y_bis, z)

        # definition de la couleur a utiliser
        turtle.color(col[2], col[2])
        turtle.begin_fill()

        # deformation de la position des points
        point_2 = deformation.deformation(point_2, centre, rayon)
        point_3 = deformation.deformation(point_3, centre, rayon)
        point_4 = deformation.deformation(point_4, centre, rayon)

        #dessin du losange
        trace(point_2, point_3, point_4)

        turtle.end_fill()  # remplissage
        return
Пример #4
0
def losange_sup_gauche(point, col, longueur, centre, rayon):
    """
       Réalise le dessin du losange supérieur gauche
    """
    t.penup()
    x, y = point
    p = (x, y, 0)
    p = deformation(p, centre, rayon)
    t.goto(p[0], p[1])
    t.fillcolor(col[0])
    t.begin_fill()
    p = (longueur * cos(0) + x, longueur * sin(0) + y, 0)
    p = deformation(p, centre, rayon)
    t.goto(p[0], p[1])
    p = (longueur * cos(pi / 3) + x, longueur * sin(pi / 3) + y, 0)
    p = deformation(p, centre, rayon)
    t.goto(p[0], p[1])
    p = (longueur * cos(2 * pi / 3) + x, longueur * sin(2 * pi / 3) + y, 0)
    p = deformation(p, centre, rayon)
    t.goto(p[0], p[1])
    p = (x, y, 0)
    p = deformation(p, centre, rayon)
    t.goto(p[0], p[1])
    t.end_fill()
Пример #5
0
def hexagone(point, longueur, col, centre, rayon):
    """
    fonction hexagone permettant  à partir de 3 losanges d'afficher
    un hexagone déformé peint de 3 couleurs centré en un point appelée "point" et
    de longueur longueur, cela est fait grâce à la méthode goto de turtle et
    à la fonction déformation qui renvoie un point déformé.
    Calcul des coordonnées des sommets des losanges réalisés
    grâce au théorème de Pythagore et l'aide du cosinus.
    :param point:
    :param longueur:
    :param col:
    :param centre:
    :param rayon:
    """
    point_x, point_y = point
    point_z = 0
    centre_hexagone = (deformation((point_x, point_y, point_z), centre,
                                   rayon)[0:2])
    sommet_a = (deformation((point_x + longueur, point_y, point_z), centre,
                            rayon)[0:2])
    sommet_b = (deformation(
        (point_x + (longueur / 2), point_y + cos(pi / 6) * longueur, point_z),
        centre, rayon)[0:2])
    sommet_c = (deformation(
        (point_x - (longueur / 2), point_y + cos(pi / 6) * longueur, point_z),
        centre, rayon)[0:2])
    sommet_d = (deformation((point_x - longueur, point_y, 0), centre,
                            rayon)[0:2])
    sommet_e = (deformation((point_x - (longueur / 2), point_y +
                             (-1 * cos(pi / 6) * longueur), point_z), centre,
                            rayon)[0:2])
    sommet_f = (deformation((point_x + (longueur / 2), point_y +
                             (-1 * cos(pi / 6) * longueur), point_z), centre,
                            rayon)[0:2])
    turtle.up(
    )  # ceci lève et permet à turtle de se déplacer sans tracer jusqu'au centre d'un hexagone
    turtle.goto(centre_hexagone[0], centre_hexagone[1])
    turtle.down()  # rabaisse turtle pour tracer
    sommets = [(sommet_a, sommet_b, sommet_c, centre_hexagone),
               (sommet_e, sommet_f, sommet_a, centre_hexagone),
               (sommet_c, sommet_d, sommet_e, centre_hexagone)]
    losanges(sommets, col)
Пример #6
0
def deform_mesh(filename, model, cam, label_folder):

    vertices, new_vertices, faces0, todo_vertices, inv_trasformation = get_mesh_to_deformation(
        filename, model, cam, label_folder)
    deformed = deformation(vertices, todo_vertices, new_vertices, faces0, 50)

    t_vertices = np.array(deformed) - np.array(cam['trans']).reshape((1, 3))

    rest_t_vertices = np.vstack((t_vertices.T, np.ones(
        (1, t_vertices.shape[0]))))

    v_t_w = (inv_trasformation[:, 0, :] * rest_t_vertices[0, :].reshape(
        (1, -1)) + inv_trasformation[:, 1, :] * rest_t_vertices[1, :].reshape(
            (1, -1)) +
             inv_trasformation[:, 2, :] * rest_t_vertices[2, :].reshape(
                 (1, -1)) +
             inv_trasformation[:, 3, :] * rest_t_vertices[3, :].reshape(
                 (1, -1))).T

    v_t = v_t_w[:, :-1] / v_t_w[:, [3, 3, 3]]

    return (v_t)
Пример #7
0
def hexagone(point, longueur, col, centre, rayon):
    """
    Definition de la fonction hexagone qui produit trois hexagones
        point :
        sous forme d’un triple (tuple de trois composantes) donnant la valeur des trois coordonnées,
        du point avant déformation où l’hexagone doit être peint

        longueur:
        la distance (avant déformation)  entre le centre et n’importe quel coin de l’hexagone

        col :
        tuple  contenant les trois couleurs (col1, col2, col3) qui vont être utilisées pour dessiner les hexagones

        centre:
        point  sous forme de triple (c_x, c_y, c_z) qui donne le centre de la sphère de déformation

        rayon:
        le rayon de la sphère de déformation

    """


    def losange_col_1(col, point, longueur, centre, rayon):
        """
        Dessine le premier losange
        """

        ## définition des différents points de référence du losange
        x, y, z = point

        # definition du deuxieme sommet
        x_bis = x - longueur*math.cos(math.pi/3)
        y_bis = y - longueur*math.sin(math.pi/3)
        point_2 = (x_bis,y_bis,z)

        # definition du troisieme sommet
        x_bis = x + longueur * math.cos(math.pi / 3)
        y_bis = y - longueur * math.sin(math.pi / 3)
        point_3 = (x_bis,y_bis,z)

        # definition du quatrieme sommet
        x_bis = x + longueur
        y_bis = y
        point_4 = (x_bis,y_bis,z)

        # definition de la couleur a utiliser
        turtle.color(col[0], col[0])
        turtle.begin_fill()

        # deformation de la position des points
        point_2 = deformation.deformation(point_2, centre, rayon )
        point_3 = deformation.deformation(point_3, centre, rayon)
        point_4 = deformation.deformation(point_4, centre, rayon)

        #dessin du losange
        trace(point_2, point_3, point_4)

        turtle.end_fill()  # remplissage
        return

    def losange_col_2(col, point, longueur, centre, rayon):
        """
        Dessine le deuxieme losange
        """

        ## définition des différents points de référence du losange
        x, y, z = point

        # definition du deuxieme sommet
        x_bis = x + longueur
        y_bis = y
        point_2 = (x_bis, y_bis, z)

        # definition du troisieme sommet
        x_bis = x + longueur * math.cos(math.pi / 3)
        y_bis = y + longueur * math.sin(math.pi / 3)
        point_3 = (x_bis, y_bis, z)

        # definition du quatrieme sommet
        x_bis = x - longueur * math.cos(math.pi / 3)
        y_bis = y + longueur * math.sin(math.pi / 3)
        point_4 = (x_bis, y_bis, z)

        # definition de la couleur a utiliser
        turtle.color(col[1], col[1])

        # deformation de la position des points
        point_2 = deformation.deformation(point_2, centre, rayon)
        point_3 = deformation.deformation(point_3, centre, rayon)
        point_4 = deformation.deformation(point_4, centre, rayon)

        #dessin du losange
        trace(point_2, point_3, point_4)


        return

    def losange_col_3(col, point, longueur, centre, rayon):
        """
        Dessine le premier losange
        """

        ## définition des différents points de référence du losange
        x, y, z = point

        # definition du deuxieme sommet
        x_bis = x - longueur * math.cos(math.pi / 3)
        y_bis = y + longueur * math.sin(math.pi / 3)
        point_2 = (x_bis, y_bis, z)

        # definition du troisieme sommet
        x_bis = x - longueur
        y_bis = y
        point_3 = (x_bis, y_bis, z)

        # definition du quatrieme sommet
        x_bis = x - longueur * math.cos(math.pi / 3)
        y_bis = y - longueur * math.sin(math.pi / 3)
        point_4 = (x_bis, y_bis, z)

        # definition de la couleur a utiliser
        turtle.color(col[2], col[2])
        turtle.begin_fill()

        # deformation de la position des points
        point_2 = deformation.deformation(point_2, centre, rayon)
        point_3 = deformation.deformation(point_3, centre, rayon)
        point_4 = deformation.deformation(point_4, centre, rayon)

        #dessin du losange
        trace(point_2, point_3, point_4)

        turtle.end_fill()  # remplissage
        return

    def trace(point_2, point_3, point_4):
        """
        Dessin le losange
        """

        turtle.begin_fill()

        # dessin du losange
        turtle.goto(point_2[0], point_2[1])
        turtle.goto(point_3[0], point_3[1])
        turtle.goto(point_4[0], point_4[1])

        turtle.end_fill()  # remplissage



    point_mod = deformation.deformation(point, centre, rayon) #modification du point de reference

    #positionne la tortue pour de dessin et fait le premier losange
    turtle.up()
    turtle.goto(point_mod[0], point_mod[1])
    losange_col_1(col, point, longueur, centre, rayon) # dessin le premier losange
    turtle.down()

    #positionne la tortue pour de dessin et fait le deuxieme losange
    turtle.up()
    turtle.goto(point_mod[0], point_mod[1])
    losange_col_2(col, point, longueur, centre, rayon) #dessin du deuxime losange
    turtle.down()

    #positionne la tortue pour de dessin et fait le troisieme losange
    turtle.up()
    turtle.goto(point_mod[0], point_mod[1])
    losange_col_3(col, point, longueur, centre, rayon) #dessin du troisieme losange
    turtle.down()

    return
Пример #8
0
def hexagone(t, c, longueur, col1, col2, col3, deformation, centre, rayon):
    """
    Fonction permettant de tracer 1 pavé hexagonal (à l'aide du module "turtle").
    Entrées : paramètres saisis par l'utilisateur, transmis par la fonction "pavage".
    Sorties : tracé d'1 pavé hexagonal (à l'écran, fenêtre "turtle").
    Arguments :
    t = tortue (remplace l'objet "Turtle" dans les fonctions liées au module "turtle") ;
    c = liste contenant les coordonnées (x, y) du centre du pavé hexagonal (transmises par la fonction "pavage") ;
    longueur = distance entre le centre "c" et n'importe quel coin de son périmètre extérieur ;
    col1, col2, col3 = couleurs de remplissage ;
    deformation = fonction appelée par "hexagone", ayant pour effet de déformer les pavés hexagonaux ;
    centre = liste contenant les coordonnées (c_x, c_y, c_z) du centre de la sphère de déformation ;
    rayon = rayon de la sphère de déformation.

    """

    t.up()
    # désactivation du "pinceau"

    t.goto((deformation((c[0], c[1], 0), centre,
                        rayon)[0], deformation((c[0], c[1], 0), centre,
                                               rayon)[1]))
    # déplacement vers le centre "c" (déformé le cas échéant)

    t.down()
    # ré-activation du "pinceau"

    palette_couleurs = [col1, col2, col3]
    # création d'une liste où sont indexées pour référence les couleurs choisies par l'utilisateur (input)

    los1pos1 = [(c[0] + longueur), c[1]]
    los1pos2 = [(c[0] + (longueur * math.cos(math.pi / 3))),
                (c[1] + (longueur * math.sin(math.pi / 3)))]
    los1pos3 = [(c[0] - (longueur * math.cos(math.pi / 3))),
                (c[1] + (longueur * math.sin(math.pi / 3)))]
    # positions successives des points du losange 1 (hors retour à "c")

    los2pos1 = [(c[0] - (longueur * math.cos(math.pi / 3))),
                (c[1] + (longueur * math.sin(math.pi / 3)))]
    los2pos2 = [(c[0] - longueur), c[1]]
    los2pos3 = [(c[0] - (longueur * math.cos(math.pi / 3))),
                (c[1] - (longueur * math.sin(math.pi / 3)))]
    # positions successives des points du losange 2 (hors retour à "c")

    los3pos1 = [(c[0] - (longueur * math.cos(math.pi / 3))),
                (c[1] - (longueur * math.sin(math.pi / 3)))]
    los3pos2 = [(c[0] + (longueur * math.cos(math.pi / 3))),
                (c[1] - (longueur * math.sin(math.pi / 3)))]
    los3pos3 = [(c[0] + longueur), c[1]]
    # positions successives des points du losange 3 (hors retour à "c")

    map_los1 = [los1pos1, los1pos2, los1pos3,
                c]  # carte du losange 1 (incluant le retour à "c")
    map_los2 = [los2pos1, los2pos2, los2pos3,
                c]  # carte du losange 2 (incluant le retour à "c")
    map_los3 = [los3pos1, los3pos2, los3pos3,
                c]  # carte du losange 3 (incluant le retour à "c")

    map_glob = [map_los1, map_los2, map_los3
                ]  # carte globale de l'hexagone, où chaque losange = une étape
    # création d'une liste où sont indexées pour référence les positions des différents points à parcourir

    for i in range(3):  # pour chacun des 3 losanges composant 1 hexagone
        map = map_glob[i]  # choix de la carte du losange
        t.color(palette_couleurs[i])  # choix de la couleur à appliquer
        t.begin_fill()  # début du remplissage
        for i in range(4):  # pour chacun des 4 segments composant 1 losange
            p = map[
                i]  # identification du point suivant à atteindre, déplacement vers celui-ci (déformé le cas échéant)
            t.goto((deformation((p[0], p[1], 0), centre, rayon)[0],
                    deformation((p[0], p[1], 0), centre, rayon)[1]))
        t.end_fill()  # fin du remplissage
Пример #9
0
def hexagone(point,longueur,col,centre,rayon):#Etape 1: definition de la fonction hexagone
    """
    La fonction peint un hexagone déformé en traçant des lignes droites entre le centre 
    et les extrémités dont la position est calculée avec la fonction deformation
    """
    turtle.hideturtle()
    turtle.speed(50) #vitesse d'éxecution du  dessin

    turtle.up()
    turtle.color('')
    C_x =point[0] #coordonnée du centre de l'hexagone correspondant aux bord de la fenêtre
    C_y = point[1]#(inf_gauche,sup_droite)
    pc=(C_x,C_y,0)
    pcprim=deformation(pc,centre,rayon)#deformation du centre par la fonctio deformation
    turtle.goto(pcprim[0],pcprim[1])# deplacement de la tortue au point d'origine deformé 
    
    turtle.down()
    """
    Dessin de la première face du pavé
    """ 
   
    turtle.color(col[0])#couleur de la première face 
    turtle.begin_fill()#commencer le remplissage
            
    X1=longueur*cos(0)+C_x
    Y1=longueur*sin(0)+C_y
    p=(X1,Y1,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    X1=longueur*cos(pi/3)+C_x
    Y1=longueur*sin(pi/3)+C_y
    p=(X1,Y1,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
   
    
    X1=longueur*cos(2*pi/3)+C_x
    Y1=longueur*sin(2*pi/3)+C_y
    p=(X1,Y1,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    turtle.goto(pcprim[0],pcprim[1])
    
    turtle.end_fill()  
                  
    """
    Dessin de la deuxième face du pavé
    """
    
        
    turtle.color(col[1])
    turtle.begin_fill()
    
    turtle.goto(pcprim[0],pcprim[1])
    
    X2=longueur*cos(2*pi/3)+C_x
    Y2=longueur*sin(2*pi/3)+C_y
    p=(X2,Y2,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    X2=-longueur+C_x
    Y2=0.0+C_y
    p=(X2,Y2,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    X2=longueur*cos(4*pi/3)+C_x
    Y2=longueur*sin(4*pi/3)+C_y
    p=(X2,Y2,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    turtle.goto(pcprim[0],pcprim[1])
    
    turtle.end_fill()
    
    """
    Dessin de la troisième face du pavé          
    """
    
            
    turtle.color(col[2])
    turtle.begin_fill()
    
    turtle.goto(pcprim[0],pcprim[1])
    
    X3=longueur*cos(4*pi/3)+C_x
    Y3=longueur*sin(4*pi/3)+C_y
    p=(X3,Y3,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    X3=longueur*cos(5*pi/3)+C_x
    Y3=longueur*sin(5*pi/3)+C_y
    p=(X3,Y3,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    X3=longueur*cos(0)+C_x
    Y3=longueur*sin(0)+C_y
    p=(X3,Y3,0)
    pprim=deformation(p,centre,rayon)
    turtle.goto(pprim[0],pprim[1])
    
    turtle.goto(pcprim[0],pcprim[1])
    
    
    turtle.end_fill()
Пример #10
0
def hexagone (coordonnee,longueur,col,centre,rayon):
    turtle.speed(0) # vitesse d'excution du dessin: vitesse lente
    turtle.up()
    x=coordonnee[0]  #coordonnes d'origine du premier cube: cela correspond au coinf inferieur gauche et coin sup droite
    y=coordonnee[1] # de la fenetre du dessin
    turtle.goto(x,y) # deplacement de la tortue au point d'origine du dessin
    turtle.down()

    # dessin de la premiere face du cube
    turtle.color(col[0])  # couleur de la face sup
    turtle.begin_fill()  # debuter le remplissage
    x = x + longueur * (math.cos(0))  # abscisse avant deformation
    y = y + longueur * (math.sin(0))  # ordonnée avant deformation
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)  # coordonnées apres deformation
    turtle.goto(pprim[0], pprim[1])  # la tortue va au point déformé

    x = x + longueur * (math.cos(-1 * math.pi / 3))
    y = y + longueur * (math.sin(-1 * math.pi / 3))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0], pprim[1])

    x = x + longueur * (math.cos(-1 * math.pi))
    y = y + longueur * (math.sin(-1 * math.pi))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0], pprim[1])

    x = x + longueur * (math.cos(-120 * math.pi / 180))
    y = y + longueur * (math.sin(120 * math.pi / 180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0], pprim[1])
    turtle.end_fill()

    # dessin de la deuxieme face du cube
    turtle.color(col[1])
    turtle.begin_fill()
    x=x+longueur*(math.cos(-60*math.pi/180))
    y=y+longueur*(math.sin(-60*math.pi/180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0],pprim[1])

    x=x+longueur*(math.cos(-120*math.pi/180))
    y=y+longueur*(math.sin(-120*math.pi/180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0],pprim[1])

    x=x+longueur*(math.cos(-240*math.pi/180))
    y=y+longueur*(math.sin(-240*math.pi/180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0],pprim[1])

    x = x + longueur * (math.cos(60 * math.pi / 180))
    y = y + longueur * (math.sin(60 * math.pi / 180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0], pprim[1])
    turtle.end_fill()




# dessin de la    troisieme face du cube
    turtle.color(col[2])
    turtle.down()
    turtle.begin_fill()
    x=x+longueur*(math.cos(0*math.pi/180))
    y=y+longueur*(math.sin(0*math.pi/180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0],pprim[1])
    x=x+longueur*(math.cos(-120*math.pi/180))
    y=y+longueur*(math.sin(-120*math.pi/180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0],pprim[1])
    x=x+longueur*(math.cos(-180*math.pi/180))
    y=y+longueur*(math.sin(-180*math.pi/180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0],pprim[1])
    x = x + longueur * (math.cos(60 * math.pi / 180))
    y = y + longueur * (math.sin(60 * math.pi / 180))
    p = (x, y, 0)
    pprim = deformation(p, centre, rayon)
    turtle.goto(pprim[0], pprim[1])
    turtle.end_fill()