SharedTest.sagewsOpen in CoCalc
Authors: Jaubert Robin, joris neble
Views : 5
#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