Le lycée NDLR clôture avec succès son premier Hackathon !

L’évènement organisé le week-end dernier, du 12 au 14 mai 2023, restera gravé dans les mémoires. Les résultats et les réalisations sont quant à eux gravés sur hackathon-ndlr.fr.

Vingt-deux élèves de seconde, première et terminale ont participé à ce marathon de programmation, s’affrontant en équipes pour réaliser un défi informatique sans connexion Internet et sans téléphone portable. Durant 42 heures, du vendredi soir au dimanche midi, des élèves passionnés ont fait preuve d’une remarquable détermination, dépassant les moments de doute et même de découragement pour, au final, tous réussir leur création sans concession ou sacrifice sur le résultat.

Les deux enseignants de la spécialité NSI (Numérique et Science Informatique) ainsi qu’une vingtaine de parents volontaires les ont accompagnés tout au long de l’évènement.

Les équipes ont rivalisé d’ingéniosité et de créativité pour proposer des approches innovantes et surprenantes. Mais cet évènement a été bien plus qu’un défi technique. Il a vu des jeunes coopérer, se répartir habillement les tâches et s’organiser efficacement dans le temps, au sein des équipes, pour réussir leur objectif. Mais, à la grande surprise des adultes encadrants, les jeunes concurrents se sont progressivement mis au service des autres équipes pour partager leurs trouvailles et apporter leurs compétences.

Ainsi, en plus de la créativité et de l’audace, de la persévérance et de l’originalité, de l’intuition et de l’organisation, toutes les équipes ont surtout remarquablement fait preuve d’enthousiasme et d’entraide entre elles.

Ce week-end immersif a permis aux élèves de se surpasser, de se découvrir et de s’entraider, de dépasser leur inquiétude voire leur découragement, mais il a également permis aux adultes de vivre des moments forts avec les jeunes qu’ils accompagnaient.

Le défi de chaque équipe consistait à créer une animation graphique en deux dimensions (2D) mettant en avant le “chemin” parcouru par un élève au lycée NDLR (par exemple : son ressenti, son vécu, ses expériences…), sans utiliser de logiciel moderne d’animation ou de création graphique, mais seulement à l’aide de deux boites à outils logicielles de calcul (Numpy) et de graphisme mathématique (Matplotlib) associées au langage de programmation Python.

De plus, la première et la dernière image de l’animation devaient contenir le carré et les trois triangles du logo NDLR. Le passage d’une image à une autre se faisant progressivement à l’aide de techniques de morphing, mais sans utiliser d’application vidéo, mais seulement du code informatique soit à peu près l’équivalent des outils qui ont permis la création du générique de l’émission Thalassa il y a 40 ans. On trouvera d’ailleurs certaines ressemblances avec les créations du Hackathon.

Par ailleurs, privés de leur téléphone portable, d’Internet et des moteurs d’intelligence artificielle à la mode, les participants ont été contraints à la lecture approfondie des documentations techniques, souvent en Anglais, déposés sur leurs ordinateurs. Une compétence indispensable dans le monde du développement informatique aujourd’hui.

