Le code des supporters : virage Auteuil.

Projets

En se basant sur une photo du magnifique virage Auteuil, emblématique du Parc des Princes, stade du Paris-Saint-Germain, nous avons reproduit sous un angle de vue différent cette image. Cette reproduction met en avant la disposition du stade, du virage, mais surtout les couleurs emblématiques de ce club. Notre image possède une perspective appuyant bien sur les aspects clés de l’image cités auparavant.

Pour le fond, nous avons appelé deux fonctions rectangle chacune ayant la même hauteur et la même largeur pour respecter les proportionnalités et les avons choisies rouge et bleu en référence aux couleurs du club.

rectangle modifiable

# rectangle modifiable
def rectangle(x,y,z,g,a,b):
  def longueur(a):
    a == 0 + a
    forward(a)
  def largeur(b):
    b == 0 + b
    forward(b)
  pensize(z)
  speed(100)
  # Remplissage selon la couleur donnée
  penup()
  begin_fill()
  color(g)
  goto (x,y), pendown(),
  for i in range(2):
      longueur(a), right(90), largeur(b), right (90)
  end_fill()
  penup()  

rectangle(-858,538,1,"red",858,1076)
rectangle(858,538,1,"blue",-858,1076)

Pour commencer à dessiner une perspective, nous avons réalisé une pelouse composée de formes géométriques différentes en prenant pour exemple notre image référence. Les teintes sont différentes en fonction des zones sur la pelouse pour réaliser les sens de tonte et se rapprocher ainsi au maximum d’un vrai stade.

Pelouse

## Formation en perspective de la pelouse
# Triangles
def triangle(a,b,x,y,c,d,e,f):
    begin_fill()
    pensize(a)
    color(b)
    penup(), goto(x,y), pendown(), goto(c,d), goto(e,f), goto(x,y), penup()
    end_fill()

def polygone_1(a,b,x,y,c,d,e,f,g,h):
    begin_fill()
    pensize(a)
    color(b)
    penup(), goto(x,y), pendown(), goto(c,d), goto(e,f), goto(g,h), goto(x,y), penup()
    end_fill()

def polygone_2(a,b,x,y,c,d,e,f,g,h,i,j):
    begin_fill()
    pensize(a)
    color(b)
    penup(), goto(x,y), pendown(), goto(c,d), goto(e,f), goto(g,h), goto(i,j), goto(x,y), penup()
    end_fill()

# Formes pelouse verte différentes
rectangle(-858,-414,1,"green",1716,124)
polygone_1(1,"green",-820,-414,-750,-414,-858,-474,-858,-424)
polygone_2(1,"darkgreen",-750,-414,-660,-414,-820,-538,-858,-538,-858,-474)
polygone_1(1,"darkgreen",-660,-414,-550,-414,-680,-538,-820,-538)
polygone_1(1,"darkgreen",-300,-414,0,-414,0,-538,-330,-538)
polygone_1(1,"darkgreen",300,-414,550,-414,670,-538,330,-538)
triangle(1,"darkgreen",750,-414,858,-414,858,-474)

Toujours en appelant la fonction rectangle utilisée au tout début, nous avons réalisé un panneau publicitaire de couleur grise, comme on le voit dans les stades.

Panneau publicitaire

rectangle(-858,-377,1,"grey",1716,37)

Pour commencer la perspective des gradins, nous avons tracé des courbes horizontales qui descendent en se rapprochant du centre.

Perspective des tribunes avec traits horizontaux gris

penup(), goto(-858,40), pendown()
 
penup(), goto(-858,130), pendown()
def trait_coupe():
    for x in range(-858,864):
       y = -90+(x / 300) ** 4
       goto(x,y)
       pendown()        
trait_coupe()

penup(), goto(-858,190), pendown()
def trait_coupe1():
    for x in range(-858,864):
       y = -30+(x / 300) ** 4
       goto(x,y)
       pendown()        
trait_coupe1()

penup(), goto(-858,250), pendown()
def trait_coupe2():
    for x in range(-858,864):
       y = 30+(x / 300) ** 4
       goto(x,y)
       pendown()        
