CoCalc -- Collaborative Calculation in the Cloud
SharedTest.sagewsOpen in CoCalc
#Creation des matrices des polygones 
 
rectangleDepart = matrix(RR, [[13,13,17,17],[48,52,52,48],[1,1,1,1]])# Pièce de tetris en forme de carre 
rectangleDepart2 = matrix(RR, [[13,13,17,17],[25,29,29,25],[1,1,1,1]]) 
rectangleDepart3 = matrix(RR, [[0,0,4,4],[25,29,29,25],[1,1,1,1]]) 
LDepart = matrix(RR, [[13,17,17,15,15,13],[54,54,52,52,48,48],[1,1,1,1,1,1]])#Pièce de tetris en forme de L 
LDepart2 = matrix(RR, [[13,17,17,15,15,13],[31,31,29,29,25,25],[1,1,1,1,1,1]]) 
LDepart3 = matrix(RR, [[13,17,17,15,15,13],[27,27,33,33,29,29],[1,1,1,1,1,1]]) 
LDepart4 = matrix(RR, [[13,17,17,15,15,13],[2,2,8,8,4,4],[1,1,1,1,1,1]]) 
TDepart = matrix(RR, [[13,15,15,17,17,19,19,13],[50,50,48,48,50,50,52,52],[1,1,1,1,1,1,1,1]])#Piece de tetris en forme de T 
TDepart2 = matrix(RR, [[13,15,15,17,17,19,19,13],[27,27,25,25,27,27,29,29],[1,1,1,1,1,1,1,1]]) 
TDepart3 = matrix(RR, [[15,15,17,17,15,15,13,13],[27,25,25,31,31,29,29,27],[1,1,1,1,1,1,1,1]]) 
TDepart4 = matrix(RR, [[4,4,6,6,4,4,2,2],[27,25,25,31,31,29,29,27],[1,1,1,1,1,1,1,1]]) 
ZDepart = matrix(RR, [[13,13,15,15,17,17,15,15],[48,52,52,54,54,50,50,48],[1,1,1,1,1,1,1,1]])#Piece de tetris en forme de Z 
ZDepart2 = matrix(RR, [[13,13,15,15,17,17,15,15],[25,29,29,31,31,27,27,25],[1,1,1,1,1,1,1,1]]) 
ZDepart3 = matrix(RR, [[13,13,15,15,17,17,15,15],[2,6,6,8,8,4,4,2],[1,1,1,1,1,1,1,1]]) 
IDepart = matrix (RR, [[13,15,15,13],[48,48,56,56],[1,1,1,1]])#Pièce de tetris en forme de I 
IDepart2 = matrix(RR, [[13,15,15,13],[25,25,33,33],[1,1,1,1]]) 
IDepart3 = matrix(RR, [[10,18,18,10],[28,28,30,30],[1,1,1,1]]) 
NonLDepart = matrix(RR, [[13,17,17,15,15,13],[54,54,48,48,52,52],[1,1,1,1,1,1]])#Pièce de tetris en forme de L inversé 
NonLDepart2 = matrix(RR, [[13,17,17,15,15,13],[31,31,25,25,29,29],[1,1,1,1,1,1]]) 
NonLDepart3 = matrix(RR, [[13,15,15,19,19,13],[25,25,27,27,29,29],[1,1,1,1,1,1]]) 
 
#Creation des objets qui ne subissent pas de transformation 
contourBas = matrix(RR, [[0,0,24,24],[0,2,2,0],[1,1,1,1]]) #Barre noir en bas de l'animation 
erase = matrix(RR, [[0,0,24,24],[2,4,4,2],[1,1,1,1]])    #Barre Blanche qui supprime la ligne de tetris complétée 
erase2 = matrix(RR, [[0,0,24,24],[4,6,6,4],[1,1,1,1]])    #Barre noir qui se place au-dessus de la ligne de tetris complété 
 