Equipe : Ambre Carla Kenji Francesco
Prix : organisation, scénario et coopération
Code informatique en Python -> cliquer
### Programme principal #ndlr triangles from matplotlib.animation import ArtistAnimation import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import outils nbEtapes = 100 """---------------------------------------triangle----------------------------------------""" #triangle 1 T1XDepartS1=[-0.8,0,9,-0.8] T1YDepartS1=[11.8,8.9,17.4,11.8] T1XArriveeS1=[-2,0.4,2.5,-2] T1YArriveeS1=[11.8,8,11.8,11.8] #triangle 2 T2XDepartS1=[0.4,10.1,2,0.4] T2YDepartS1=[5.9,14.1,11.7,5.9] T2XArriveeS1=[5.6,7.9,3.2,5.6] T2YArriveeS1=[7.9,11.7,11.7,7.9] #triangle 3 T3XDepartS1=[0.6,11.6,2.9,0.6] T3YDepartS1=[4.1,10.3,9.2,4.1] T3XArriveeS1=[12.6,14.8,10.2,12.6] T3YArriveeS1=[7.9,11.7,11.7,7.9] "---------------------------------------------------" T1XDepartS3=[-2,0.4,2.5,-2] T1YDepartS3=[11.8,8,11.8,11.8] T1XArriveeS3=[-2,0.4,2.5,-2] T1YArriveeS3=[11.8,8,11.8,11.8] #triangle 2 / point interrogation orange T2XDepartS3=[5.6,7.9,3.2,3.2,5.6,5.6] T2YDepartS3=[7.9,11.7,11.7,11.7,7.9,7.9] T2XArriveeS3=[1.3,1.9,2.3,2.1,1.8,1.8] T2YArriveeS3=[15.9,16.4,15.9,15.5,15.1,14.5] #triangle 3 / table / point d'interrogtion(+deux cotes) T3XDepartS3=[-1.8,0.4,2,3,4,8] T3YDepartS3=[10,10,10,10,10,10] T3XArriveeS3=[0.2,0.8,1.2,1,0.7,0.7] T3YArriveeS3=[15.7,16.2,15.7,15.3,14.9,14.3] """--------------------------------------------------""" T1XDepartS4=[-2,0.4,2.5,-2] T1YDepartS4=[11.8,8,11.8,11.8] T1XArriveeS4=[-2,0.4,2.5,-2] T1YArriveeS4=[11.8,8,11.8,11.8] #triangle 2 / point interrogation orange => personne T2XDepartS4=[1.3,1.9,2.3,2.1,1.8,1.8] T2YDepartS4=[15.9,16.4,15.9,15.5,15.1,14.5] T2XArriveeS4=[9.1,11.4,11.4,6.8,6.8,9.1] T2YArriveeS4=[7.9,11.7,11.7,11.7,11.7,7.9] #triangle 3 / table / point d'interrogtion(+deux cotes) => personne 2 T3XDepartS4=[0.2,0.8,1.2,1,0.7,0.7] T3YDepartS4=[15.7,16.2,15.7,15.3,14.9,14.3] T3XArriveeS4=[14.1,14.1,16.3,16.3,11.7,14.1] T3YArriveeS4=[7.9,7.9,11.7,11.7,11.7,7.9] """------------------------------------------""" T1XDepartS5=[-2,0.4,2.5,-2] T1YDepartS5=[11.8,8,11.8,11.8] T1XArriveeS5=[-2,0.4,2.5,-2] T1YArriveeS5=[11.8,8,11.8,11.8] #triangle 2 / point interrogation orange => personne T2XDepartS5=[9.1,11.4,11.4,6.8,6.8,9.1] T2YDepartS5=[7.9,11.7,11.7,11.7,11.7,7.9] T2XArriveeS5=[6.1,8.4,8.4,3.8,3.8,6.1] T2YArriveeS5=[7.9,11.7,11.7,11.7,11.7,7.9] #triangle 3 / table / point d'interrogtion(+deux cotes) => personne 2 T3XDepartS5=[14.1,14.1,16.3,16.3,11.7,14.1] T3YDepartS5=[7.9,7.9,11.7,11.7,11.7,7.9] T3XArriveeS5=[11.1,11.1,13.3,13.3,8.7,11.1] T3YArriveeS5=[7.9,7.9,11.7,11.7,11.7,7.9] """---------------------------------------------------------""" T1XDepartS6=[-2,0.4,2.5,-2] T1YDepartS6=[11.8,8,11.8,11.8] T1XArriveeS6=[1,3.4,5.5,1] T1YArriveeS6=[11.8,8,11.8,11.8] #triangle 2 / point interrogation orange => personne => banderole T2XDepartS6=[9.1,11.4,11.4,6.8,6.8,9.1] T2YDepartS6=[7.9,11.7,11.7,11.7,7.9,7.9] T2XArriveeS6=[-1.8,-0.4,1,2.4,6.6,8] T2YArriveeS6=[17,16,16,16,16,17] #triangle 3 / table / point d'interrogtion(+deux cotes) => personne 2 => banderole T3XDepartS6=[11.1,11.1,13.3,13.3,8.7,8.7,11.1] T3YDepartS6=[7.9,7.9,11.7,11.7,11.7,11.7,7.9] T3XArriveeS6=[0,1,2,3,4,5,6] T3YArriveeS6=[16,14,16,14,16,14,16] """---------------------------------------------------------""" # Scène 7 : retour logo NDLR # perso => triangle rouge T1XDepartS7=[1,3.4,5.5,1] T1YDepartS7=[11.8,8,11.8,11.8] T1XArriveeS7=[-0.8,0,9,-0.8] T1YArriveeS7=[11.8,8.9,17.4,11.8] # banderole (ligne) => triangle orange T2XDepartS7=[-1.8,-0.4,1,2.4,6.6,8] T2YDepartS7=[17,16,16,16,16,17] T2XArriveeS7=[0.4,0.4,0.4,10.1,2,0.4] T2YArriveeS7=[5.9,5.9,5.9,14.1,11.7,5.9] # banderole (drapeaux) => triangle jaune T3XDepartS7=[0,1,2,3,4,5,6] T3YDepartS7=[16,14,16,14,16,14,16] T3XArriveeS7=[0.6,0.6,0.6,0.6,11.6,2.9,0.6] T3YArriveeS7=[4.1,4.1,4.1,4.1,10.3,9.2,4.1] """-------------------------------Table---------------------------------------""" #triangle 3 / table TableXArrivee=[-1.8,0,0.4,8] TableYArrivee=[10,10,10,10] TableXDepart=[12.6,14.8,10.2,12.6] TableYDepart=[7.9,11.7,11.7,7.9] R1XDepartS1=[0,13.6,13.6,0,0] R1YDepartS1=[0,0,13.6,13.6,0] R1XArriveeS1 = [-1,-1,1.5,1.5,-1] R1YArriveeS1 = [13,15.5,15.5,13,13] # Rect 2 R2XDepartS1=[0,13.6,13.6,0,0] R2YDepartS1=[0,0,13.6,13.6,0] R2XArriveeS1 = [4.5,4.5,7,7,4.5] R2YArriveeS1 = [13,15.5,15.5,13,13] # Rect 3 R3XDepartS1=[0,13.6,13.6,0,0] R3YDepartS1=[0,0,13.6,13.6,0] R3XArriveeS1 = [11,11,13.5,13.5,11] R3YArriveeS1 = [13,15.5,15.5,13,13] "-----------------------" # Scène 3 # Rect 1 R1XDepartS3=[-1,-1,1.5,1.5,-1] R1YDepartS3=[13,15.5,15.5,13,13] R1XArriveeS3=[-1,-1,1.5,1.5,-1] R1YArriveeS3=[13,15.5,15.5,13,13] # Rect 2 R2XDepartS3=[4.5,4.5,7,7,4.5] R2YDepartS3=[13,15.5,15.5,13,13] R2XArriveeS3=[-1,-1,1.5,1.5,-1] R2YArriveeS3=[13,15.5,15.5,13,13] # Rect 3 R3XDepartS3=[4.5,4.5,7,7,4.5] R3YDepartS3=[13,15.5,15.5,13,13] R3XArriveeS3=[-1,-1,1.5,1.5,-1] R3YArriveeS3=[13,15.5,15.5,13,13] "-----------------------" #Scène 4 # Rect 1 R1XDepartS4=[-1,-1,1.5,1.5,-1] R1YDepartS4=[13,15.5,15.5,13,13] R1XArriveeS4=[-1,-1,1.5,1.5,-1] R1YArriveeS4=[12.8,15.3,15.3,12.8,12.8] # Rect 2 R2XDepartS4=[-1,-1,1.5,1.5,-1] R2YDepartS4=[13,15.5,15.5,13,13] R2XArriveeS4=[8.1,8.1,10.4,10.4,8.1] R2YArriveeS4=[12.8,15,15,12.8,12.8] # Rect 3 R3XDepartS4=[-1,-1,1.5,1.5,-1] R3YDepartS4=[13,15.5,15.5,13,13] R3XArriveeS4=[12.9,12.9,15.2,15.2,12.9] R3YArriveeS4=[12.8,15,15,12.8,12.8] "-----------------------" # Scène 5 # Rect 1 R1XDepartS5=[-1,-1,1.5,1.5,-1] R1YDepartS5=[12.8,15.3,15.3,12.8,12.8] R1XArriveeS5=[-1,-1,1.5,1.5,-1] R1YArriveeS5=[12.8,15.3,15.3,12.8,12.8] # Rect 2 R2XDepartS5=[8.1,8.1,10.4,10.4,8.1] R2YDepartS5=[12.8,15,15,12.8,12.8] R2XArriveeS5=[5.1,5.1,7.4,7.4,5.1] R2YArriveeS5=[12.8,15,15,12.8,12.8] # Rect 3 R3XDepartS5=[12.9,12.9,15.2,15.2,12.9] R3YDepartS5=[12.8,15,15,12.8,12.8] R3XArriveeS5=[10,10,12,12,10] R3YArriveeS5=[12.8,15,15,12.8,12.8] "-----------------------" # Scène 6 # Rect 1 R1XDepartS6=[-1,-1,1.5,1.5,-1] R1YDepartS6=[12.8,15.3,15.3,12.8,12.8] R1XArriveeS6=[2.3,2.3,3.9,3.9,2.3] R1YArriveeS6=[12,13.5,13.5,12.,12.] # Rect 2 R2XDepartS6=[5.1,5.1,7.4,7.4,5.1] R2YDepartS6=[12.8,15,15,12.8,12.8] R2XArriveeS6=[2.3,2.3,3.9,3.9,2.3] R2YArriveeS6=[12,13.5,13.5,12.,12.] # Rect 3 R3XDepartS6=[10,10,12,12,10] R3YDepartS6=[12.8,15,15,12.8,12.8] R3XArriveeS6=[2.3,2.3,3.9,3.9,2.3] R3YArriveeS6=[12,13.5,13.5,12.,12.] "-----------------------" # Scène 7 # Rect 1 R1XDepartS7=[2.3,2.3,3.9,3.9,2.3] R1YDepartS7=[12,13.5,13.5,12.,12.] R1XArriveeS7=[0,13.6,13.6,0,0] R1YArriveeS7=[0,0,13.6,13.6,0] # Rect 2 R2XDepartS7=[2.3,2.3,3.9,3.9,2.3] R2YDepartS7=[12,13.5,13.5,12.,12.] R2XArriveeS7=[0,13.6,13.6,0,0] R2YArriveeS7=[0,0,13.6,13.6,0] # Rect 3 R3XDepartS7=[2.3,2.3,3.9,3.9,2.3] R3YDepartS7=[12,13.5,13.5,12.,12.] R3XArriveeS7=[0,13.6,13.6,0,0] R3YArriveeS7=[0,0,13.6,13.6,0] """--------------------------------------------------------------""" fig, ax = plt.subplots() ax.axis("off") ax.axis("equal") artists=[] """Scène 1 : logo ndlr aux personnages""" for i in range(1, nbEtapes + 2): r1 = outils.modificationTriangle(ax,i,R1XDepartS1,R1YDepartS1,R1XArriveeS1,R1YArriveeS1,nbEtapes,"blue") r2 = outils.modificationTriangle(ax,i,R2XDepartS1,R2YDepartS1,R2XArriveeS1,R2YArriveeS1,nbEtapes,"blue") r3 = outils.modificationTriangle(ax,i,R3XDepartS1,R3YDepartS1,R3XArriveeS1,R3YArriveeS1,nbEtapes,"blue") t1=outils.modificationTriangle(ax,i,T1XDepartS1,T1YDepartS1,T1XArriveeS1,T1YArriveeS1,nbEtapes,"gold",WArrivee=3) t2=outils.modificationTriangle(ax,i,T2XDepartS1,T2YDepartS1,T2XArriveeS1,T2YArriveeS1,nbEtapes,"orange",WArrivee=3) t3=outils.modificationTriangle(ax,i,T3XDepartS1,T3YDepartS1,T3XArriveeS1,T3YArriveeS1,nbEtapes,"darkred",WArrivee=3) texte = outils.mouvTexte(ax,i,5,5.5,10,5.5,nbEtapes,"black",texte="Vive la Rentrée !!") #ax.text(10, 20, r" ") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 2 : personnages à la table""" for i in range(1, nbEtapes + 2): #ax.text(10, 20, r"Le premier cours est toujours un peu ennuyant") t1 = outils.modificationTriangle(ax,i,T1XArriveeS1,T1YArriveeS1,T1XArriveeS1,T1YArriveeS1,nbEtapes,"gold",WArrivee=3) t2 = outils.modificationTriangle(ax,i,T2XArriveeS1,T2YArriveeS1,T2XArriveeS1,T2YArriveeS1,nbEtapes,"orange",WArrivee=3) t3=outils.modificationTriangle(ax,i,TableXDepart,TableYDepart,TableXArrivee,TableYArrivee,nbEtapes,"darkred",WArrivee=3) r1 = outils.modificationTriangle(ax,i,R1XArriveeS1,R1YArriveeS1,R1XArriveeS1,R1YArriveeS1,nbEtapes,"blue") r2 = outils.modificationTriangle(ax,i,R2XArriveeS1,R2YArriveeS1,R2XArriveeS1,R2YArriveeS1,nbEtapes,"blue") r3 = outils.modificationTriangle(ax,i,R3XArriveeS1,R3YArriveeS1,R2XArriveeS1,R2YArriveeS1,nbEtapes,"blue") texte = outils.mouvTexte(ax,i,1,5.5,2,5.5,nbEtapes,"black",texte="Le 1er cours est toujours un peu ennuyant") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 2 : pause""" for i in range(1, 20 + 2): #ax.text(10, 20, r"Le premier cours est toujours un peu ennuyant") t1 = outils.modificationTriangle(ax,i,T1XArriveeS1,T1YArriveeS1,T1XArriveeS1,T1YArriveeS1,20,"gold",WArrivee=3) t2 = outils.modificationTriangle(ax,i,T2XArriveeS1,T2YArriveeS1,T2XArriveeS1,T2YArriveeS1,20,"orange",WArrivee=3) t3=outils.modificationTriangle(ax,i,TableXArrivee,TableYArrivee,TableXArrivee,TableYArrivee,20,"darkred",WArrivee=3) r1 = outils.modificationTriangle(ax,i,R1XArriveeS1,R1YArriveeS1,R1XArriveeS1,R1YArriveeS1,20,"blue") r2 = outils.modificationTriangle(ax,i,R2XArriveeS1,R2YArriveeS1,R2XArriveeS1,R2YArriveeS1,20,"blue") r3 = outils.modificationTriangle(ax,i,R2XArriveeS1,R2YArriveeS1,R2XArriveeS1,R2YArriveeS1,20,"blue") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 3: interrogation""" for i in range(1, nbEtapes + 2): #ax.text(10, 20, r"Les adolescents s'interrogent toujours sur tout, en particulier dans les moments de solitude") t1 = outils.modificationTriangle(ax,i,T1XDepartS3,T1YDepartS3,T1XArriveeS3,T1YArriveeS3,nbEtapes,"silver",WArrivee=3) t2 = outils.modificationTriangle(ax,i,T2XDepartS3,T2YDepartS3,T2XArriveeS3,T2YArriveeS3,nbEtapes,"orange",WArrivee=3) t3 = outils.modificationTriangle(ax,i,T3XDepartS3,T3YDepartS3,T3XArriveeS3,T3YArriveeS3,nbEtapes,"darkred",WArrivee=4) r1 = outils.modificationTriangle(ax,i,R1XArriveeS1,R1YArriveeS1,R1XArriveeS3,R1YArriveeS3,nbEtapes,"silver") r2 = outils.modificationTriangle(ax,i,R2XArriveeS1,R2YArriveeS1,R2XArriveeS3,R2YArriveeS3,nbEtapes,"blue") r3 = outils.modificationTriangle(ax,i,R2XArriveeS1,R2YArriveeS1,R3XArriveeS3,R3YArriveeS3,nbEtapes,"blue") texte = outils.mouvTexte(ax,i,-8,5.5,-8,5.5,nbEtapes,"black",texte="Les adolescents s'interrogent toujours sur tout, en particulier dans les moments de solitude") #ax.text(10, 20, r" ") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 3: pause""" for i in range(1, 20 + 2): #ax.text(10, 20, r"Les adolescents s'interrogent toujours sur tout, en particulier dans les moments de solitude") t1 = outils.modificationTriangle(ax,i,T1XArriveeS3,T1YArriveeS3,T1XArriveeS3,T1YArriveeS3,20,"silver",WArrivee=4) t2 = outils.modificationTriangle(ax,i,T2XArriveeS3,T2YArriveeS3,T2XArriveeS3,T2YArriveeS3,20,"orange",WArrivee=2) t3 = outils.modificationTriangle(ax,i,T3XArriveeS3,T3YArriveeS3,T3XArriveeS3,T3YArriveeS3,20,"darkred",WArrivee=2) r1 = outils.modificationTriangle(ax,i,R1XArriveeS3,R1YArriveeS3,R1XArriveeS3,R1YArriveeS3,20,"silver",WArrivee=4) r2 = outils.modificationTriangle(ax,i,R2XArriveeS3,R2YArriveeS3,R2XArriveeS3,R2YArriveeS3,20,"silver") r3 = outils.modificationTriangle(ax,i,R3XArriveeS3,R3YArriveeS3,R3XArriveeS3,R3YArriveeS3,20,"silver") texte = outils.mouvTexte(ax,i,-8,5.5,-8,5.5,nbEtapes,"black",texte="Les adolescents s'interrogent toujours sur tout, en particulier dans les moments de solitude") #ax.text(10, 20, r" ") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 4: vide """ for i in range(1, nbEtapes + 2): t1 = outils.modificationTriangle(ax,i,T1XDepartS4,T1YDepartS4,T1XArriveeS4,T1YArriveeS4,nbEtapes,"silver",WArrivee=4) t2 = outils.modificationTriangle(ax,i,T2XDepartS4,T2YDepartS4,T2XArriveeS4,T2YArriveeS4,nbEtapes,"orange",WArrivee=2) t3 = outils.modificationTriangle(ax,i,T3XDepartS4,T3YDepartS4,T3XArriveeS4,T3YArriveeS4,nbEtapes,"darkred",WArrivee=2) r1 = outils.modificationTriangle(ax,i,R1XDepartS4,R1YDepartS4,R1XArriveeS4,R1YArriveeS4,nbEtapes,"silver",WArrivee=4) r2 = outils.modificationTriangle(ax,i,R2XDepartS4,R2YDepartS4,R2XArriveeS4,R2YArriveeS4,nbEtapes,"blue") r3 = outils.modificationTriangle(ax,i,R3XDepartS4,R3YDepartS4,R3XArriveeS4,R3YArriveeS4,nbEtapes,"blue") texte = outils.mouvTexte(ax,i,-5,5.5,-5,5.5,nbEtapes,"black",texte="On peut tous se sentir vide, même quand on est entouré") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 4: pause """ for i in range(1, 50 + 2): t1 = outils.modificationTriangle(ax,i,T1XArriveeS4,T1YArriveeS4,T1XArriveeS4,T1YArriveeS4,50,"silver",WArrivee=4) t2 = outils.modificationTriangle(ax,i,T2XArriveeS4,T2YArriveeS4,T2XArriveeS4,T2YArriveeS4,50,"orange",WArrivee=2) t3 = outils.modificationTriangle(ax,i,T3XArriveeS4,T3YArriveeS4,T3XArriveeS4,T3YArriveeS4,50,"darkred",WArrivee=2) r1 = outils.modificationTriangle(ax,i,R1XArriveeS4,R1YArriveeS4,R1XArriveeS4,R1YArriveeS4,50,"silver",WArrivee=4) r2 = outils.modificationTriangle(ax,i,R2XArriveeS4,R2YArriveeS4,R2XArriveeS4,R2YArriveeS4,50,"blue") r3 = outils.modificationTriangle(ax,i,R3XArriveeS4,R3YArriveeS4,R3XArriveeS4,R3YArriveeS4,50,"blue") texte = outils.mouvTexte(ax,i,-5,5.5,-5,5.5,nbEtapes,"black",texte="On peut tous se sentir vide, même quand on est entouré") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 5 : rencontre""" for i in range(1, nbEtapes + 2): t1 = outils.modificationTriangle(ax,i,T1XArriveeS4,T1YArriveeS4,T1XArriveeS5,T1YArriveeS5,nbEtapes,"gold",WArrivee=2) t2 = outils.modificationTriangle(ax,i,T2XArriveeS4,T2YArriveeS4,T2XArriveeS5,T2YArriveeS5,nbEtapes,"orange",WArrivee=2) t3 = outils.modificationTriangle(ax,i,T3XArriveeS4,T3YArriveeS4,T3XArriveeS5,T3YArriveeS5,nbEtapes,"darkred",WArrivee=2) r1 = outils.modificationTriangle(ax,i,R1XDepartS5,R1YDepartS5,R1XArriveeS5,R1YArriveeS5,nbEtapes,"blue") r2 = outils.modificationTriangle(ax,i,R2XDepartS5,R2YDepartS5,R2XArriveeS5,R2YArriveeS5,nbEtapes,"blue") r3 = outils.modificationTriangle(ax,i,R3XDepartS5,R3YDepartS5,R3XArriveeS5,R3YArriveeS5,nbEtapes,"blue") texte = outils.mouvTexte(ax,i,5,5.5,5,5.5,nbEtapes,"black",texte="Nous faisons également des rencontres") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 6 : diplome""" for i in range(1, nbEtapes + 2): t1 = outils.modificationTriangle(ax,i,T1XArriveeS5,T1YArriveeS5,T1XArriveeS6,T1YArriveeS6,nbEtapes,"gold",WArrivee=2) t2 = outils.modificationTriangle(ax,i,T2XArriveeS5,T2YArriveeS5,T2XArriveeS6,T2YArriveeS6,nbEtapes,"orange",WArrivee=2) t3 = outils.modificationTriangle(ax,i,T3XDepartS6,T3YDepartS6,T3XArriveeS6,T3YArriveeS6,nbEtapes,"darkred",WArrivee=2) r1 = outils.modificationTriangle(ax,i,R1XDepartS6,R1YDepartS6,R1XArriveeS6,R1YArriveeS6,nbEtapes,"blue") r2 = outils.modificationTriangle(ax,i,R2XDepartS6,R2YDepartS6,R2XArriveeS6,R2YArriveeS6,nbEtapes,"blue") r3 = outils.modificationTriangle(ax,i,R3XDepartS6,R3YDepartS6,R3XArriveeS6,R3YArriveeS6,nbEtapes,"blue") texte = outils.mouvTexte(ax,i,5,5.5,5,5.5,nbEtapes,"black",texte="Puis on finit par avoir le BAC") artists.append([t1,t2,t3,r1,r2,r3,texte]) """scène 6 : pause""" for i in range(1, 50 + 2): t1 = outils.modificationTriangle(ax,i,T1XArriveeS6,T1YArriveeS6,T1XArriveeS6,T1YArriveeS6,50,"gold",WArrivee=2) t2 = outils.modificationTriangle(ax,i,T2XArriveeS6,T2YArriveeS6,T2XArriveeS6,T2YArriveeS6,50,"orange",WArrivee=2) t3 = outils.modificationTriangle(ax,i,T3XArriveeS6,T3YArriveeS6,T3XArriveeS6,T3YArriveeS6,50,"darkred",WArrivee=2) r1 = outils.modificationTriangle(ax,i,R1XArriveeS6,R1YArriveeS6,R1XArriveeS6,R1YArriveeS6,50,"blue") r2 = outils.modificationTriangle(ax,i,R2XArriveeS6,R2YArriveeS6,R2XArriveeS6,R2YArriveeS6,50,"blue") r3 = outils.modificationTriangle(ax,i,R3XArriveeS6,R3YArriveeS6,R3XArriveeS6,R3YArriveeS6,50,"blue") texte = outils.mouvTexte(ax,i,5,5.5,5,5.5,nbEtapes,"black",texte="Puis on finit par avoir le BAC") artists.append([t1,t2,t3,r1,r2,r3,texte]) """Scène 7 : Retour NDLR""" for i in range(1, nbEtapes + 2): t1 = outils.modificationTriangle(ax,i,T1XDepartS7,T1YDepartS7,T1XArriveeS7,T1YArriveeS7,nbEtapes,"gold",WArrivee=2) t2 = outils.modificationTriangle(ax,i,T2XDepartS7,T2YDepartS7,T2XArriveeS7,T2YArriveeS7,nbEtapes,"orange",WArrivee=2) t3 = outils.modificationTriangle(ax,i,T3XDepartS7,T3YDepartS7,T3XArriveeS7,T3YArriveeS7,nbEtapes,"darkred",WArrivee=2) r1 = outils.modificationTriangle(ax,i,R1XDepartS7,R1YDepartS7,R1XArriveeS7,R1YArriveeS7,nbEtapes,"blue") r2 = outils.modificationTriangle(ax,i,R2XDepartS7,R2YDepartS7,R2XArriveeS7,R2YArriveeS7,nbEtapes,"blue") r3 = outils.modificationTriangle(ax,i,R3XDepartS7,R3YDepartS7,R3XArriveeS7,R3YArriveeS7,nbEtapes,"blue") texte = outils.mouvTexte(ax,i,5,5.5,5,5.5,nbEtapes,"black",texte=" NDLR") artists.append([t1,t2,t3,r1,r2,r3,texte]) ani = ArtistAnimation(fig, artists, interval=0.5, repeat=True,blit=True) #fig.show() from matplotlib.animation import PillowWriter ani.save("Gif.gif", writer=PillowWriter(fps=30))
### Module outils.py import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation def modificationTriangle(ax,etape,xDepart,yDepart,xArrivee,yArrivee,nbEtapes,couleur,WDepart=2,WArrivee=2): xDepart, yDepart, xArrivee, yArrivee = np.array(xDepart), np.array(yDepart), np.array(xArrivee), np.array(yArrivee) #Les coordonées pour chaque étape sont calculées en fonction des valeurs de XD, YD et XA, YA, # permettant une transition progressive des points entre les deux polygones. xInter = xDepart + etape * (xArrivee - xDepart) /(nbEtapes + 1) yInter = yDepart + etape * (yArrivee - yDepart) / (nbEtapes + 1) WInter = WDepart + etape * (WArrivee - WDepart) / (nbEtapes + 1) line = ax.plot(xInter, yInter, couleur,lw = WInter)[0] return line def mouvTexte(ax,etape,xDepart,yDepart,xArrivee,yArrivee,nbEtapes,couleur,texte,WDepart=2,WArrivee=2): #Les coordonées pour chaque étape sont calculées en fonction des valeurs de XD, YD et XA, YA, # permettant une transition progressive des points entre les deux polygones. xInter = xDepart + etape * (xArrivee - xDepart) /(nbEtapes + 1) yInter = yDepart + etape * (yArrivee - yDepart) / (nbEtapes + 1) WInter = WDepart + etape * (WArrivee - WDepart) / (nbEtapes + 1) line = ax.text(xInter, yInter, s=texte) return line