trait_coupe2()

penup(), goto(-858,310), pendown()    
def trait_coupe3():
    for x in range(-858,864):
        y = 90+(x / 300) ** 4
        goto(x,y)
        pendown()        
trait_coupe3()

penup(), goto(-858,370), pendown()    
def trait_coupe4():
    for x in range(-858,864):
        y = 150+(x / 300) ** 4
        goto(x,y)
        pendown()        
trait_coupe4()

penup(), goto(-858,430), pendown()    
def trait_coupe5():
    for x in range(-858,864):
        y = 210+(x / 300) ** 4
        goto(x,y)
        pendown()        
trait_coupe5()

penup(), goto(-858,490), pendown()    
def trait_coupe6():
    for x in range(-858,864):
        y = 270+(x / 300) ** 4
        goto(x,y)
        pendown()        
trait_coupe6()

penup(), goto(-858,550), pendown()    
def trait_coupe7():
    for x in range(-858,864):
        y = 330+(x / 300) ** 4
        goto(x,y)
        pendown()        
trait_coupe7()

penup(), goto(-858,70), pendown()
def trait_coupe11():
    for x in range(-858,864):
       y = -150+(x / 300) ** 4
       goto(x,y)
       pendown()        
trait_coupe11()

penup(), goto(-858,10), pendown()
def trait_coupe12():
    for x in range(-858,864):
       y = -210+(x / 300) ** 4
       goto(x,y)
       pendown()        
trait_coupe12()

# Zone grise au dessus des gradins
def zone_grise():
    pensize(1)
    color("grey")
    penup(), goto(-858,438), begin_fill(), pendown(), trait_coupe7(), goto(858,476), goto(-858,476), goto(-858,438), end_fill(), penup()
zone_grise()

# Zone grise en bas des gradins
def zone_grise_1():
    pensize(1)
    color("grey")
    penup(), goto(-858,10), begin_fill(), pendown(), trait_coupe12(), goto(858,-377), goto(-858,-377), goto(-858,10), end_fill(), penup()
zone_grise_1()

Pour approfondir cette perspective, nous avons décidé de compléter la zone sous la banderole et au dessus de l’herbe avec du gris foncé.

Remplissage avec du gris foncé

# Zone grise au dessus des gradins
def zone_grise():
    pensize(1)
    color("grey")
    penup(), goto(-858,438), begin_fill(), pendown(), trait_coupe7(), goto(858,476), goto(-858,476), goto(-858,438), end_fill(), penup()
zone_grise()

# Zone grise en bas des gradins
def zone_grise_1():
    pensize(1)
    color("grey")
    penup(), goto(-858,10), begin_fill(), pendown(), trait_coupe12(), goto(858,-377), goto(-858,-377), goto(-858,10), end_fill(), penup()
zone_grise_1()

Pour donner une impression de hauteur en plus de la perspective dans la largeur, nous avons dessiné des traits verticaux qui font se rétrécir les cases au fur et à mesure que l’on se déplace sur les côtés de l’image.

Ajout des traits verticaux

# Traits de coupe verticaux
def trait_de_coupe_vertical(x,y,a,b):
    pensize(3)
    color("darkgrey")
    penup(), goto(x,y), pendown(), goto(a,b)
    
trait_de_coupe_vertical(0,329,0,-208)
trait_de_coupe_vertical(-80,329,-100,-208)
trait_de_coupe_vertical(80,329,100,-208)
trait_de_coupe_vertical(155,329,200,-208)
trait_de_coupe_vertical(-155,329,-200,-208)
trait_de_coupe_vertical(-225,330,-300,-207)
trait_de_coupe_vertical(225,330,300,-207)
trait_de_coupe_vertical(295,330,400,-206)
trait_de_coupe_vertical(-295,330,-400,-206)
trait_de_coupe_vertical(385,333,500,-202)
trait_de_coupe_vertical(-385,333,-500,-202)
trait_de_coupe_vertical(455,335,600,-194)
trait_de_coupe_vertical(-455,335,-600,-194)
trait_de_coupe_vertical(525,339,700,-179)
trait_de_coupe_vertical(-525,339,-700,-179)
trait_de_coupe_vertical(595,345,800,-159)
trait_de_coupe_vertical(-595,345,-800,-159)
trait_de_coupe_vertical(-665,355,-900,-185)
trait_de_coupe_vertical(665,355,900,-185)
trait_de_coupe_vertical(735,368,1000,-185)
trait_de_coupe_vertical(-735,368,-1000,-185)
trait_de_coupe_vertical(795,381,1100,-185)
trait_de_coupe_vertical(-795,381,-1100,-185)