Frame = 10 # nombre d’images de l'animation 
t = (pi)/Frame # angle de pi divisé par le nombre d’images pour avoir une animation 
t2 = ((-pi)/2)/Frame# angle de -pi/2 divisé par le nombre d’images pour avoir une animation 
t3 = ((pi)/2)/Frame# angle de pi/2 divisé par le nombre d’images pour avoir une animation 
 
#Points des centres de rotation des différentes pièces 
centreRotationL=matrix (RR, [[15, 29,1]]) 
centreRotationT=matrix (RR, [[16, 28,1]]) 
centreRotationI=matrix (RR, [[14, 29,1]]) 
centreRotationNonL=matrix (RR, [[15, 29,1]]) 
 
#Vecteurs de mouvement des différentes pièces 
 
VecteurMvtCarreJaune1 = vector([0/Frame,-23/Frame,1]) 
VecteurMvtCarreJaune2 = vector([-13/Frame,0/Frame,1]) 
VecteurMvtLpt2 = vector([0/Frame,-25/Frame,1]) 
VecteurMvtLpt3 = vector([-9/Frame,0/Frame,1]) 
VecteurMvtT= vector([-11/Frame,0/Frame, 1]) 
VecteurMvtTDesc = vector([0/Frame, -21/Frame,1]) 
VecteurInverse = vector([-5/Frame,0,1]) 
VecteurMvtLpt4 = vector([-3/Frame,0/Frame,1]) 
VecteurI = vector([6/Frame,-26/Frame,1]) 
VecteurNonL= vector([1/Frame, -23/Frame,1]) 
VecteurNul = vector([0,0,1]) 
 
 
 