Equipe : Larry Rayanne Briac Theo
Prix : originalité, audace et créativité
Code informatique en Python -> cliquer
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import ArtistAnimation class Triangle : def __init__(self,point_1, point_2, point_3): self.point_1 = point_1 self.point_2 = point_2 self.point_3 = point_3 def dessiner_triangle(self): x1= self.point_1[0] y1= self.point_1[1] x2= self.point_2[0] y2= self.point_2[1] x3= self.point_3[0] y3= self.point_3[1] X = [x1,x2,x3,x1] Y = [y1,y2,y3,y1] return X,Y class carre : def __init__(self,point_1, point_2, point_3,point_4): self.point_1 = point_1 self.point_2 = point_2 self.point_3 = point_3 self.point_4 = point_4 def mouvement (self,modif_1,modif_2): Triangle.translation( modif_1) Triangle.rotation( modif_2) def dessiner_carre(self): x1= self.point_1[0] y1= self.point_1[1] x2= self.point_2[0] y2= self.point_2[1] x3= self.point_3[0] y3= self.point_3[1] x4= self.point_4[0] y4= self.point_4[1] X = [x1,x2,x3,x4,x1] Y = [y1,y2,y3,y4,y1] return X,Y nbEtapes = 70 #couleur= "red" mon_triangle = Triangle((0,8.9),(-0.8,11.8),(9,17.4)) X, Y = mon_triangle.dessiner_triangle() mon_triangle = Triangle((0.4,5.9),(1.5,12),(10.1,14.1)) X1, Y1 = mon_triangle.dessiner_triangle() mon_triangle = Triangle((0.6,4.1),(2,8),(11.5,10.3)) X2, Y2 = mon_triangle.dessiner_triangle() mon_carre = carre((0,0),(0,16),(20,16),(20,0)) X3, Y3 = mon_carre.dessiner_carre() #mon_triangle.deformation(np.array([4, 14, 7, 5, 9, 16]),np.array([16, 7, 9, 6, 10, 11])) fig, ax = plt.subplots() ### AJOUT PAR PIERRE AIN plt.axis('equal') plt.axis('off') ######### #ax.fill(X3, Y3,c = "blue") #ax.fill(X2, Y2, c = "red") #ax.fill(X1, Y1, c = "orange") #ax.fill(X, Y, c = "yellow") #line, = plt.plot([], []) taille = len(X) NbreDefor = 150 def modification(ax,xDepart,yDepart,xArrivee,yArrivee,nbEtapes,couleur): xDepart, yDepart, xArrivee, yArrivee = np.array(xDepart), np.array(yDepart), np.array(xArrivee), np.array(yArrivee) artists = [] for etape in range(1, nbEtapes + 2): #Les coordonées pour chaque étape sont calculées en fonction des valeurs de XD, YD et XA, YA, # permettant une transition progressive des points entre les deux polygones. xInter = xDepart + etape * (xArrivee - xDepart) /(nbEtapes + 1) yInter = yDepart + etape * (yArrivee - yDepart) / (nbEtapes + 1) line = ax.fill(xInter, yInter, couleur)[0] #Les objets de ligne et de remplissage sont ajoutés à la liste d'artistes (artists) pour chaque étape de l'animation. artists.append(line) return artists def memeTemps(liste): artist = [] for i in range(len(liste[0])): artist.append([]) for element in range(len(liste)): artist[-1].append(liste[element][i]) return artist def aggrandissement(xDepart,yDepart,coef): xDepart, yDepart = np.array(xDepart), np.array(yDepart) xDepart =xDepart*coef yDepart=yDepart*coef return xDepart,yDepart new_triangle = Triangle((5,2),(8,2),(8,4)) X_new1 , Y_new1 = new_triangle.dessiner_triangle() new_triangle1 = Triangle((10,2),(13,2),(10,4)) X_new2 , Y_new2 = new_triangle1.dessiner_triangle() new_carre = carre((11,4),(11,9),(7,9),(7,4)) X3_new2 , Y3_new2 = new_carre.dessiner_carre() X3_new1 , Y3_new1 = aggrandissement(X3,Y3,0.2) new_triangle2 = Triangle((9,9),(11,12),(7,12)) X_new3 , Y_new3 = new_triangle2.dessiner_triangle() new_triangle4 = Triangle((5,6),(7,8),(5,8)) X_new4 , Y_new4 = new_triangle4.dessiner_triangle() new_triangle5 = Triangle((13,6),(13,8),(11,8)) X_new5 , Y_new5 = new_triangle5.dessiner_triangle() new_carre2 = carre((0,0),(1,20),(18,20),(20,0)) X_new6 , Y_new6 = new_carre2.dessiner_carre() C2 = modification(ax,X3,Y3,X_new6,Y_new6,nbEtapes,"green") C1 = modification(ax,X3,Y3,X3_new2,Y3_new2,nbEtapes,"blue") T1 = modification(ax,X,Y,X_new1,Y_new1,nbEtapes,"red") T2 = modification(ax,X2,Y2,X_new2,Y_new2,nbEtapes,"red") T3 = modification(ax,X1,Y1,X_new3, Y_new3,nbEtapes,"orange") T5 = modification(ax,X,Y,X_new5, Y_new5,nbEtapes,"yellow") #T4 = modificationTriangle(ax,X1,Y1,X1,X1,nbEtapes,"red") #C = modificationTriangle(ax,X3,Y3,X3_new1,Y3_new1,nbEtapes,"pink") #mon_triangle.remove() T4 = modification(ax,X,Y,X_new4,Y_new4,nbEtapes,"yellow") ensemble = [C2,C1,T1,T3,T2,T4,T5] artist1= memeTemps(ensemble) new_triangle4 = Triangle((5,6),(7,8),(5,8)) X_new4 , Y_new4 = new_triangle4.dessiner_triangle() new_triangle5 = Triangle((13,6),(13,8),(11,8)) X_new5 , Y_new5 = new_triangle5.dessiner_triangle() new_carre2 = carre((0,0),(1,20),(18,20),(20,0)) X_new6 , Y_new6 = new_carre2.dessiner_carre() new_car = carre((2,2),(2,18),(26,18),(26,2)) X_ecole1 , Y_ecole1 = new_car.dessiner_carre() new_car1 = carre((10,2),(14,2),(14,10),(10,10)) X_ecole2 , Y_ecole2 = new_car1.dessiner_carre() new_car3 = carre((14,2),(18,2),(18,10),(14,10)) X_ecole3 , Y_ecole3 = new_car3.dessiner_carre() #X_ecole4 , Y_ecole4 = aggrandissement(X3,Y3,0.2) new_car4 = carre((4,12),(8,12),(8,16),(4,16)) X_ecole4 , Y_ecole4 = new_car4.dessiner_carre() #new_carre5 = carre((20,12),(24,12),(24,16),(20,16)) #X_ecole5 , Y_ecole5 = new_carre5.dessiner_carre() #new_triangle = Triangle((9,9),(11,12),(7,12)) #X_ecole5 , Y_ecole5 = new_triangle.dessiner_triangle() #sleep(1) new_triangle = Triangle((2,18),(12,18),(7,23)) X_ecole6 , Y_ecole6 = new_triangle.dessiner_triangle() new_triangle2= Triangle((16,18),(26,18),(21,23)) X_ecole7 , Y_ecole7 = new_triangle2.dessiner_triangle() new_triangle3 = Triangle((6,18),(22,18),(14,26)) X_ecole8 , Y_ecole8 = new_triangle3.dessiner_triangle() D1 = modification(ax,X_new6 , Y_new6,X_ecole1 , Y_ecole1 ,nbEtapes,"green") D2 = modification(ax,X3_new2,Y3_new2,X_ecole2 , Y_ecole2,nbEtapes,"blue") B1 = modification(ax,X_new1,Y_new1,X_ecole6 , Y_ecole6,nbEtapes,"red") B2 = modification(ax,X_new3, Y_new3,X_ecole7 , Y_ecole7,nbEtapes,"orange") B3 = modification(ax,X_new5, Y_new5,X_ecole8 , Y_ecole8,nbEtapes,"yellow") B4 = modification(ax,X_new4, Y_new4,X_ecole8 , Y_ecole8,nbEtapes,"yellow") B5 = modification(ax,X_new2,Y_new2,X_ecole6 , Y_ecole6,nbEtapes,"red") ensemble1 = [B2,B1,D1,B3,D2,B4,B5] artist2= memeTemps(ensemble1) new_carre = carre((5,7),(5,9),(3,9),(3,7)) X_bal1 , Y_bal1 = new_carre.dessiner_carre() new_carre1 = carre((14.5,24),(14.5,26),(12.5,26),(12.5,24)) X_bal2 , Y_bal2 = new_carre1.dessiner_carre() new_carre3 = carre((24,7),(24,9),(22,9),(22,7)) X_bal3 , Y_bal3 = new_carre3.dessiner_carre() new_carre4 = carre((18,18),(18,20),(16,20),(16,18)) X_bal4 , Y_bal4 = new_carre4.dessiner_carre() #new_carre5 = carre((20,12),(24,12),(24,16),(20,16)) #X_ecole5 , Y_ecole5 = new_carre5.dessiner_carre() new_triangle = Triangle((4,2),(6,6),(2,6)) X_bal5 , Y_bal5 = new_triangle.dessiner_triangle() new_triangle1 = Triangle((13.5,19),(15.5,23),(11.5,23)) X_bal6 , Y_bal6 = new_triangle1.dessiner_triangle() new_triangle2= Triangle((23,2),(25,6),(21,6)) X_bal7 , Y_bal7 = new_triangle2.dessiner_triangle() #new_triangle3 = Triangle((6,18),(22,18),(14,26)) #X_ecole8 , Y_ecole8 = new_triangle3.dessiner_triangle() Q1 = modification(ax,X_ecole8 , Y_ecole8,X_bal5 , Y_bal5,nbEtapes,"yellow") Q2 = modification(ax,X_ecole7 , Y_ecole7,X_bal6 , Y_bal6 ,nbEtapes,"orange") Q3 = modification(ax,X_ecole6 , Y_ecole6,X_bal7 , Y_bal7,nbEtapes,"red") Q7 = modification(ax,X_ecole1 , Y_ecole1,X_bal4 , Y_bal4,nbEtapes,"green") Q4 = modification(ax,X_ecole2 , Y_ecole2,X_bal1 , Y_bal1,nbEtapes,"blue") Q5 = modification(ax,X_ecole2 , Y_ecole2,X_bal2 , Y_bal2,nbEtapes,"blue") Q6 = modification(ax,X_ecole2 , Y_ecole2,X_bal3 , Y_bal3,nbEtapes,"blue") #T4 = modification(ax,X_new4, Y_new4,X_ecole8 , Y_ecole8,nbEtapes,"yellow") #T5 = modification(ax,X_new2, Y_new2,X_ecole7 , Y_ecole7,nbEtapes,"orange") ensemble2 = [Q1,Q2,Q3,Q4,Q5,Q6,Q7] artist3= memeTemps(ensemble2) new_carre5 = carre((20,2),(20,4),(18,4),(18,2)) X_bal8 , Y_bal8 = new_carre5.dessiner_carre() H1 = modification(ax,X_bal4 , Y_bal4,X_bal8 , Y_bal8,nbEtapes,"green") h1 = modification(ax,X_bal5 , Y_bal5,X_bal5 , Y_bal5,nbEtapes,"yellow") h2 = modification(ax,X_bal6 , Y_bal6,X_bal6 , Y_bal6 ,nbEtapes,"orange") h3 = modification(ax,X_bal7 , Y_bal7,X_bal7 , Y_bal7,nbEtapes,"red") h4 = modification(ax,X_bal1 , Y_bal1,X_bal1 , Y_bal1,nbEtapes,"blue") h5 = modification(ax,X_bal2 , Y_bal2,X_bal2 , Y_bal2,nbEtapes,"blue") h6 = modification(ax,X_bal3 , Y_bal3,X_bal3 , Y_bal3,nbEtapes,"blue") ensemble3 = [H1,h1,h2,h3,h4,h5,h6] artiste4=memeTemps(ensemble3) new_carre1 = carre((12,14),(14,14),(14,12),(12,12)) X_table2 , Y_table2 = new_carre1.dessiner_carre() new_carre = carre((2,6),(5,9),(21,9),(24,6)) X_table1 , Y_table1 = new_carre.dessiner_carre() new_carre3 = carre((5,6),(6,6),(6,1),(5,1)) X_table3 , Y_table3 = new_carre3.dessiner_carre() new_carre4 = carre((7,6),(8,6),(8,3),(7,3)) X_table4 , Y_table4 = new_carre4.dessiner_carre() #new_carre5 = carre((20,12),(24,12),(24,16),(20,16)) #X_ecole5 , Y_ecole5 = new_carre5.dessiner_carre() new_triangle = Triangle((11,11),(15,11),(13,5)) X_table5 , Y_table5 = new_triangle.dessiner_triangle() new_carre5 = carre((18,6),(19,6),(19,3),(18,3)) X_table6 , Y_table6 = new_carre5.dessiner_carre() new_carre6 = carre((20,6),(21,6),(21,1),(20,1)) X_table7 , Y_table7 = new_carre6.dessiner_carre() new_carre7 = carre((16,7),(16,8),(17,8),(17,7)) X_table8 , Y_table8 = new_carre7.dessiner_carre() new_carre8 = carre((13,5),(11,2),(13,3.5),(15,2)) X_table9 , Y_table9 = new_carre8.dessiner_carre() p9 = modification(ax,X_bal8 , Y_bal8,X_table1 , Y_table1,nbEtapes,"green") p10 = modification(ax,X_bal3 , Y_bal3,X_table8 , Y_table8,nbEtapes,"gold") p11 = modification(ax,X_bal8 , Y_bal8,X_table9 , Y_table9,nbEtapes,"green") p1 = modification(ax,X_bal5 , Y_bal5,X_table5 , Y_table5,nbEtapes,"yellow") p2 = modification(ax,X_bal6 , Y_bal6,X_table5 , Y_table5 ,nbEtapes,"orange") p3 = modification(ax,X_bal7 , Y_bal7,X_table5 , Y_table5,nbEtapes,"red") p4 = modification(ax,X_bal1 , Y_bal1,X_table2 , Y_table2,nbEtapes,"blue") p5 = modification(ax,X_bal2 , Y_bal2,X_table3 , Y_table3,nbEtapes,"blue") p6 = modification(ax,X_bal3 , Y_bal3,X_table4 , Y_table4,nbEtapes,"blue") p7 = modification(ax,X_bal3 , Y_bal3,X_table7 , Y_table7,nbEtapes,"blue") p8 = modification(ax,X_bal3 , Y_bal3,X_table6 , Y_table6,nbEtapes,"blue") ensemble4 = [p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11] artist5=memeTemps(ensemble4) new_carre = carre((4,4),(22,4),(22,26),(4,26)) X_note1 , Y_note1 = new_carre.dessiner_carre() new_carre1 = carre((6,17),(12,17),(12,19),(6,19)) X_note2 , Y_note2 = new_carre1.dessiner_carre() new_carre3 = carre((10,16),(12,16),(12,17),(10,17)) X_note3 , Y_note3 = new_carre3.dessiner_carre() new_carre4 = carre((6,14),(12,14),(12,16),(6,16)) X_note4 , Y_note4 = new_carre4.dessiner_carre() new_triangle = Triangle((15,15),(15,16),(16,15)) X_note5 , Y_note5 = new_triangle.dessiner_triangle() new_carre5 = carre((6,13),(8,13),(8,14),(6,14)) X_note6 , Y_note6 = new_carre5.dessiner_carre() new_carre6 = carre((6,11),(12,11),(12,13),(6,13)) X_note7 , Y_note7 = new_carre6.dessiner_carre() new_carre7 = carre((14,17),(20,17),(20,19),(14,19)) X_note8 , Y_note8 = new_carre7.dessiner_carre() new_carre8 = carre((14,13),(16,13),(16,17),(14,17)) X_note9 , Y_note9 = new_carre8.dessiner_carre() new_carre9 = carre((18,13),(20,13),(20,17),(18,17)) X_note10 , Y_note10 = new_carre9.dessiner_carre() new_carre10 = carre((14,11),(20,11),(20,13),(14,13)) X_note11 , Y_note11 = new_carre10.dessiner_carre() n10 = modification(ax,X_table8 , Y_table8,X_note1 , Y_note1,nbEtapes,"gold") n2 = modification(ax,X_table2 , Y_table2,X_note4 , Y_note4,nbEtapes,"orange") n9 = modification(ax,X_table1 , Y_table1,X_note2 , Y_note2,nbEtapes,"green") n11 = modification(ax,X_table7 , Y_table7,X_note3 , Y_note3,nbEtapes,"green") n1 = modification(ax,X_table3 , Y_table3,X_note6 , Y_note6,nbEtapes,"yellow") n3 = modification(ax,X_table5 , Y_table5,X_note5 , Y_note5,nbEtapes,"red") n4 = modification(ax,X_table2 , Y_table2,X_note8 , Y_note8,nbEtapes,"black") n5 = modification(ax,X_table3 , Y_table3,X_note9 , Y_note9,nbEtapes,"red") n6 = modification(ax,X_table9 , Y_table9,X_note11 , Y_note11,nbEtapes,"green") n12 = modification(ax,X_table4 , Y_table4,X_note11 , Y_note11,nbEtapes,"blue") n7 = modification(ax,X_table7 , Y_table7,X_note10 , Y_note10,nbEtapes,"teal") p8 = modification(ax,X_bal3 , Y_bal3,X_note7 , Y_note7,nbEtapes,"blue") ensemble5 = [n1,n2,n3,n4,n5,n6,n7,n9,n10,n11,p8,n12] artist6=memeTemps(ensemble5) a12 = modification(ax,X_note1 , Y_note1,X3, Y3,nbEtapes,"white") a1 = modification(ax,X_note8 , Y_note8,X3, Y3,nbEtapes,"green") a2 = modification(ax,X_note8 , Y_note8,X3, Y3,nbEtapes,"blue") a6 = modification(ax,X_note7 , Y_note7,X3, Y3,nbEtapes,"blue") a7 = modification(ax,X_note6 , Y_note6,X3, Y3,nbEtapes,"blue") a9 = modification(ax,X_note4 , Y_note4,X3, Y3,nbEtapes,"blue") a10 = modification(ax,X_note3 , Y_note3,X3, Y3,nbEtapes,"blue") a11 = modification(ax,X_note2 , Y_note2,X3, Y3,nbEtapes,"blue") a15 = modification(ax,X_note9 , Y_note9,X3, Y3,nbEtapes,"blue") a13 = modification(ax,X_note10 , Y_note10,X3, Y3,nbEtapes,"blue") a14 = modification(ax,X_note11 , Y_note11,X3, Y3,nbEtapes,"blue") a5 = modification(ax,X_note5 , Y_note5,X2, Y2,nbEtapes,"red") a3 = modification(ax,X_note5 , Y_note5,X1, Y1,nbEtapes,"orange") a4 = modification(ax,X_note5 , Y_note5,X, Y,nbEtapes,"yellow") #a6 = modification(ax,X_bal3 , Y_bal3,X_new5, Y_new5,nbEtapes,"yellow") #ax.fill(X3, Y3,c = "blue") #ax.fill(X2, Y2, c = "red") #ax.fill(X1, Y1, c = "orange") #ax.fill(X, Y, c = "yellow") ensemble6 = [a1,a2,a3,a4,a5,a6,a7,a9,a10,a11,a12,a13,a14,a15] artist7=memeTemps(ensemble6) artist = artist1+artist2+artist3+artiste4+artist5+artist6 + artist7 ani = ArtistAnimation(fig, artist, repeat= False , interval=1) #plt.show() from matplotlib.animation import PillowWriter ani.save("Larry-Rayane-Briac-Theo v2.gif", writer=PillowWriter(fps=60))