Pour la cage, nous avons réalisé une fonction cage contenant une fonction pour les filets, une pour les montants et une pour les poteaux à côté. Tous sont reliés par des traits de contour blancs qui donnent cette impression de perspective. Un trait de contour noir se trouve en bas pour séparer la pelouse du reste.

Formation de la cage et des contours

def cage():
# Formation du cadre
	def cadre():
		pensize(5)
		penup(),color("white")
		goto(-429,-411)
		pendown()
		goto(-429,-200), right(90), goto(429,-200), right(90), goto(429,-411)
		penup()
	cadre()
# Formation du filet
	def filet():
		def traits_verticaux():
			color("white")
			pensize(1)
			penup(), goto(-395,-411), pendown(), goto(-395,-221), penup(), goto(-360,-411), pendown(), goto(-360,-221), penup(), goto(-326,-411), pendown(), goto(-326,-221), penup(), goto(-291,-411), pendown(), goto(-291,-221), penup(), goto(-257,-411), pendown(), goto(-257,-221), penup(), goto(-223,-411), pendown(), goto(-223,-221), penup(), goto(-189,-411), pendown(), goto(-189,-221), penup(), goto(-154,-411), pendown(), goto(-154,-221), penup(), goto(-120,-411), pendown(), goto(-120,-221), penup(), goto(-86,-411), pendown(), goto(-86,-221), penup(), goto(-52,-411), pendown(), goto(-52,-221), penup(), goto(-17,-413), pendown(), goto(-17,-221), penup(), goto(17,-411), pendown(), goto(17,-221), penup(), goto(51,-411), pendown(), goto(51,-221), penup(), goto(85,-411), pendown(), goto(85,-221), penup(), goto(120,-411), pendown(), goto(120,-221), penup(), goto(154,-411), pendown(), goto(154,-221), penup(), goto(188,-411), pendown(), goto(188,-221), penup(), goto(224,-411), pendown(), goto(224,-221), penup(), goto(259,-411), pendown(), goto(259,-221), penup(), goto(293,-411), pendown(), goto(293,-221), penup(), goto(327,-411), pendown(), goto(327,-221), penup(), goto(361,-411), pendown(), goto(361,-221), penup(), goto(395,-411), pendown(), goto(395,-221)
		traits_verticaux()
		def traits_horizontaux():
			color("white")
			pensize(1)
			penup(), goto(-405,-390), pendown(), goto(405,-390), penup(), goto(-405,-369), pendown(), goto(405,-369), penup(), goto(-405,-348), pendown(), goto(405,-348), penup(), goto(-405,-327), pendown(), goto(405,-327), penup(), goto(-405,-305), pendown(), goto(405,-305), penup(), goto(-405,-284), pendown(), goto(405,-284), penup(), goto(-405,-263), pendown(), goto(405,-263), penup(), goto(-405,-242), pendown(), goto(405,-242), penup(), goto(-405,-221), pendown(), goto(405,-221), penup()    
        traits_horizontaux()
	filet()