def TranslationLineaire(VecteurTranslation,polygone): # le carre en multipliant le matrice par le vecteur translation 
    M = matrix([[1,0,VecteurTranslation[0]],[0,1,VecteurTranslation[1]],[0,0,VecteurTranslation[2]]] 
    return M * polygone 
 
Robin Jaubert  Joris Neble Module Modélisation Mathématiques M3202c  Prof référent : M. Morancey 06/12/18 
def Rotation(t,centreRotationx,centreRotationy): #Fonction qui renvoie la matrice de rotation 
    MCmoins = matrix([[1,0,-centreRotationx],[0,1,-centreRotationy],[0,0,1]]) 
    M = matrix([[cos(t), -sin(t),0],[sin(t),cos(t),0],[0,0,1]]) 
    MCplus = matrix([[1,0,centreRotationx],[0,1,centreRotationy],[0,0,1]]) 
    return MCplus*M*MCmoins 
 
def RotationPolygone(t,centreRotationx,centreRotationy,polygone): # Fonction qui appelle la fonction Rotation et qui multiplie la matrice du polygone par le résultat de la fonction Rotation 
    M = Rotation(t,centreRotationx,centreRotationy) 
    return M*polygone 
 
def Stocker(VecteurTranslation,polygone,color,yMin):# Range dans une liste les différentes images du mouvement et renvoie la liste en sortie 
    ListFrame= []#On crée une liste vide qui va contenir les images du polygone à afficher. 
    polygoneFrame = polygone #On stocke la matrice de notre polygone dans une variable. 
    ListFrame = ListFrame+[Dessine(polygoneFrame,color, yMin)]#On ajoute dans la liste vide de polygone le dessin de l’image d'apparition du polygone 
    for i in [1..Frame]: 
        polygoneFrame=TranslationLineaire(VecteurTranslation, polygoneFrame)#La fonction TranlationLineaire renvoie une matrice transformée et on la stocke dans une variable. 
        ListFrame=ListFrame+[Dessine(polygoneFrame,color,yMin)]#On ajoute dans la liste courante une image de notre polygone. 
    return ListFrame 
 
def StockerRotation(t,VecteurTranslation,centreRotation, polygone,color,yMin):# Range dans une liste les différentes images du mouvement et renvoie la liste en sortie 
    ListFrame=[]    #On crée une liste vide qui va contenir les images du polygone à afficher. 
    polygoneFrame = polygone #On stocke la matrice de notre polygone dans une variable. 
    ListFrame = ListFrame+[Dessine(polygoneFrame,color,yMin)] #On ajoute dans la liste vide de polygone le dessin de l’image d'apparition du polygone 
    for j in [1..Frame]: 
        polygoneFrame = RotationPolygone(t,centreRotation[0,0],centreRotation[0,1],polygoneFrame)#La fonction RotationPolygone renvoie une matrice transformée et on la stocke dans une variable. 
        ListFrame = ListFrame+[Dessine(polygoneFrame,color, yMin)]#On ajoute dans la liste courante une image de notre polygone. 
    return ListFrame
 
def Dessine(carre, color,yMin): #fonction qui retire les coordonnées homogènes et qui crée une image du polygone que nous souhaitons créer 
    carreTraceX = [carre[0,j] for j in [0..carre.ncols() -1]] # on retire la coordonnée homogène en X et Y 
    carreTraceY = [carre[1,j] for j in [0..carre.ncols() -1]] 
    return polygon(zip(carreTraceX,carreTraceY),fill=true,rgbcolor=color,xmin= -2.5, xmax=24, ymin=yMin, ymax=50, axes=False) #affiche le polygone suivant les nouvelles coordonnées sans homogénéité et change la couleur de la figure à afficher ainsi que de la coordonnée du repère en Ymin. 
 
 
 
S=Stocker(VecteurNul,contourBas,'black',0) #On crée une liste d'images qui appelle la fonction stocker 
S=[S[j]+Dessine(contourBas,'black',0) for j in [0..len(S)-1]] #On récupère la liste et on ajoute à celle-ci les dessins. 
 
graphe=S[-1] #On récupère la dernière image de la liste précédente 
temp=Stocker(VecteurMvtCarreJaune1, rectangleDepart,'goldenrod',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
 
temp=Stocker(VecteurMvtCarreJaune2, rectangleDepart2,'goldenrod',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtCarreJaune1, rectangleDepart3,'goldenrod',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurMvtCarreJaune1, LDepart, 'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=StockerRotation(t,VecteurNul,centreRotationL, LDepart2, 'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtLpt2, LDepart3,'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtLpt3, LDepart4,'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurMvtCarreJaune1, TDepart,'purple',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=StockerRotation(t2,VecteurNul,centreRotationT, TDepart2, 'purple',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtT,TDepart3, 'purple',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtTDesc,TDepart4, 'purple',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurMvtCarreJaune1,ZDepart, 'red',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtCarreJaune1,ZDepart2, 'red',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurInverse,ZDepart3, 'red',1) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurMvtCarreJaune1,LDepart, 'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=StockerRotation(t,VecteurNul,centreRotationL, LDepart2, 'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtLpt2, LDepart3,'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurMvtLpt4, LDepart4,'blue',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurMvtCarreJaune1, IDepart,'aqua',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=StockerRotation(t2,VecteurNul,centreRotationI, IDepart2, 'aqua',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurI, IDepart3,'aqua',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurMvtCarreJaune1, NonLDepart,'orangered',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=StockerRotation(t3,VecteurNul,centreRotationNonL, NonLDepart2, 'orangered',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
temp=Stocker(VecteurNonL, NonLDepart3,'orangered',0) 
S=S+[temp[j]+graphe for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurNul, erase, 'white',0) 
S=S+[graphe+temp[j] for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurNul, erase, 'black',2) 
S=S+[graphe+temp[j] for j in [0..len(temp)-1]] 
 
graphe=S[-1] 
temp=Stocker(VecteurNul, contourBas, 'white',2) 
S=S+[graphe+temp[j] for j in [0..len(temp)-1]] 
 
animation= animate(S) 
animation.show(delay = 10)
*** WARNING: Code contains non-ascii characters *** *** WARNING: Code contains possible implicit multiplication *** *** Check if any of [ 202c ] need a "*" sign for multiplication, e.g. 5x should be 5*x ! *** Error in lines 43-45 Traceback (most recent call last): File "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 1188, in execute flags=compile_flags) in namespace, locals File "<string>", line 3 return M * polygone ^ SyntaxError: invalid syntax