Equipe Lucas Emilien Lucas Maxime Clement
Prix : cohérence, entraide et communication
Code informatique en Python -> cliquer
import matplotlib.pyplot as plt from matplotlib.animation import ArtistAnimation import numpy as np from math import * frames = 100 def movefigurefill(X,Y,Xtarget,Ytarget,frames,c): animation=[] for frame in range(1,frames+2): NewFigureX = X + frame * (Xtarget - X) / (frames+1) NewFigureY = Y + frame * (Ytarget - Y) / (frames+1) animation.append([ax.fill(NewFigureX, NewFigureY, c=c)[0]]) for _ in range(20): animation.append(([ax.fill(Xtarget, Ytarget, c=c)[0]])) return animation def movefigurefillcolor(X,Y,Xtarget,Ytarget,frames,CD,CF): #CD est la couleur de départ er CF la couleur de fin animation=[] for frame in range(1,frames+2): NewFigureX = X + frame * (Xtarget - X) / (frames+1) NewFigureY = Y + frame * (Ytarget - Y) / (frames+1) NewC = CD + frame * (CF - CD) / (frames + 1) animation.append([ax.fill(NewFigureX, NewFigureY, c=NewC)[0]]) for _ in range(20): animation.append(([ax.fill(Xtarget, Ytarget, c=CF)[0]])) return animation def movefigureplot(X,Y,Xtarget,Ytarget,frames,c,ls='-',lw=1): animation=[] for frame in range(1,frames+2): NewFigureX = X + frame * (Xtarget - X) / (frames+1) NewFigureY = Y + frame * (Ytarget - Y) / (frames+1) animation.append([ax.plot(NewFigureX, NewFigureY, c=c, ls=ls, lw=lw)[0]]) for _ in range(20): animation.append(([ax.plot(Xtarget, Ytarget, c=c, ls=ls, lw=lw)[0]])) return animation def movetext(X,Y,Xtarget,Ytarget,frames): animation=[] for frame in range(1,frames+2): NewFigureX = X + frame * (Xtarget - X) / (frames+1) NewFigureY = Y + frame * (Ytarget - Y) / (frames+1) animation.append([ax.text(NewFigureX, NewFigureY, s="NDLR", size=35, weight=500, c="white")]) for _ in range(20): animation.append([ax.text(Xtarget, Ytarget, s="NDLR", size=35, weight=500, c="white")]) return animation def cercle(xcentre,ycentre,rayon): cercleX=np.array([]) cercleY=np.array([]) for angle in range(362): cercleX = np.hstack((cercleX,np.array([xcentre+cos(radians(angle))*rayon]))) cercleY = np.hstack((cercleY,np.array([ycentre+sin(radians(angle))*rayon]))) return cercleX,cercleY fig, ax = plt.subplots() # Logo nldr c1x=np.array([0,0,13.6,13.6,13.6, 0,0]) c1y=np.array([0,0,0,13.6, 13.6,13.6,0]) tJx=np.array([0,-0.8,9,0]) tJy=np.array([7.9,11.8,17.4,7.9]) tOx=np.array([0.4,2,10.3,0.4]) tOy=np.array([5.9,11.7,14.1,5.9]) tRx=np.array([0.6,0.6,11.5,2.85,0.6]) tRy=np.array([4.1,4.1,10.3,9.2,4.1,]) ax.axis("equal") ax.axis("off") ax.set_xlim(0,18) ax.set_ylim(0,18) carre, = ax.fill(c1x, c1y, c="blue") triangleR, = ax.fill(tRx, tRy, c="red") triangleO, = ax.fill(tOx, tOy, c="orange") triangleJ, = ax.fill(tJx, tJy, c="yellow") NDLR = ax.text(6, 2, s="NDLR", size=35, weight=500, c="white") plt.pause(1) # coodonnés de la prochaine étape Xchemin=np.array([2,2,13,10,5,5,2])*2-7 Ychemin=np.array([0,0,0,10,10,10,0])*2 jambex=np.array([-0.25,1,2.25,1,-0.25])+5 jambey=np.array([0,2,0,4.5,0]) bras1x=np.array([-0.25,1,1,-0.25])+5 bras1y=np.array([4,4.5,5.5,4]) bras2x=np.array([1,1,2.25,1])+5 bras2y=np.array([5.5,4.5,4,5.5]) centre_tete_x=0 centre_tete_y=14 taille_tete=0 tete1x,tete1y = cercle(centre_tete_x,centre_tete_y,taille_tete) centre_tete_x=1+5 centre_tete_y=6.5 taille_tete=0.75 tete2x,tete2y = cercle(centre_tete_x,centre_tete_y,taille_tete) # supression des figures tracés triangleR.remove() triangleJ.remove() triangleO.remove() carre.remove() NDLR.remove() # animation animationcarre = movefigurefill(c1x,c1y,Xchemin,Ychemin,frames,"blue") animationNDLR = movetext(6,2,14,-10,frames) animationtriangleR = movefigurefill(tRx,tRy,jambex,jambey,frames,"red") animationtriangleO = movefigurefill(tOx,tOy,bras2x,bras2y,frames,"orange") animationtriangleJ = movefigurefill(tJx,tJy,bras1x,bras1y,frames,"yellow") animationtete = movefigurefill(tete1x,tete1y,tete2x,tete2y,frames,(1,225/255,205/255)) animation = [animationtriangleR[i] + animationtriangleO[i] + animationtriangleJ[i] + animationcarre[i] + animationNDLR[i] + animationtete[i] for i in range(frames+21)] # etape 3 animationcarre = movefigurefill(Xchemin,Ychemin,Xchemin,Ychemin,frames,"blue") animationtriangleR = movefigurefill(jambex,jambey,jambex,jambey,frames,"red") animationtriangleO = movefigurefill(bras2x,bras2y,bras2x,bras2y,frames,"orange") animationtriangleJ = movefigurefill(bras1x,bras1y,bras1x,bras1y,frames,"yellow") animationtete = movefigurefill(tete2x,tete2y,tete2x,tete2y,frames,(1,225/255,205/255)) #dnnés copain copain_jambeX, copain_jambeY = jambex+5,jambey copain_bras1X, copain_bras1Y = bras1x+5,bras1y copain_bras2X, copain_bras2Y = bras2x+5,bras2y copain_teteX, copain_teteY = tete2x+5,tete2y lignesRouteX=np.array([8,8]) lignesRouteY=np.array([21,100]) lignesRouteAnimation=movefigureplot(lignesRouteX,lignesRouteY,lignesRouteX,lignesRouteY-30, frames, "white",ls="--", lw=5) copain_animationtriangleR = movefigurefillcolor(jambex,jambey,copain_jambeX, copain_jambeY,frames,np.array((1,0,0)),np.array((156/255,10/255,134/255))) copain_animationtriangleO = movefigurefillcolor(bras2x,bras2y,copain_bras2X, copain_bras2Y,frames,np.array((1,1/2,0)), np.array((244/255,85/255,212/255))) copain_animationtriangleJ = movefigurefillcolor(bras1x,bras1y,copain_bras1X, copain_bras1Y,frames,np.array((1,1,0)), np.array((244/255,85/255,212/255))) copain_animationtete = movefigurefill(tete2x,tete2y,copain_teteX, copain_teteY,frames,(1,225/255,205/255)) animation += [animationtriangleR[i] + animationtriangleO[i] + animationtriangleJ[i] + animationcarre[i] + animationtete[i]+ copain_animationtriangleR[i] + copain_animationtriangleO[i] + copain_animationtriangleJ[i] + copain_animationtete[i] + lignesRouteAnimation[i] for i in range(frames+21)] # estape 4 Xlivre=np.array([4,6.5,9,9,6.5,4,4])*1.5-1.7 Ylivre=np.array([9,8.5,9,14,13.5,14,9])*1.5-7 jambeX3, jambeY3 = jambex*1.2-4,jambey*1.2 bras1X3, bras1Y3 = bras1x*1.2-4,bras1y*1.2 bras2X3, bras2Y3 = bras2x*1.2-4,bras2y*1.2 teteX3, teteY3 = tete2x*1.2-4,tete2y*1.2 ligne1X = np.array([4.25,6.25]*181)+0.9 ligne1Y = np.array([13,12.6]*181)-3 ligne2X = np.array([6.75,8.75]*2+[6.75])+2.4 ligne2Y = np.array([12.6,13]*2+[12.6])-1 ligne3X = np.array([6.75,8.75]*2)+2.4 ligne3Y = np.array([12.6,13]*2)-3 ligne4X = np.array([6.75,8.75]*2)+2.4 ligne4Y = np.array([12.6,13]*2)-5 animationcarre = movefigurefillcolor(Xchemin,Ychemin,Xlivre,Ylivre,frames,np.array((0,0,1)),np.array((255/300,250/300,180/300))) lignesRouteAnimation=movefigureplot(lignesRouteX,lignesRouteY-30,lignesRouteX,lignesRouteY-30, frames, "white",ls="--", lw=5) lignesLivreAnimation=movefigureplot(lignesRouteX,lignesRouteY,lignesRouteX,lignesRouteY-30, frames, "white", lw=5) animationtriangleR = movefigurefill(jambex,jambey,jambeX3, jambeY3,frames,"red") animationtriangleO = movefigurefill(bras2x,bras2y,bras2X3, bras2Y3,frames,"orange") animationtriangleJ = movefigurefill(bras1x,bras1y,bras1X3, bras1Y3,frames,"yellow") animationtete = movefigurefill(tete2x,tete2y,teteX3, teteY3,frames,(1,225/255,205/255)) copain_animationtete = movefigurefillcolor(copain_teteX, copain_teteY,ligne1X,ligne1Y,frames,np.array((1,225/255,205/255)),np.array((0,0,0))) copain_animationtriangleR = movefigurefillcolor(copain_jambeX, copain_jambeY,ligne2X,ligne2Y,frames,np.array((156/255,10/255,134/255)),np.array((0,0,0))) copain_animationtriangleO = movefigurefillcolor(copain_bras2X, copain_bras2Y,ligne3X,ligne3Y,frames,np.array((244/255,85/255,212/255)), np.array((0,0,0))) copain_animationtriangleJ = movefigurefillcolor(copain_bras1X, copain_bras1Y,ligne4X,ligne4Y,frames,np.array((244/255,85/255,212/255)), np.array((0,0,0))) animation += [animationtriangleR[i] + animationtriangleO[i] + animationtriangleJ[i] + animationcarre[i] + animationtete[i]+ lignesRouteAnimation[i] + lignesLivreAnimation[i] + copain_animationtete[i] + copain_animationtriangleO[i] + copain_animationtriangleJ[i] + copain_animationtriangleR[i] for i in range(frames+21)] #étape5 Xchapeau=np.array([0.5,0.5,0.5,1.5,1.5,0.5,0.5])*2+5 Ychapeau=np.array([7,7,8,8,7,7,7])*2 Xhaut=np.array([0.15,1.85]*2)*2+5 Yhaut=np.array([8,8]*2)*2 xQ=np.array([1.85,2,2.15,1.85])*2+5 yQ=np.array([8,7.25,7.5,8])*2 jambe4x=np.array([-0.25,1,2.25,1,-0.25])*2+5 jambe4y=np.array([0,2,0,4.5,0])*2 bras1x=np.array([-0.25,1,1,-0.25])*2+5 bras1y=np.array([4,4.5,5.5,4])*2 bras2x=np.array([1,1,2.25,1])*2+5 bras2y=np.array([5.5,4.5,4,5.5])*2 tetemilieuX=1 tetemilieuY=6.5 tailletete=0.75 tete4x,tete4y = cercle(tetemilieuX,tetemilieuY,tailletete) tete4x,tete4y = tete4x*2+5,tete4y*2 lignesLivreAnimation=movefigureplot(lignesRouteX,lignesRouteY-90,lignesRouteX,lignesRouteY-140, frames, "white", lw=5) animationcarre = movefigurefillcolor(Xlivre,Ylivre,Xchapeau,Ychapeau,frames,np.array((255/300,250/300,180/300)),np.array((0,0,0))) copain_animationtriangleJ = movefigurefill(ligne4X,ligne4Y,Xhaut,Yhaut,frames,(0,0,0)) copain_animationtriangleO = movefigurefillcolor(ligne3X,ligne3Y,xQ,yQ,frames,np.array((0,0,0)), np.array((1,0,0))) animationtriangleR = movefigurefill(jambeX3, jambeY3,jambe4x,jambe4y,frames,"red") animationtriangleO = movefigurefill(bras2X3, bras2Y3,bras2x,bras2y,frames,"orange") animationtriangleJ = movefigurefillcolor(bras1X3, bras1Y3,bras1x,bras1y,frames,np.array((1,1,0)),np.array((1,0.5,0))) animationtete = movefigurefill(teteX3, teteY3,tete4x,tete4y,frames,(1,225/255,205/255)) animation += [animationcarre[i] + animationtriangleR[i] + animationtriangleO[i] + animationtriangleJ[i] + animationtete[i] + copain_animationtriangleJ[i]+ lignesLivreAnimation[i]+ copain_animationtriangleO[i] for i in range(frames+21)] # etape retour chapeau_xr, chapeau_yr = Xchapeau,Ychapeau trianglec_xr, trianglec_yr = xQ,yQ bras_1xr,bras_2xr,bras_1yr,bras_2yr = bras1x,bras2x,bras1y,bras2y jambes_xr,jambes_yr = jambe4x,jambe4y tete_xr, tet_yr = tete4x,tete4y carreFinX=np.array([0,0,13.6,13.6]) carreFinY=np.array([0,13.6,13.6,0]) tetemilieuX=14 tetemilieuY=0 tailletete=0 tete_xr,tete_yr = cercle(tetemilieuX,tetemilieuY,tailletete) animationcarre = movefigurefillcolor(chapeau_xr, chapeau_yr,c1x,c1y,frames,np.array((0,0,0)),np.array((0,0,1))) animationcarre2 = movefigurefillcolor(Xhaut,Yhaut,carreFinX,carreFinY,frames,np.array((0,0,0)),np.array((0,0,1))) animationNDLR = movetext(14,-10,6,2,frames) animationtriangleR = movefigurefill(jambes_xr,jambes_yr,tRx,tRy,frames,"red") animationtriangleO1 = movefigurefill(bras_1xr,bras_1yr,tOx,tOy,frames,"orange") animationtriangleO2 = movefigurefill(bras_2xr,bras_2yr,tOx,tOy,frames,"orange") animationtriangleJ = movefigurefillcolor(trianglec_xr, trianglec_yr,tJx,tJy,frames,np.array((1,0,0)),np.array((1,1,0))) animationtete = movefigurefill(tete4x,tete4y,tete_xr,tete_yr,frames,(1,225/255,205/255)) animation += [animationcarre[i] + animationtete[i] + animationcarre2[i]+ animationtriangleR[i] + animationtriangleO1[i] + animationtriangleO2[i] + animationNDLR[i] + animationtriangleJ[i] for i in range(frames+21)] ani = ArtistAnimation(fig,animation, repeat=True, interval=1) plt.show() # from matplotlib.animation import PillowWriter # ani.save("GilbertAdventure.gif", writer=PillowWriter(fps=30))