# Formation des poteaux
	def poteaux():
    	pensize(3)
    	color("black")
    	def poteau_1():
        	penup(), goto(-490,-411), pendown(), goto(-490,-170), penup()
    	poteau_1()
    	def poteau_2():
        	penup(), goto(490,-411), pendown(), goto(490,-170), penup()
    	poteau_2()
	poteaux()
	def traits_poteaux_cages():
    	def trait_poteau_cages_1():
        	pensize(2)
        	color("white")
        	penup(), goto(-490,-170), pendown(), goto(-429,-200), penup()
    	trait_poteau_cages_1()
    	def trait_poteau_cages_2():
        	pensize(2)
        	color("white")
        	penup(), goto(490,-170), pendown(), goto(429,-200), penup()
    	trait_poteau_cages_2()
	traits_poteaux_cages()
cage()

def trait_contour(a,z,x,y,b,c):
	pensize(a)
	color(z)
	penup(), goto(x,y), pendown(), goto(b,c)

trait_contour(2,"black",-858,-414,858,-414)
trait_contour(2,"white",-429,-200,-405,-221)
trait_contour(2,"white",429,-200,405,-221)
trait_contour(2,"white",-405,-221,-405,-411)
trait_contour(2,"white",405,-221,405,-411)

Pour former la banderole bleu foncée, nous avons fait appel à la fonction rectangle et pour tracer les lettres, nous avons utilisé des rectangles, des cercles et une fonction trapèze spécialement conçue pour la queue du « R »

Formation de la banderole avec le slogan

# Banderole en haut de l'image
def banderole():
    rectangle(858,438,1,"darkblue",1716,100)
    penup(), goto(-560,450), pendown(), rectangle(-560,450,1,"white",20,76), penup(), goto(-480,526), pendown(), begin_fill(), circle(39), end_fill(), penup(), goto(-463,511), color("darkblue"), pendown(), begin_fill(), circle(25), end_fill(), penup(), goto(-446,504), pendown(), rectangle(-400,450,1,"white",20,76), penup(), goto(-215,526), begin_fill(), color("white"), circle(39), end_fill(), penup(), goto(-198,511), color("darkblue"), pendown(), begin_fill(), circle(25), end_fill(), penup(), goto(-145,505), pendown(), begin_fill(), rectangle(-145,505,1,"white",10,20), end_fill(), penup(), goto(-105,450), pendown(), rectangle(-105,450,1,"white",20,76), penup(), goto(-125,511), pendown(), rectangle(-65,511,1,"white",40,15), penup(), goto(-65,480), pendown(), rectangle(-65,480,1,"white",40,15), penup(), goto(-65,450), pendown(), rectangle(-65,450,1,"white",40,15), penup(), goto(-15,530), pendown(), begin_fill(), circle(30), end_fill(), penup(), goto(-15,507), pendown(), begin_fill(), circle(30), end_fill(), penup(), goto(-40,491), begin_fill(), color("darkblue"), pendown(), circle(19), end_fill(), penup(), goto(11,525), begin_fill(), color("darkblue"), pendown(), circle(19), end_fill(), penup(), goto(90,450), pendown(), rectangle(70,450,1,"white",20,76), penup(), pendown(), rectangle(85,506,1,"white",50,20), penup(), rectangle(225,450,1,"white",20,76), penup(), goto(243,526), begin_fill(), color("white"), circle(25), end_fill(), penup(), goto(243,513), begin_fill(), color("darkblue"), circle(12), end_fill(), penup(), rectangle(305,450,1,"white",15,76), penup(), rectangle(340,511,1,"white",35,15), penup(), rectangle(345,450,1,"white",15,76), penup(), rectangle(345,480,1,"white",40,15), rectangle(388,450,1,"white",15,76), penup(), goto(406,526), begin_fill(), color("white"), circle(25), end_fill(), penup(), goto(406,513), begin_fill(), color("darkblue"), circle(12), end_fill(), penup(), trapeze("white",1,388,483,410,483,430,450,410,450), penup(), rectangle(470,450,1,"white",20,76), goto(520,530), pendown(), begin_fill(), circle(30), end_fill(), penup(), goto(520,507), pendown(), begin_fill(), circle(30), end_fill(), penup(), goto(494,491), begin_fill(), color("darkblue"), pendown(), circle(19), end_fill(), penup(), goto(545,525), begin_fill(), color("darkblue"), pendown(), circle(19), end_fill()  


banderole()

Rendu final