Equipe : Malo Julie Yann Arthus
Prix : créativité, élégance et entraide
Code informatique en Python -> cliquer
### Programme principal import toolbox as tb import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation posXjaune, posYjaune = [np.array([0.0, -2.0, 14.0, 0.0]), np.array([6.0, 7.0, 6.0, 6.0, 5.0, 5.0, 4.0, 5.0, 6.0]), np.array([3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 6.0, 8.0, 6.0, 7.0, 7.0, 6.0, 5.0, 4.0, 4.0, 5.0, 2.0, 5.0, 3.0]),np.array([2.0, 2.0, 3.0, 5.0, 4.0, 4.0, 5.0, 6.0, 7.0, 7.0, 6.0, 8.0, 9.0, 9.0, 2.0]),np.array([5.0, 5.0, 6.0, 9.0, 7.0, 7.0, 9.0, 11.0, 13.0, 13.0, 11.0, 14.0, 15.0, 15.0, 5.0]),np.array([2.0, 1.0, 2.0, 2.0, 4.0, 4.0, 5.0, 4.0, 2.0]) ,np.array([0.0, -2.0, 14.0, 0.0])],[np.array([12.0, 17.5, 24.0, 12.0]),np.array([0.0, 4.0, 4.0, 5.0, 5.0, 4.0, 4.0, 0.0, 0.0]),np.array([0.0, 0.0, 2.0, 2.0, 0.0, 0.0, 4.0, 10.0, 10.0, 11.0, 12.0, 13.0, 13.0, 12.0, 11.0, 10.0, 10.0, 4.0, 0.0]),np.array([7.0, 9.0, 10.0, 10.0, 11.0, 12.0, 13.0, 13.0, 12.0, 11.0, 10.0, 10.0, 9.0, 7.0, 7.0]),np.array([0.0, 3.0, 5.0, 5.0, 7.0, 9.0, 11.0, 11.0, 9.0, 7.0, 5.0, 5.0, 3.0, 0.0, 0.0]),np.array([0.0, 5.0, 5.0, 7.0, 7.0, 5.0, 5.0, 0.0, 0.0]),np.array([12.0, 17.5, 24.0, 12.0])] posXorange, posYorange = [ np.array([1.25, 2.0, 15.0, 1.25]),np.array([10.0, 11.0, 12.0, 12.0, 11.0, 10.0, 9.0, 9.0, 10.0]), np.array([8.5, 9.0, 10.0, 11.0, 11.5, 11.0, 10.0, 9.0, 8.5]),np.array([1.0, 1.0, 19.0, 19.0, 17.0, 17.0, 3.0, 3.0, 1.0]),np.array([14.0, 13.0, 13.0, 14.0, 14.2, 13.2, 13.4, 14.4, 14.6, 13.8, 14.0, 14.8, 15.0, 14.9, 15.2, 15.5, 15.7, 16.0, 16.0, 15.0, 15.0, 14.0, 14.0, 15.0, 16.0, 17.0, 17.0, 16.0, 15.0, 14.0]), np.array([0.0, 2.0, 4.0, 6.0, 4.0, 3.0, 1.0, 2.0, 4.0, 2.0, 0.0, 0.0]) ,np.array([1.25, 2.0, 15.0, 1.25])], [np.array([8.0, 16.0, 21.0, 8.0]),np.array([20.0, 20.0, 19.0, 18.0, 17.0, 17.0, 18.0, 19.0, 20.0]), np.array([3.0, 2.0, 1.5, 2.0, 3.0, 4.0, 4.5, 4.0, 3.0]),np.array([0.0, 7.0, 7.0, 0.0, 0.0, 2.0, 2.0, 0.0, 0.0]),np.array([13.0, 13.0, 14.0, 13.0, 13.2, 14.4, 14.6, 13.4, 13.6, 14.8, 15.0, 13.8, 14.0, 14.4, 14.5, 15.0, 14.6, 15.0, 15.5, 15.4, 15.0, 15.0, 16.0, 17.0, 17.0, 16.0, 15.0, 14.0, 14.0, 13.0]),np.array([15.0, 13.0, 13.0, 15.0, 14.0, 14.0, 16.0, 18.0, 19.0, 19.0, 17.0, 15.0]),np.array([8.0, 16.0, 21.0, 8.0])] posXrouge, posYrouge = [np.array([3.0, 4.5, 16.5, 3.0]), np.array([2.0, 2.0, 7.0, 7.0, 9.0, 17.0, 19.0, 19.0, 7.0, 7.0, 4.0, 4.0, 2.0]), np.array([12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 15.0, 17.0, 15.0, 16.0, 16.0, 15.0, 14.0, 13.0, 13.0, 14.0, 11.0, 14.0, 12.0]),np.array([12.0, 12.0, 13.0, 14.0, 13.0, 13.0, 14.0, 15.0, 16.0, 16.0, 15.0, 16.0, 17.0, 17.0, 12.0]),np.array([10.0, 10.5, 10.0, 10.0, 10.0, 9.5, 10.0, 10.0, 11.0, 12.0, 11.0, 10.25, 10.0, 9.75, 9.0, 8.0, 9.0, 10.0]), np.array([1.75, 1.75, 2.0, 2.0, 4.0, 4.0, 4.25, 4.25, 4.0, 2.0, 1.75]), np.array([3.0, 4.5, 16.5, 3.0])],[np.array([6.0, 13.0, 16.0, 6.0]), np.array([0.0, 8.0, 8.0, 10.0, 12.0, 12.0, 10.0, 0.0, 0.0, 6.0, 6.0, 0.0, 0.0]),np.array([0.0, 0.0, 2.0, 2.0, 0.0, 0.0, 4.0, 10.0, 10.0, 11.0, 12.0, 13.0, 13.0, 12.0, 11.0, 10.0, 10.0, 4.0, 0.0]),np.array([7.0, 8.0, 9.0, 9.0, 10.0, 11.0, 12.0, 12.0, 11.0, 10.0, 9.0, 9.0, 8.0, 7.0, 7.0]),np.array([7.75, 7.5, 7.25, 4.0, 7.25, 7.5, 7.75, 7.85, 7.0, 8.0, 10.0, 10.0, 9.5, 10.0, 10.0, 8.0, 7.0, 7.85]), np.array([1.0, 5.0, 5.0, 4.0, 4.0, 5.0, 5.0, 1.0, 2.0, 2.0, 1.0]), np.array([6.0, 13.0, 16.0, 6.0])] posXbleu, posYbleu = [np.array([0,20,20,0,0]),np.array([0.0, 20.0, 20.0, 19.0, 19.0, 18.0, 18.0, 16.0, 16.0, 13.0, 13.0, 11.0, 11.0, 8.0, 8.0, 6.0, 6.0, 4.0, 4.0, 0.0, 0.0]), np.array([0.0, 3.0, 5.0, 4.0, 6.0, 8.0, 10.0, 11.0, 9.0, 10.0, 11.0, 12.0, 14.0, 13.0, 13.0, 14.0, 16.0, 17.0, 18.0, 19.0, 18.0, 19.0, 20.0, 20.0, 0.0, 0.0]),np.array([8.0, 9.0, 10.5, 10.5, 13.0, 12.0, 10.5, 10.5, 8.0]) ,np.array([10.0, 10.0, 13.5, 13.0, 11.0, 10.0, 10.0, 6.5, 7.0, 9.0, 10.0, 10.05, 9.95, 9.95, 9.0, 6.0, 7.0, 13.0, 14.0, 11.0, 10.0]), np.array([0.0, 0.0, 20.0, 20.0, 10.0, 10.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 20.0, 20.0, 10.0, 10.0, 20.0, 20.0, 10.0, 10.0, 11.0, 11.0, 14.0, 14.0, 19.0, 19.0, 20.0, 20.0, 19.0, 19.0, 13.0, 13.0, 8.0, 8.0, 9.0, 9.0,8.0,7.0, 6.0, 6.0, 7.0, 7.0, 0.0]), np.array([0,20,20,0,0])], [np.array([0,0,20,20,0]),np.array([0.0, 0.0, 20.0, 20.0, 19.0, 19.0, 14.0, 14.0, 19.0, 19.0, 15.0, 15.0, 17.0, 17.0, 18.0, 18.0, 14.0, 14.0, 20.0, 20.0, 0.0]),np.array([18.0, 20.0, 18.0, 17.0, 16.0, 18.0, 19.0, 18.0, 17.0, 16.0, 17.0, 17.0, 16.0, 17.0, 18.0, 19.0, 19.0, 18.0, 19.0, 18.0, 17.0, 16.0, 17.0, 0.0, 0.0, 18.0]),np.array([4.0, 6.0, 6.0, 4.0, 4.0, 6.0, 6.0, 4.0, 4.0]),np.array([1.05, 2.0, 2.8, 2.05, 2.05, 1.05, 2.0, 2.8, 2.05, 2.05, 1.05, 0.05, 0.05, 1.0, 2.0, 2.0, 0.0, 0.0, 2.0, 2.0, 1.05]),np.array([0.0, 20.0, 20.0, 18.0, 18.0, 17.0, 17.0, 14.0, 14.0, 16.0, 16.0, 15.0, 15.0, 14.0, 14.0, 6.0, 6.0, 5.0, 5.0, 4.0, 4.0, 3.0, 3.0, 4.0, 4.0, 3.0, 3.0, 0.0, 0.0, 2.0, 2.0, 0.0, 0.0, 8.0, 9.0,11.0, 12.0, 12.0, 11.0, 9.0, 8.0, 0.0, 0.0]) , np.array([0,0,20,20,0])] posXtext, posYtext = [np.array([40,40,40,40]),np.array([10.0, 10.0, 11.0, 11.5, 11.5,12.25,12.25,12.8,13.3,13.3,12.8,12.25,12.25, 13.4, 14.0, 14.0, 14.75, 14.75, 16.0, 16.0,16.75,16.75,17.5,17.5,16.75,16.75, 17.0, 18.0, 18.0, 17.0, 18.0, 17.25, 16.5, 16.5, 14.0, 14.0, 13.0, 11.5, 11.0, 11.0, 10.0])],[np.array([5.5,5.5,5.5,5.5]),np.array([5.5, 10.0, 10.0, 8.0, 10.0,10.0,6.25,6.25,7.0,8.4,9.25,9.25,10.0, 10.0, 8.5, 10.0, 10.0, 6.25, 6.25, 10.0,10.0,7.8,8.3,8.9,9.4,10.0, 10.0, 9.25, 8.25, 7.5, 5.5, 5.5, 7.25, 5.5, 5.5, 7.0, 5.5, 5.5, 7.5, 5.5, 5.5])] xmin = 0 xmax = 5 nbx = 151 x = np.linspace(xmin, xmax, nbx) fig = plt.figure() # initialise la figure linejaune, = plt.plot([], [],color="C8") lineorange, = plt.plot([], [],color="C1") linerouge, = plt.plot([], [],color="C3") linebleu, = plt.plot([], [],color="C0") linetext, = plt.plot([], [],color="C0") plt.axis('equal') plt.axis('off') plt.xlim(-15, 35) plt.ylim(-15, 35) def init(): linejaune.set_data(posXjaune[0], posYjaune[0]) lineorange.set_data(posXorange[0], posYorange[0]) linerouge.set_data(posXrouge[0], posYrouge[0]) linebleu.set_data(posXbleu[0], posYbleu[0]) return linejaune, def animate(i): I_tempo = int(str(i /100)[0])-1 I_inter_tempo = int((i / 100 - (I_tempo+1))*100) if I_tempo == -1: Xaparjaune, Yaparjaune = posXjaune[0], posYjaune[0] Xaparorange, Yaparorange = posXorange[0], posYorange[0] Xaparrouge, Yaparrouge = posXrouge[0], posYrouge[0] Xaparbleu, Yaparbleu = posXbleu[0], posYbleu[0] else: if I_inter_tempo < 80 : X1 = posXjaune[I_tempo] X2 = posXjaune[I_tempo + 1] Y1 = posYjaune[I_tempo] Y2 = posYjaune[I_tempo + 1] Xaparjaune, Yaparjaune = tb.calcule_cordonne(X1,Y1,X2,Y2,I_inter_tempo*1.25) X1 = posXorange[I_tempo] X2 = posXorange[I_tempo + 1] Y1 = posYorange[I_tempo] Y2 = posYorange[I_tempo + 1] Xaparorange, Yaparorange = tb.calcule_cordonne(X1,Y1,X2,Y2,I_inter_tempo*1.25) X1 = posXrouge[I_tempo] X2 = posXrouge[I_tempo + 1] Y1 = posYrouge[I_tempo] Y2 = posYrouge[I_tempo + 1] Xaparrouge, Yaparrouge = tb.calcule_cordonne(X1,Y1,X2,Y2,I_inter_tempo*1.25) X1 = posXbleu[I_tempo] X2 = posXbleu[I_tempo + 1] Y1 = posYbleu[I_tempo] Y2 = posYbleu[I_tempo + 1] Xaparbleu, Yaparbleu = tb.calcule_cordonne(X1,Y1,X2,Y2,I_inter_tempo*1.25) else : Xaparjaune, Yaparjaune = X2 = posXjaune[I_tempo + 1] ,posYjaune[I_tempo+1] Xaparorange, Yaparorange = X2 = posXorange[I_tempo + 1] ,posYorange[I_tempo+1] Xaparrouge, Yaparrouge = X2 = posXrouge[I_tempo + 1] ,posYrouge[I_tempo+1] Xaparbleu, Yaparbleu = X2 = posXbleu[I_tempo + 1] ,posYbleu[I_tempo+1] if I_tempo == 0 or I_tempo == 5: X1 = posXtext[I_tempo == 0] X2 = posXtext[not I_tempo == 0] Y1 = posYtext[I_tempo == 0] Y2 = posYtext[not I_tempo == 0] Xapartext, Yapartext = tb.calcule_cordonne(X1,Y1,X2,Y2,I_inter_tempo) else : Xapartext, Yapartext = X2 = posXtext[I_tempo == -1] ,posYtext[I_tempo == -1] linetext.set_data(Xapartext, Yapartext) linejaune.set_data(Xaparjaune, Yaparjaune) lineorange.set_data(Xaparorange, Yaparorange) linerouge.set_data(Xaparrouge, Yaparrouge) linebleu.set_data(Xaparbleu, Yaparbleu) return linejaune ani = animation.FuncAnimation(fig, animate, init_func=init, frames=700, interval=25, blit=False, repeat=True) #plt.show() from matplotlib.animation import PillowWriter ani.save("Malo-Julie-Yann-Arthus v1.gif", writer=PillowWriter(fps=30))
### Module toolbox.py import numpy as np def division_trait(x1, y1, x2, y2, coeff): dX = x2 - x1 dY = y2 - y1 Xnew = x1 + dX* coeff Ynew = y1 + dY* coeff return Xnew, Ynew def calcule_cordonne(X1,Y1,X2,Y2,dist): len1,len2 = len(X1), len(X2) while not len1 == len2 : if len1 < len2: Xnew, Ynew =division_trait(X1[0],Y1[0],X1[1],Y1[1],0.5) X1 = np.insert(X1,1,Xnew) Y1 = np.insert(Y1,1,Ynew) elif len2 < len1: #gg well play Xnew, Ynew =division_trait(X2[0],Y2[0],X2[1],Y2[1],0.5) X2 = np.insert(X2,1,Xnew) Y2 = np.insert(Y2,1,Ynew) len1,len2 = len(X1), len(X2) return division_trait(X1, Y1, X2, Y2, dist/100) #return [1,2] , [2,3]

Equipe : Paul Abdel Melvyn Charles Raphael
Prix : originalité, persévérance et communication
Code informatique en Python -> cliquer
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import ArtistAnimation from random import random, randint nbEtapes = 60 artists = [] #animation 1 XDC = [0, 0, 14, 14] YDC = [0, 14, 14, 0] XAC = [0, 20, 20, 0] YAC = [20, 20, -2, -2] XDC, YDC, XAC, YAC = np.array(XDC), np.array(YDC), np.array(XAC), np.array(YAC) CDC = [0, 0, 0.63] CAC = [0, 0, 0.63] CDC, CAC = np.array(CDC), np.array(CAC) XDTJ1 = [-0.8, 9, 0, 0] YDTJ1 = [13, 17.4, 8.9, 8.9] XATJ1 = [14.5, 14.5, 14.2, 14.2] YATJ1 = [6, 3, 3, 6] XDTJ1, YDTJ1, XATJ1, YATJ1 = np.array(XDTJ1), np.array(YDTJ1), np.array(XATJ1), np.array(YATJ1) CDTJ1 = [1, 0.85, 0] CATJ1 = [1, 0.85, 0] CDTJ1, CATJ1 = np.array(CDTJ1), np.array(CATJ1) XDTJ2 = [-0.8, 9, 0, -0.8] YDTJ2 = [13, 17.4, 8.9, 13] XATJ2 = [14.5, 14.5, 14.2, 14.5] YATJ2 = [3, 2, 3, 3] XDTJ2, YDTJ2, XATJ2, YATJ2 = np.array(XDTJ2), np.array(YDTJ2), np.array(XATJ2), np.array(YATJ2) CDTJ2 = [1, 0.85, 0] CATJ2 = [0, 0, 0] CDTJ2, CATJ2 = np.array(CDTJ2), np.array(CATJ2) XDTR1 = [1.7, 10.7, 0.5, 1.7] YDTR1 = [8, 11, 3.5, 8] XATR1 = [9, 9, 5, 5] YATR1 = [8, 2, 1, 7] XDTR1, YDTR1, XATR1, YATR1 = np.array(XDTR1), np.array(YDTR1), np.array(XATR1), np.array(YATR1) CDTR1 = [0.82, 0, 0] CATR1 = [0.82, 0, 0] CDTR1, CATR1 = np.array(CDTR1), np.array(CATR1) XDTR2 = [1.7, 10.7, 0.5, 1.7] YDTR2 = [8, 11, 3.5, 8] XATR2 = [9, 9, 13, 13] YATR2 = [8, 2, 1, 7] XDTR2, YDTR2, XATR2, YATR2 = np.array(XDTR2), np.array(YDTR2), np.array(XATR2), np.array(YATR2) CDTR2 = [0.82, 0, 0] CATR2 = [0.82, 0, 0] CDTR2, CATR2 = np.array(CDTR2), np.array(CATR2) XDTO = [1.5, 10.1, 0.4, 1.5] YDTO = [12, 14.1, 5.9, 12] XATO = [0.5, 4.5, 0.5, 0.5] YATO = [3, 6.5, 6.5, 3] XDTO, YDTO, XATO, YATO = np.array(XDTO), np.array(YDTO), np.array(XATO), np.array(YATO) CDTO = [0.98,0.59,0.2] CATO = [0.98,0.59,0.2] CDTO, CATO = np.array(CDTO), np.array(CATO) xMax, yMax = 25, 25 taille_TO = len(XATO) taille_TR1 = len(XATR1) taille_TR2 = len(XATR2) taille_TJ1 = len(XATJ1) taille_TJ2 = len(XATJ2) taille_C = len(XAC) fig, ax = plt.subplots(figsize=(8, 8)) ax.axis('equal') ax.axis('off') ax.axis([-5, xMax, -5, yMax]) for i in range (20): artists.append([ax.fill(XDC, YDC, c = CDC)[0],ax.fill(XDTR1, YDTR1, c = CDTR1)[0], ax.fill(XDTO, YDTO, c = CDTO)[0], ax.fill(XDTJ1, YDTJ1, c = CDTJ1)[0]]) for etape in range(1, nbEtapes + 2): XRC = XDC + etape * (XAC - XDC) / (nbEtapes + 1) YRC = YDC + etape * (YAC - YDC) / (nbEtapes + 1) CRC = CDC + etape * (CAC - CDC) / (nbEtapes + 1) color = (CRC[0], CRC[1], CRC[2]) fillC = ax.fill(XRC, YRC, color=color)[0] XRTR1 = XDTR1 + etape * (XATR1 - XDTR1) / (nbEtapes + 1) YRTR1 = YDTR1 + etape * (YATR1 - YDTR1) / (nbEtapes + 1) CRTR1 = CDTR1 + etape * (CATR1 - CDTR1) / (nbEtapes + 1) color = (CRTR1[0], CRTR1[1], CRTR1[2]) fillTR1 = ax.fill(XRTR1, YRTR1, color=color)[0] XRTR2 = XDTR2 + etape * (XATR2 - XDTR2) / (nbEtapes + 1) YRTR2 = YDTR2 + etape * (YATR2 - YDTR2) / (nbEtapes + 1) CRTR2 = CDTR2 + etape * (CATR2 - CDTR2) / (nbEtapes + 1) color = (CRTR2[0], CRTR2[1], CRTR2[2]) fillTR2 = ax.fill(XRTR2, YRTR2, color=color)[0] XRTO = XDTO + etape * (XATO - XDTO) / (nbEtapes + 1) YRTO = YDTO + etape * (YATO - YDTO) / (nbEtapes + 1) CRTO = CDTO + etape * (CATO - CDTO) / (nbEtapes + 1) color = (CRTO[0], CRTO[1], CRTO[2]) fillTO = ax.fill(XRTO, YRTO, color=color)[0] XRTJ2 = XDTJ2 + etape * (XATJ2 - XDTJ2) / (nbEtapes + 1) YRTJ2 = YDTJ2 + etape * (YATJ2 - YDTJ2) / (nbEtapes + 1) CRTJ2 = CDTJ2 + etape * (CATJ2 - CDTJ2) / (nbEtapes + 1) color = (CRTJ2[0], CRTJ2[1], CRTJ2[2]) fillTJ2 = ax.fill(XRTJ2, YRTJ2, color=color)[0] XRTJ1 = XDTJ1 + etape * (XATJ1 - XDTJ1) / (nbEtapes + 1) YRTJ1 = YDTJ1 + etape * (YATJ1 - YDTJ1) / (nbEtapes + 1) CRTJ1 = CDTJ1 + etape * (CATJ1 - CDTJ1) / (nbEtapes + 1) color = (CRTJ1[0], CRTJ1[1], CRTJ1[2]) fillTJ1 = ax.fill(XRTJ1, YRTJ1, color=color)[0] artists.append([fillTO, fillTR1, fillTR2, fillTJ1, fillTJ2, fillC]) for i in range (20): artists.append([ax.fill(XAC, YAC, c = CAC)[0],ax.fill(XATR1, YATR1, c = CATR1)[0], ax.fill(XATR2, YATR2, c = CATR2)[0], ax.fill(XATJ1, YATJ1, c = CATJ1)[0], ax.fill(XATJ2, YATJ2, c = CATJ2)[0], ax.fill(XATO, YATO, c = CATO)[0]]) #animation 2 XAC = [0, 0, 14, 14] YAC = [0, 14, 14, 0] XDC = [0, 20, 20, 0] YDC = [20, 20, -2, -2] XDC, YDC, XAC, YAC = np.array(XDC), np.array(YDC), np.array(XAC), np.array(YAC) CDC = [0, 0, 0.63] CAC = [0, 0, 0.63] CDC, CAC = np.array(CDC), np.array(CAC) XATJ1 = [-0.8, 9, 0, 0] YATJ1 = [13, 17.4, 8.9, 8.9] XDTJ1 = [14.5, 14.5, 14.2, 14.2] YDTJ1 = [6, 3, 3, 6] XDTJ1, YDTJ1, XATJ1, YATJ1 = np.array(XDTJ1), np.array(YDTJ1), np.array(XATJ1), np.array(YATJ1) CDTJ1 = [1, 0.85, 0] CATJ1 = [1, 0.85, 0] CDTJ1, CATJ1 = np.array(CDTJ1), np.array(CATJ1) XATJ2 = [-0.8, 9, 0, -0.8] YATJ2 = [13, 17.4, 8.9, 13] XDTJ2 = [14.5, 14.5, 14.2, 14.5] YDTJ2 = [3, 2, 3, 3] XDTJ2, YDTJ2, XATJ2, YATJ2 = np.array(XDTJ2), np.array(YDTJ2), np.array(XATJ2), np.array(YATJ2) CATJ2 = [1, 0.85, 0] CDTJ2 = [0, 0, 0] CDTJ2, CATJ2 = np.array(CDTJ2), np.array(CATJ2) XATR1 = [1.7, 10.7, 0.5, 1.7] YATR1 = [8, 11, 3.5, 8] XDTR1 = [9, 9, 5, 5] YDTR1 = [8, 2, 1, 7] XDTR1, YDTR1, XATR1, YATR1 = np.array(XDTR1), np.array(YDTR1), np.array(XATR1), np.array(YATR1) CDTR1 = [0.82, 0, 0] CATR1 = [0.82, 0, 0] CDTR1, CATR1 = np.array(CDTR1), np.array(CATR1) XATR2 = [1.7, 10.7, 0.5, 1.7] YATR2 = [8, 11, 3.5, 8] XDTR2 = [9, 9, 13, 13] YDTR2 = [8, 2, 1, 7] XDTR2, YDTR2, XATR2, YATR2 = np.array(XDTR2), np.array(YDTR2), np.array(XATR2), np.array(YATR2) CDTR2 = [0.82, 0, 0] CATR2 = [0.82, 0, 0] CDTR2, CATR2 = np.array(CDTR2), np.array(CATR2) XATO = [1.5, 10.1, 0.4, 1.5] YATO = [12, 14.1, 5.9, 12] XDTO = [0.5, 4.5, 0.5, 0.5] YDTO = [3, 6.5, 6.5, 3] XDTO, YDTO, XATO, YATO = np.array(XDTO), np.array(YDTO), np.array(XATO), np.array(YATO) CDTO = [0.98,0.59,0.2] CATO = [0.98,0.59,0.2] CDTO, CATO = np.array(CDTO), np.array(CATO) xMax, yMax = 25, 25 taille_TO = len(XATO) taille_TR1 = len(XATR1) taille_TR2 = len(XATR2) taille_TJ1 = len(XATJ1) taille_TJ2 = len(XATJ2) taille_C = len(XAC) for etape in range(1, nbEtapes + 2): XRC = XDC + etape * (XAC - XDC) / (nbEtapes + 1) YRC = YDC + etape * (YAC - YDC) / (nbEtapes + 1) CRC = CDC + etape * (CAC - CDC) / (nbEtapes + 1) color = (CRC[0], CRC[1], CRC[2]) fillC = ax.fill(XRC, YRC, color=color)[0] XRTR1 = XDTR1 + etape * (XATR1 - XDTR1) / (nbEtapes + 1) YRTR1 = YDTR1 + etape * (YATR1 - YDTR1) / (nbEtapes + 1) CRTR1 = CDTR1 + etape * (CATR1 - CDTR1) / (nbEtapes + 1) color = (CRTR1[0], CRTR1[1], CRTR1[2]) fillTR1 = ax.fill(XRTR1, YRTR1, color=color)[0] XRTR2 = XDTR2 + etape * (XATR2 - XDTR2) / (nbEtapes + 1) YRTR2 = YDTR2 + etape * (YATR2 - YDTR2) / (nbEtapes + 1) CRTR2 = CDTR2 + etape * (CATR2 - CDTR2) / (nbEtapes + 1) color = (CRTR2[0], CRTR2[1], CRTR2[2]) fillTR2 = ax.fill(XRTR2, YRTR2, color=color)[0] XRTO = XDTO + etape * (XATO - XDTO) / (nbEtapes + 1) YRTO = YDTO + etape * (YATO - YDTO) / (nbEtapes + 1) CRTO = CDTO + etape * (CATO - CDTO) / (nbEtapes + 1) color = (CRTO[0], CRTO[1], CRTO[2]) fillTO = ax.fill(XRTO, YRTO, color=color)[0] XRTJ2 = XDTJ2 + etape * (XATJ2 - XDTJ2) / (nbEtapes + 1) YRTJ2 = YDTJ2 + etape * (YATJ2 - YDTJ2) / (nbEtapes + 1) CRTJ2 = CDTJ2 + etape * (CATJ2 - CDTJ2) / (nbEtapes + 1) color = (CRTJ2[0], CRTJ2[1], CRTJ2[2]) fillTJ2 = ax.fill(XRTJ2, YRTJ2, color=color)[0] XRTJ1 = XDTJ1 + etape * (XATJ1 - XDTJ1) / (nbEtapes + 1) YRTJ1 = YDTJ1 + etape * (YATJ1 - YDTJ1) / (nbEtapes + 1) CRTJ1 = CDTJ1 + etape * (CATJ1 - CDTJ1) / (nbEtapes + 1) color = (CRTJ1[0], CRTJ1[1], CRTJ1[2]) fillTJ1 = ax.fill(XRTJ1, YRTJ1, color=color)[0] artists.append([fillTO, fillTR1, fillTR2, fillTJ1, fillTJ2, fillC]) #animation_3 XDC = [0, 0, 14, 14] YDC = [0, 14, 14, 0] XAC = [0, 20, 20, 0] YAC = [10.5, 10.5, 0, 0] XDC, YDC, XAC, YAC = np.array(XDC), np.array(YDC), np.array(XAC), np.array(YAC) CDC = [0, 0, 0.63] CAC = [0, 0, 0.63] CDC, CAC = np.array(CDC), np.array(CAC) XDTJ = [-0.8, 9, 0, -0.8] YDTJ = [13, 17.4, 8.9, 13] XATJ = [5, 10, 15, 5] YATJ = [10.5, 13.5, 10.5, 10.5] XDTJ, YDTJ, XATJ, YATJ = np.array(XDTJ), np.array(YDTJ), np.array(XATJ), np.array(YATJ) CDTJ = [1, 0.85, 0] CATJ = [1, 0.85, 0] CDTJ, CATJ = np.array(CDTJ), np.array(CATJ) XDTR = [1.7, 10.7, 0.5, 1.7] YDTR = [8, 11, 3.5, 8] XATR = [0, 5, 10, 0] YATR = [10.5, 12.5, 10.5, 10.5] XDTR, YDTR, XATR, YATR = np.array(XDTR), np.array(YDTR), np.array(XATR), np.array(YATR) CDTR = [0.82, 0, 0] CATR = [0.82, 0, 0] CDTR, CATR = np.array(CDTR), np.array(CATR) XDTO = [1.5, 10.1, 0.4, 1.5] YDTO = [12, 14.1, 5.9, 12] XATO = [10, 15, 20, 10] YATO = [10.5, 12.5, 10.5, 10.5] XDTO, YDTO, XATO, YATO = np.array(XDTO), np.array(YDTO), np.array(XATO), np.array(YATO) CDTO = [0.98,0.59,0.2] CATO = [0.98,0.59,0.2] CDTO, CATO = np.array(CDTO), np.array(CATO) XATB = [7.5, 9.5, 9.5, 7.5] YATB = [3, 3, 0, 0] XDTB = [1.5, 10.1, 10.1, 0.4] YDTB = [12, 14.1, 14.1, 5.9] XDTB, YDTB, XATB, YATB = np.array(XDTB), np.array(YDTB), np.array(XATB), np.array(YATB) CATB = [1,1,1] CDTB = [0.98,0.59,0.2] CDTB, CATB = np.array(CDTB), np.array(CATB) xMax, yMax = 25, 25 taille_TO = len(XATO) taille_TB = len(XATB) taille_TR = len(XATR) taille_TJ = len(XATJ) taille_C = len(XAC) for etape in range(1, nbEtapes + 2): XRC = XDC + etape * (XAC - XDC) / (nbEtapes + 1) YRC = YDC + etape * (YAC - YDC) / (nbEtapes + 1) CRC = CDC + etape * (CAC - CDC) / (nbEtapes + 1) color = (CRC[0], CRC[1], CRC[2]) fillC = ax.fill(XRC, YRC, color=color)[0] XRTR = XDTR + etape * (XATR - XDTR) / (nbEtapes + 1) YRTR = YDTR + etape * (YATR - YDTR) / (nbEtapes + 1) CRTR = CDTR + etape * (CATR - CDTR) / (nbEtapes + 1) color = (CRTR[0], CRTR[1], CRTR[2]) fillTR = ax.fill(XRTR, YRTR, color=color)[0] XRTO = XDTO + etape * (XATO - XDTO) / (nbEtapes + 1) YRTO = YDTO + etape * (YATO - YDTO) / (nbEtapes + 1) CRTO = CDTO + etape * (CATO - CDTO) / (nbEtapes + 1) color = (CRTO[0], CRTO[1], CRTO[2]) fillTO = ax.fill(XRTO, YRTO, color=color)[0] XRTB = XDTB + etape * (XATB - XDTB) / (nbEtapes + 1) YRTB = YDTB + etape * (YATB - YDTB) / (nbEtapes + 1) CRTB = CDTB + etape * (CATB - CDTB) / (nbEtapes + 1) color = (CRTB[0], CRTB[1], CRTB[2]) fillTB = ax.fill(XRTB, YRTB, color=color)[0] XRTJ = XDTJ + etape * (XATJ - XDTJ) / (nbEtapes + 1) YRTJ = YDTJ + etape * (YATJ - YDTJ) / (nbEtapes + 1) CRTJ = CDTJ + etape * (CATJ - CDTJ) / (nbEtapes + 1) color = (CRTJ[0], CRTJ[1], CRTJ[2]) fillTJ = ax.fill(XRTJ, YRTJ, color=color)[0] artists.append([fillTO, fillTB, fillTR, fillTJ, fillC]) for i in range (20): artists.append([ax.fill(XAC, YAC, c = CAC)[0],ax.fill(XATR, YATR, c = CATR)[0], ax.fill(XATB, YATB, c = CATB)[0], ax.fill(XATO, YATO, c = CATO)[0], ax.fill(XATJ, YATJ, c = CATJ)[0]]) #animation_4 XDC = [0, 20, 20, 0] YDC = [10.5, 10.5, 0, 0] XAC = [0, 0, 14, 14] YAC = [0, 14, 14, 0] XDC, YDC, XAC, YAC = np.array(XDC), np.array(YDC), np.array(XAC), np.array(YAC) CDC = [0, 0, 0.63] CAC = [0, 0, 0.63] CDC, CAC = np.array(CDC), np.array(CAC) XDTJ = [5, 10, 15, 5] YDTJ = [10.5, 13.5, 10.5, 10.5] XATJ = [-0.8, 9, 0, -0.8] YATJ = [13, 17.4, 8.9, 13] XDTJ, YDTJ, XATJ, YATJ = np.array(XDTJ), np.array(YDTJ), np.array(XATJ), np.array(YATJ) CDTJ = [1, 0.85, 0] CATJ = [1, 0.85, 0] CDTJ, CATJ = np.array(CDTJ), np.array(CATJ) XDTR = [0, 5, 10, 0] YDTR = [10.5, 12.5, 10.5, 10.5] XATR = [1.7, 10.7, 0.5, 1.7] YATR = [8, 11, 3.5, 8] XDTR, YDTR, XATR, YATR = np.array(XDTR), np.array(YDTR), np.array(XATR), np.array(YATR) CDTR = [0.82, 0, 0] CATR = [0.82, 0, 0] CDTR, CATR = np.array(CDTR), np.array(CATR) XDTO = [10, 15, 20, 10] YDTO = [10.5, 12.5, 10.5, 10.5] XATO = [1.5, 10.1, 0.4, 1.5] YATO = [12, 14.1, 5.9, 12] XDTO, YDTO, XATO, YATO = np.array(XDTO), np.array(YDTO), np.array(XATO), np.array(YATO) CDTO = [0.98,0.59,0.2] CATO = [0.98,0.59,0.2] CDTO, CATO = np.array(CDTO), np.array(CATO) XDTB = [7.5, 9.5, 9.5, 7.5] YDTB = [3, 3, 0, 0] XATB = [1.5, 10.1, 10.1, 0.4] YATB = [12, 14.1, 14.1, 5.9] XDTB, YDTB, XATB, YATB = np.array(XDTB), np.array(YDTB), np.array(XATB), np.array(YATB) CDTB = [1,1,1] CATB = [0.98,0.59,0.2] CDTB, CATB = np.array(CDTB), np.array(CATB) xMax, yMax = 25, 25 taille_TO = len(XATO) taille_TB = len(XATB) taille_TR = len(XATR) taille_TJ = len(XATJ) taille_C = len(XAC) for etape in range(1, nbEtapes + 2): XRC = XDC + etape * (XAC - XDC) / (nbEtapes + 1) YRC = YDC + etape * (YAC - YDC) / (nbEtapes + 1) CRC = CDC + etape * (CAC - CDC) / (nbEtapes + 1) color = (CRC[0], CRC[1], CRC[2]) fillC = ax.fill(XRC, YRC, color=color)[0] XRTR = XDTR + etape * (XATR - XDTR) / (nbEtapes + 1) YRTR = YDTR + etape * (YATR - YDTR) / (nbEtapes + 1) CRTR = CDTR + etape * (CATR - CDTR) / (nbEtapes + 1) color = (CRTR[0], CRTR[1], CRTR[2]) fillTR = ax.fill(XRTR, YRTR, color=color)[0] XRTO = XDTO + etape * (XATO - XDTO) / (nbEtapes + 1) YRTO = YDTO + etape * (YATO - YDTO) / (nbEtapes + 1) CRTO = CDTO + etape * (CATO - CDTO) / (nbEtapes + 1) color = (CRTO[0], CRTO[1], CRTO[2]) fillTO = ax.fill(XRTO, YRTO, color=color)[0] XRTB = XDTB + etape * (XATB - XDTB) / (nbEtapes + 1) YRTB = YDTB + etape * (YATB - YDTB) / (nbEtapes + 1) CRTB = CDTB + etape * (CATB - CDTB) / (nbEtapes + 1) color = (CRTB[0], CRTB[1], CRTB[2]) fillTB = ax.fill(XRTB, YRTB, color=color)[0] XRTJ = XDTJ + etape * (XATJ - XDTJ) / (nbEtapes + 1) YRTJ = YDTJ + etape * (YATJ - YDTJ) / (nbEtapes + 1) CRTJ = CDTJ + etape * (CATJ - CDTJ) / (nbEtapes + 1) color = (CRTJ[0], CRTJ[1], CRTJ[2]) fillTJ = ax.fill(XRTJ, YRTJ, color=color)[0] artists.append([fillTO,fillTB, fillTR, fillTJ, fillC]) #animation 5 XDC = [0, 0, 14, 14] YDC = [0, 14, 14, 0] XAC = [0, 20, 20, 0] YAC = [20, 20, -2, -2] XDC, YDC, XAC, YAC = np.array(XDC), np.array(YDC), np.array(XAC), np.array(YAC) CDC = [0, 0, 0.63] CAC = [0, 0, 0.63] CDC, CAC = np.array(CDC), np.array(CAC) XDTJ1 = [-0.8, 9, 0, -0.8] YDTJ1 = [13, 17.4, 8.9, 13] XATJ1 = [5,7,9,5] YATJ1 = [12, 6, 12, 12] XDTJ1, YDTJ1, XATJ1, YATJ1 = np.array(XDTJ1), np.array(YDTJ1), np.array(XATJ1), np.array(YATJ1) CDTJ1 = [1, 0.85, 0] CATJ1 = [0, 0.51, 0] CDTJ1, CATJ1 = np.array(CDTJ1), np.array(CATJ1) XDTJ2 = [-0.8, 9, 0, -0.8] YDTJ2 = [13, 17.4, 8.9, 13] XATJ2 = [11,13,15,11] YATJ2 = [12, 6, 12, 12] XDTJ2, YDTJ2, XATJ2, YATJ2 = np.array(XDTJ2), np.array(YDTJ2), np.array(XATJ2), np.array(YATJ2) CDTJ2 = [1, 0.85, 0] CATJ2 = [0.82, 0, 0] CDTJ2, CATJ2 = np.array(CDTJ2), np.array(CATJ2) XDTR1 = [1.7, 10.7, 0.5, 0.5] YDTR1 = [8, 11, 3.5, 3.5] XATR1 = [7, 9, 7, 5] YATR1 = [6, 4, 5.5, 4] XDTR1, YDTR1, XATR1, YATR1 = np.array(XDTR1), np.array(YDTR1), np.array(XATR1), np.array(YATR1) CDTR1 = [0.82, 0, 0] CATR1 = [0.82, 0, 0] CDTR1, CATR1 = np.array(CDTR1), np.array(CATR1) XDTR2 = [1.7, 10.7, 0.5, 0.5] YDTR2 = [8, 11, 3.5, 3.5] XATR2 = [13, 15, 13, 11] YATR2 = [6, 4, 5.5, 4] XDTR2, YDTR2, XATR2, YATR2 = np.array(XDTR2), np.array(YDTR2), np.array(XATR2), np.array(YATR2) CDTR2 = [0.82, 0, 0] CATR2 = [0, 0.51, 0] CDTR2, CATR2 = np.array(CDTR2), np.array(CATR2) XDTO1 = [1.5, 10.1, 0.4, 1.5] YDTO1 = [12, 14.1, 5.9, 12] XATO1 = [6, 8, 8, 6] YATO1 = [14, 14, 12, 12] XDTO1, YDTO1, XATO1, YATO1 = np.array(XDTO1), np.array(YDTO1), np.array(XATO1), np.array(YATO1) CDTO1 = [0.98,0.59,0.2] CATO1 = [1,0.82,0.7] CDTO1, CATO1 = np.array(CDTO1), np.array(CATO1) XDTO2 = [1.5, 10.1, 0.4, 1.5] YDTO2 = [12, 14.1, 5.9, 12] XATO2 = [12, 14, 14, 12] YATO2 = [14, 14, 12, 12] XDTO2, YDTO2, XATO2, YATO2 = np.array(XDTO2), np.array(YDTO2), np.array(XATO2), np.array(YATO2) CDTO2 = [0.98,0.59,0.2] CATO2 = [1,0.82,0.7] CDTO2, CATO2 = np.array(CDTO2), np.array(CATO2) xMax, yMax = 25, 25 taille_TO = len(XATO1) taille_TR = len(XATR1) taille_TJ = len(XATJ1) taille_TO = len(XATO2) taille_TR = len(XATR2) taille_TJ = len(XATJ2) taille_C = len(XAC) for etape in range(1, nbEtapes + 2): XRC = XDC + etape * (XAC - XDC) / (nbEtapes + 1) YRC = YDC + etape * (YAC - YDC) / (nbEtapes + 1) CRC = CDC + etape * (CAC - CDC) / (nbEtapes + 1) color = (CRC[0], CRC[1], CRC[2]) fillC = ax.fill(XRC, YRC, color=color)[0] XRTR1 = XDTR1 + etape * (XATR1 - XDTR1) / (nbEtapes + 1) YRTR1 = YDTR1 + etape * (YATR1 - YDTR1) / (nbEtapes + 1) CRTR1 = CDTR1 + etape * (CATR1 - CDTR1) / (nbEtapes + 1) color = (CRTR1[0], CRTR1[1], CRTR1[2]) fillTR1 = ax.fill(XRTR1, YRTR1, color=color)[0] XRTR2 = XDTR2 + etape * (XATR2 - XDTR2) / (nbEtapes + 1) YRTR2 = YDTR2 + etape * (YATR2 - YDTR2) / (nbEtapes + 1) CRTR2 = CDTR2 + etape * (CATR2 - CDTR2) / (nbEtapes + 1) color = (CRTR2[0], CRTR2[1], CRTR2[2]) fillTR2 = ax.fill(XRTR2, YRTR2, color=color)[0] XRTO1 = XDTO1 + etape * (XATO1 - XDTO1) / (nbEtapes + 1) YRTO1 = YDTO1 + etape * (YATO1 - YDTO1) / (nbEtapes + 1) CRTO1 = CDTO1 + etape * (CATO1 - CDTO1) / (nbEtapes + 1) color = (CRTO1[0], CRTO1[1], CRTO1[2]) fillTO1 = ax.fill(XRTO1, YRTO1, color=color)[0] XRTO2 = XDTO2 + etape * (XATO2 - XDTO2) / (nbEtapes + 1) YRTO2 = YDTO2 + etape * (YATO2 - YDTO2) / (nbEtapes + 1) CRTO2 = CDTO2 + etape * (CATO2 - CDTO2) / (nbEtapes + 1) color = (CRTO2[0], CRTO2[1], CRTO2[2]) fillTO2 = ax.fill(XRTO2, YRTO2, color=color)[0] XRTJ1 = XDTJ1 + etape * (XATJ1 - XDTJ1) / (nbEtapes + 1) YRTJ1 = YDTJ1 + etape * (YATJ1 - YDTJ1) / (nbEtapes + 1) CRTJ1 = CDTJ1 + etape * (CATJ1 - CDTJ1) / (nbEtapes + 1) color = (CRTJ1[0], CRTJ1[1], CRTJ1[2]) fillTJ1 = ax.fill(XRTJ1, YRTJ1, color=color)[0] XRTJ2 = XDTJ2 + etape * (XATJ2 - XDTJ2) / (nbEtapes + 1) YRTJ2 = YDTJ2 + etape * (YATJ2 - YDTJ2) / (nbEtapes + 1) CRTJ2 = CDTJ2 + etape * (CATJ2 - CDTJ2) / (nbEtapes + 1) color = (CRTJ2[0], CRTJ2[1], CRTJ2[2]) fillTJ2 = ax.fill(XRTJ2, YRTJ2, color=color)[0] artists.append([fillTO1, fillTO2, fillTR1, fillTR2, fillTJ1, fillTJ2, fillC]) for i in range (20): artists.append([ax.fill(XAC, YAC, c = CAC)[0],ax.fill(XATR1, YATR1, c = CATR1)[0], ax.fill(XATR2, YATR2, c = CATR2)[0], ax.fill(XATJ1, YATJ1, c = CATJ1)[0], ax.fill(XATJ2, YATJ2, c = CATJ2)[0], ax.fill(XATO1, YATO1, c = CATO1)[0], ax.fill(XATO2, YATO2, c = CATO2)[0]]) #animation 6 XAC = [0, 0, 14, 14] YAC = [0, 14, 14, 0] XDC = [0, 20, 20, 0] YDC = [20, 20, -2, -2] XDC, YDC, XAC, YAC = np.array(XDC), np.array(YDC), np.array(XAC), np.array(YAC) CDC = [0, 0, 0.63] CAC = [0, 0, 0.63] CDC, CAC = np.array(CDC), np.array(CAC) XATJ1 = [-0.8, 9, 0, -0.8] YATJ1 = [13, 17.4, 8.9, 13] XDTJ1 = [5,7,9,5] YDTJ1 = [12, 6, 12, 12] XDTJ1, YDTJ1, XATJ1, YATJ1 = np.array(XDTJ1), np.array(YDTJ1), np.array(XATJ1), np.array(YATJ1) CATJ1 = [1, 0.85, 0] CDTJ1 = [0, 0.51, 0] CDTJ1, CATJ1 = np.array(CDTJ1), np.array(CATJ1) XATJ2 = [-0.8, 9, 0, -0.8] YATJ2 = [13, 17.4, 8.9, 13] XDTJ2 = [11,13,15,11] YDTJ2 = [12, 6, 12, 12] XDTJ2, YDTJ2, XATJ2, YATJ2 = np.array(XDTJ2), np.array(YDTJ2), np.array(XATJ2), np.array(YATJ2) CATJ2 = [1, 0.85, 0] CDTJ2 = [0.82, 0, 0] CDTJ2, CATJ2 = np.array(CDTJ2), np.array(CATJ2) XATR1 = [1.7, 10.7, 0.5, 0.5] YATR1 = [8, 11, 3.5, 3.5] XDTR1 = [7, 9, 7, 5] YDTR1 = [6, 4, 5.5, 4] XDTR1, YDTR1, XATR1, YATR1 = np.array(XDTR1), np.array(YDTR1), np.array(XATR1), np.array(YATR1) CDTR1 = [0.82, 0, 0] CATR1 = [0.82, 0, 0] CDTR1, CATR1 = np.array(CDTR1), np.array(CATR1) XATR2 = [1.7, 10.7, 0.5, 0.5] YATR2 = [8, 11, 3.5, 3.5] XDTR2 = [13, 15, 13, 11] YDTR2 = [6, 4, 5.5, 4] XDTR2, YDTR2, XATR2, YATR2 = np.array(XDTR2), np.array(YDTR2), np.array(XATR2), np.array(YATR2) CATR2 = [0.82, 0, 0] CDTR2 = [0, 0.51, 0] CDTR2, CATR2 = np.array(CDTR2), np.array(CATR2) XATO1 = [1.5, 10.1, 0.4, 1.5] YATO1 = [12, 14.1, 5.9, 12] XDTO1 = [6, 8, 8, 6] YDTO1 = [14, 14, 12, 12] XDTO1, YDTO1, XATO1, YATO1 = np.array(XDTO1), np.array(YDTO1), np.array(XATO1), np.array(YATO1) CATO1 = [0.98,0.59,0.2] CDTO1 = [1,0.82,0.7] CDTO1, CATO1 = np.array(CDTO1), np.array(CATO1) XATO2 = [1.5, 10.1, 0.4, 1.5] YATO2 = [12, 14.1, 5.9, 12] XDTO2 = [12, 14, 14, 12] YDTO2 = [14, 14, 12, 12] XDTO2, YDTO2, XATO2, YATO2 = np.array(XDTO2), np.array(YDTO2), np.array(XATO2), np.array(YATO2) CATO2 = [0.98,0.59,0.2] CDTO2 = [1,0.82,0.7] CDTO2, CATO2 = np.array(CDTO2), np.array(CATO2) xMax, yMax = 25, 25 taille_TO = len(XATO1) taille_TR = len(XATR1) taille_TJ = len(XATJ1) taille_TO = len(XATO2) taille_TR = len(XATR2) taille_TJ = len(XATJ2) taille_C = len(XAC) for etape in range(1, nbEtapes + 2): XRC = XDC + etape * (XAC - XDC) / (nbEtapes + 1) YRC = YDC + etape * (YAC - YDC) / (nbEtapes + 1) CRC = CDC + etape * (CAC - CDC) / (nbEtapes + 1) color = (CRC[0], CRC[1], CRC[2]) fillC = ax.fill(XRC, YRC, color=color)[0] XRTR1 = XDTR1 + etape * (XATR1 - XDTR1) / (nbEtapes + 1) YRTR1 = YDTR1 + etape * (YATR1 - YDTR1) / (nbEtapes + 1) CRTR1 = CDTR1 + etape * (CATR1 - CDTR1) / (nbEtapes + 1) color = (CRTR1[0], CRTR1[1], CRTR1[2]) fillTR1 = ax.fill(XRTR1, YRTR1, color=color)[0] XRTR2 = XDTR2 + etape * (XATR2 - XDTR2) / (nbEtapes + 1) YRTR2 = YDTR2 + etape * (YATR2 - YDTR2) / (nbEtapes + 1) CRTR2 = CDTR2 + etape * (CATR2 - CDTR2) / (nbEtapes + 1) color = (CRTR2[0], CRTR2[1], CRTR2[2]) fillTR2 = ax.fill(XRTR2, YRTR2, color=color)[0] XRTO1 = XDTO1 + etape * (XATO1 - XDTO1) / (nbEtapes + 1) YRTO1 = YDTO1 + etape * (YATO1 - YDTO1) / (nbEtapes + 1) CRTO1 = CDTO1 + etape * (CATO1 - CDTO1) / (nbEtapes + 1) color = (CRTO1[0], CRTO1[1], CRTO1[2]) fillTO1 = ax.fill(XRTO1, YRTO1, color=color)[0] XRTO2 = XDTO2 + etape * (XATO2 - XDTO2) / (nbEtapes + 1) YRTO2 = YDTO2 + etape * (YATO2 - YDTO2) / (nbEtapes + 1) CRTO2 = CDTO2 + etape * (CATO2 - CDTO2) / (nbEtapes + 1) color = (CRTO2[0], CRTO2[1], CRTO2[2]) fillTO2 = ax.fill(XRTO2, YRTO2, color=color)[0] XRTJ2 = XDTJ2 + etape * (XATJ2 - XDTJ2) / (nbEtapes + 1) YRTJ2 = YDTJ2 + etape * (YATJ2 - YDTJ2) / (nbEtapes + 1) CRTJ2 = CDTJ2 + etape * (CATJ2 - CDTJ2) / (nbEtapes + 1) color = (CRTJ2[0], CRTJ2[1], CRTJ2[2]) fillTJ2 = ax.fill(XRTJ2, YRTJ2, color=color)[0] XRTJ1 = XDTJ1 + etape * (XATJ1 - XDTJ1) / (nbEtapes + 1) YRTJ1 = YDTJ1 + etape * (YATJ1 - YDTJ1) / (nbEtapes + 1) CRTJ1 = CDTJ1 + etape * (CATJ1 - CDTJ1) / (nbEtapes + 1) color = (CRTJ1[0], CRTJ1[1], CRTJ1[2]) fillTJ1 = ax.fill(XRTJ1, YRTJ1, color=color)[0] artists.append([fillTO1, fillTO2, fillTR1, fillTR2, fillTJ1, fillTJ2, fillC]) anim = ArtistAnimation(fig, artists, repeat=False, interval=100) for i in range (20): artists.append([ax.fill(XAC, YAC, c = CAC)[0],ax.fill(XATR1, YATR1, c = CATR1)[0], ax.fill(XATR2, YATR2, c = CATR2)[0], ax.fill(XATO1, YATO1, c = CATO1)[0], ax.fill(XATO2, YATO2, c = CATO2)[0], ax.fill(XATJ1, YATJ1, c = CATJ1)[0], ax.fill(XATJ2, YATJ2, c = CATJ2)[0]]) #fig.show() from matplotlib.animation import PillowWriter anim.save("ArtistAnimation.gif", writer=PillowWriter(fps=10))

Le Hackathon, concept issu du monde de l’informatique, a encore une fois montré toute la force de l’intelligence collective à stimuler l’émergence de solutions innovantes.

Les organisateurs souhaitent exprimer leur gratitude l’égard des partenaires de l’évènement, comme, le cabinet d’expertise comptable FITECO qui a financé la réalisation des sweat-shirts, mais aussi l’APEL (Association des Parents d’Élèves de l’établissement) de l’établissement qui a généreusement offert un ultime moment convivial autour d’un repas de clôture réalisé par le Food Truck du restaurant « La Petite Fouée » d’Amboise et enfin l’entreprise de développement informatique DARVA qui a offert de multiples goodies aux participants.

Les parents, invités à la présentation des chefs-d’œuvre réalisés par les équipes, dimanche matin à 10h, ont été extrêmement nombreux. Ils ont ensuite participé au jury qui décerna les différents prix ainsi qu’au repas de clôture. Les résultats et les réalisations sont disponibles sur hackathon-ndlr.fr.

Le lycée Notre-Dame la Riche exprime sa gratitude envers tous les participants, les enseignants, les parents bénévoles et les sponsors pour avoir fait de cette première édition du Hackathon un évènement inoubliable. Grâce à leur engagement, cette expérience a été enrichissante à la fois sur le plan pédagogique et humain.

L’ensemble des participants : élèves, enseignants et parents espèrent que cette initiative marquera le début d’une tradition, et que d’autres éditions du Hackathon auront lieu à l’avenir, avec, pourquoi pas, la participation d’autres lycées.

Pour plus d’informations sur le Hackathon, veuillez contacter Pierre Aïn, enseignant en Science Informatique (NSI), membre de l’équipe d’organisation du Hackathon via le site hackathon-ndlr.fr


Téléchargement des images en haute définition :