Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

La tête dans les étoiles : pour une approche plus rationnelle des polygones réguliers
Etoiles, assiettes et rosaces
Article mis en ligne le 4 janvier 2020
dernière modification le 24 février 2020

par Patrice Debrabant


Dans cet article, on va voir comment la géométrie de la tortue apporte un point de vue nouveau (ou oublié / négligé) sur les étoiles et permet de les construire très simplement. Puis on tracera des rosaces et des assiettes avec des polygones réguliers en parcourant des polygones réguliers, étoilés ou pas.

I) Faut-il avoir la tête dans les étoiles ?

Pour dessiner des étoiles, certainement ! [1]

Game of Thrones
Le symbole de la Foi des Sept est une étoile à 7 branches

 A) Introduction

Le rallye mathématique d’Aquitaine est une épreuve à résoudre par équipe destinée aux classes de troisièmes et de secondes.
Dans la session 2017, la deuxième énigme était la suivante :

Or, moyennant une petite étude des étoiles (selon le point de vue de la géométrie de la tortue), cette question peut être considérée comme évidente.
Cette étude est simple, éclairante, et tout à fait adaptée à l’enseignement au collège. Il nous paraîtrait opportun qu’elle figure dans les programmes officiels de mathématiques.

 B) Les vrais oubliés de la réforme : les polygones réguliers étoilés

Avec la disparition dans les programmes du collège des angles inscrits dans un cercle, la notion de polygone régulier a perdu de son lustre. Celle de polygone régulier étoilé quant à elle a été reléguée aux oubliettes.
On peut le déplorer car le concept de polygone régulier étoilé, outre son charme graphique et mystique, est sous-tendu par des notions de divisibilité et de fraction qui mériteraient d’être développées au collège (ce n’était pas le cas non plus dans le cadre de l’ancien programme où le lien entre les étoiles et les nombres premiers entre eux n’était pas évoqué).

Un polygone régulier étoilé est un polygone équiangle équilatéral croisé, créé en reliant un sommet d’un polygone régulier à p côtés à un autre sommet non adjacent et en continuant le processus jusqu’à revenir au premier sommet.

Pour construire un polygone étoilé à p sommets, on part des p sommets consécutifs d’un polygone régulier à p côtés. Partant d’un sommet, on le relie à un sommet situé q positions plus loin, de telle sorte que p et q soient des nombres premiers entre eux et que les points ainsi reliés soient distants d’au moins deux positions ($2\leqslant q \leqslant p-2$). On continue le processus jusqu’à revenir au premier sommet.

Par exemple, pour un pentagone régulier étoilé (avec des sauts de 2, soit q=2), autrement dit une étoile à cinq branches, on relie un premier point au troisième point (+2), puis le troisième au cinquième (+2), puis le cinquième au deuxième (+2), puis le deuxième au quatrième (+2), et enfin le quatrième au premier (+2).

Pour le pentagone régulier étoilé avec des sauts de 3, soit q=3, on obtient une figure identique orientée dans l’autre sens. Et il n’y a pas d’autres possibilités pour q. Il existe un seul pentagone régulier étoilé.

Pour un décagone régulier étoilé avec des sauts de 3, soit q=3 :

3 et 10 sont premiers entre eux.
On obtient le même décagone (orienté dans l’autre sens) pour q=7.

Un polynôme régulier étoilé est dénoté par son symbole de Schläfli $\{\dfrac{p}{q}\} \quad \text{où} \quad q \geqslant 2$.

La notation de Schläfi n’a pas été prise au hasard, chaque étoile correspond à une fraction.
Si p et q sont premiers entre eux on obtient une étoile à p branches.
Si ce n’est pas le cas, la notation a encore du sens mais c’est la forme irréductible de la fraction qui donne le nombre de branches de l’étoile (il faut simplifier la fraction).

Exemples :
Le pentagone régulier étoilé a pour symbole de Schläfi {5/2}.
Le décagone ci-dessus a pour symbole de Schläfi {10/3}.

 C) Tracer une étoile en géométrie de la tortue

On peut tracer un polygone régulier convexe à p côtés par un script très simple en géométrie de la tortue :

  1. fonction polygone(nbCôtés, côté)
  2.         répéter nbCôtés fois
  3.                 Avancer(côté)
  4.                 TournerDroite(...)

Télécharger

Pour le carré, l’angle est 90°, pour le triangle équilatéral il est 120°.

Plus généralement, et le raisonnement est accessible dès le collège, on a un angle au centre égal à 360/nbCotés.
L’angle à la base du triangle isocèle est 90 - 180/nbCotés.
2 x (90 - 180/nbCotés)= 180 - 360/nbCotés

Donc, sans surprise, l’angle est 360/nbCotés.

Par conséquent, le script le script pour tracer un polygone régulier convexe à p côtés est :

  1. fonction polygone(nbCôtés, côté)
  2.         répéter nbCôtés fois
  3.                 Avancer(côté)
  4.                 TournerDroite(360/nbCôtés)

Télécharger

De la même façon, on peut tracer un polygone régulier étoilé {n/q} par un script du même type (!) :

  1. fonction polygone(nbCôtés, côté)
  2.         répéter nbCôtés fois
  3.                 Avancer(côté)
  4.                 TournerDroite()

Télécharger

L’angle peut être calculé en utilisant les propriétés des angles inscrits dans un cercle.
Mais le résultat est évident dès lors que l’on adopte le point de vue de la géométrie de la tortue :

Il faut prendre comme angle q*360/nbCôtés.Car l’angle d’inclinaison de la tortue peut être obtenu en cumulant les angles dont elle tourne, indépendamment de ses déplacements par translation (via un bloc Avancer).

Par conséquent, on obtient un script qui trace tous les polygones réguliers, étoilés ou pas [2] :

  1. fonction polygone(nbCôtés, côté, q)
  2.         répéter nbCôtés fois
  3.                 Avancer(côté)
  4.                 TournerDroite(360*q/nbCôtés)

Télécharger

Pour l’énigme du rallye, on voit que l’on a un polygone étoilé à 10 sommets(côtés) avec des sauts de 3 (q=3). Donc l’angle est 360 x 3 / 360 = 108°.

Remarque : si q et nbCôtés ne sont pas premiers entre eux, on obtient encore un polygone régulier, mais avec moins de côtés que nbCôtés. On obtient le polygone régulier de symbole de Schläfi {s/t} où la fraction s/t est irréductible et

$\dfrac{\text{nbCôtés}}{q}=\dfrac{s}{t}$

$\text{Si} \quad t=1$, c’est un polygone régulier convexe. Sinon c’est un polygone régulier étoilé.

Il y a une bijection entre les types de polygones réguliers et les rationnels m/n strictement supérieurs à 2.
En effet $\{\dfrac{n}{q}\}=\{\dfrac{n}{n-q}\}$ donc on peut toujours prendre $q\leqslant \text{nbCôtés} \div 2$
et l’égalité $q=\text{nbCôtés} \div 2$ n’est pas possible pour des nombres premiers entre eux.

Dans différents articles j’ai soutenu l’idée qu’il était bon que le l’on puisse « identifier » un carré à sa procédure de construction en géométrie de la tortue :

  1. fonction carré_mainGauche(côté)
  2.         répéter 4 fois
  3.                 Avancer(côté)
  4.                 TournerGauche(90°)

Télécharger

C’est encore plus vrai (si l’on peut dire, car c’est un « système ») pour les polygones réguliers étoilés.
Car si le script tortue pour le carré est évident, il l’est beaucoup moins pour l’étoile (comme le montre le sujet du rallye mathématique d’Aquitaine). Il y a ici une incontestable « plus-value » à passer en géométrie de la tortue.

II) Rosaces et assiettes

 A) Introduction
La partie suivante est inspirée d’une activité GéoTortue (plus exactement d’une brève description de cette activité) trouvée sur le site de l’IREM Paris Nord.

Lien vers cette activité (voir 4. Activité Informatique : Activités supplémentaires)

Dans cette activité, les auteurs définissent (naïvement) un concept de rosace et un concept d’assiette (sous-entendu de polygones réguliers).

Pour les rosaces, le procédé de génération est le suivant :


Rosaces



Les auteurs présentent aussi une procédure de construction de cette rosace en langage GéoTortue. Cette procédure peut être transcrite ainsi en pseudo-code :

  1. fonction polygone(nbCôtés, côté)
  2.         répéter nbCôtés fois
  3.                 Avancer(côté)
  4.                 TournerDroite(360/nbCôtés)
  5.  
  6. fonction rosace(nbCôtés, côté, nbPolygones)
  7.         répéter nbPolygones fois
  8.                 polygone(nbCôtés,côté)
  9.                 tournerDroite(360/nbPolygones)

Télécharger

Pour les assiettes, le procédé de génération est le suivant :


Assiettes



Là encore, les auteurs présentent une procédure de construction de cette assiette en langage GéoTortue.
Cette procédure peut être transcrite en pseudo-code :

  1. fonction assiette(nbCôtés, côté, nbPolygones)
  2.         répéter nbPolygones fois
  3.                 polygone(nbCôtés, côté)
  4.                 Avancer(côté)
  5.                 tournerDroite(360/nbPolygones)

Télécharger

Les auteurs présentent également les figures dynamiques DGPad que voici (à peu de choses près) :


Rosaces

On peut remarquer que pour 8 octogones, on obtient le motif du plat de Soissons.


Assiettes


Les scripts DGPad sont les suivants :


Rosaces


Assiettes


Comme on le voit, on génère facilement des figures intéressantes à l’aide de scripts très simples.

 B) Donner de l’opacité sans nuire à la transparence

Pour l’instant, avouons le, dans cette partie on a plagié l’article de l’IREM Paris Nord. En le décantant juste un peu de sa version GéoTortue.

On va commencer par donner une version colorisée des figures en les « remplissant » (d’une couleur) dans la version DGPad. On pourrait arguer que c’est purement cosmétique et que cela nuit à la compréhension. Mais non seulement c’est intéressant d’un point de vue graphique mais aussi cela permet de rendre visible les superpositions de polygones qui sont essentielles ici.

On va utiliser une seule couleur mais jouer sur la transparence (l’opacité) pour rendre compte des superposition de polygones.
1) On crée un curseur entier (entre 1 et 70) pour la couleur et un curseur contenu (de 0 à 100%) pour l’opacité élémentaire d’un polygone sans superposition.
2) On adapte très légèrement le script :

On obtient cette figure dynamique.

NB : à partir de maintenant, pour ne pas alourdir l’article, on donnera seulement des copies d’écran et un lien pour télécharger la figure dynamique DGPad. Cliquer sur l’icône ZIP pour télécharger le fichier .dgp

On peut faire de même avec les assiettes :

Revenons à nos rosaces.
Pour obtenir une figure plus générale, on ajoute un curseur q entier variant entre 1 et nbCôtés-1 et on adapte le script.

Pour les assiettes, on peut déjà faire de même que pour les rosaces en adaptant la fonction polygone.

Mais pour aller plus loin, on peut modifier le tracé de l’assiette en lui donnant également la possibilité d’être étoilé :

En pseudo-code, le script devient :

  1. fonction assiette(nbCôtés, côté, nbPolygones, q, q2)
  2.         répéter nbPolygones fois
  3.                 polygone(nbCôtés, côté, q)
  4.                 Avancer(côté)
  5.                 tournerDroite(360*q2/nbPolygones)

Télécharger

 C) Assiette en miettes (fractale)

On peut facilement greffer un espèce d’ADN fractal au script permettant de tracer une assiette.
En effet, une assiette c’est « quasiment un polygone appelant un polygone ».
On peut donc transformer le procédé en « quasiment un polygone s’appelant lui-même ou appelant un polygone ».

On crée un curseur entier niv pour la profondeur de récursion. On crée un curseur continu k pour le facteur de réduction.
On peut alors ancrer la « fractalisation » aux sommets de l’assiette ou aux milieux des côtés de l’assiette.

      1) Fractale en coin

Fractallons-y.
En pseudo-code, le script devient :

  1. fonction assiette(nbCôtés, côté, nbPolygones, q, q2, n, k)
  2.         répéter nbPolygones fois
  3.                 si n<1
  4.                         polygone(nbCôtés, côté, q)
  5.                 sinon
  6.                         assiette(nbCôtés, côté*k, nbPolygones,q2,n-1)
  7.                 Avancer(côté)
  8.                 tournerDroite(360*q2/nbCôtés)

Télécharger

Exemple : aux 4 niveaux de profondeur avec les mêmes paramètres.

Remarque : op2 est un autre curseur d’opacité qui permet de visualiser les polygones de niveau inférieurs.

En prime, une petite animation (cliquer sur le bouton pause en bas à gauche quand ça devient soûlant).
On a juste animé le curseur k, la figure reste dynamique par rapport aux autres curseurs.

La méthode peut être appliquée au trait avec tous les logiciels de programmation qui permettent de programmer en géométrie de la tortue, en particulier avec Scratch (voir plus loin pour une version Python et une version CaRMetal) :


Galerie d’assiettes DGPad





   2) Fractale au milieu et option extérieur/intérieur

On peut développer un concept d’assiette fractale légèrement différent en amorçant la partie fractale non pas aux sommets du polygone, mais au milieu des côtés.
Dans ce cas, il est intéressant d’ajouter une option pour que l’assiette fractale puisse se développer vers l’extérieur (assiette divergente) plutôt que vers l’intérieur (assiette convergente, ce qui est toujours le cas dans les assiettes que l’on a vues jusqu’à présent).
Pour développer la partie fractale au milieu des côtés, le script en pseudo-code devient :

  1. fonction assiette(nbCôtés, côté, nbPolygones, q, q2, n, k)
  2.         répéter nbPolygones fois
  3.                 si n<1
  4.                         polygone(nbCôtés, côté, q)
  5.                         Avancer(côté)
  6.                 sinon
  7.                         Avancer((1-k)/2*côté)
  8.                         assiette(nbCôtés, côté*k, nbPolygones,q2,n-1)
  9.                         Avancer((1+k)/2*côté)
  10.                 tournerDroite(360*q2/nbPolygones)

Télécharger

Pour avoir l’option de développement vers l’extérieur (assiette divergente/convergente) :

  1. fonction polygone(nbCôtés, côté, q, orientation)
  2.         répéter nbCôtés fois
  3.                 Avancer(côté)
  4.                 TournerDroite(orientation*360*q/nbCôtés)
  5.  
  6. fonction assiette(nbCôtés, côté, nbPolygones, q, q2, n, k, s)
  7.         répéter nbPolygones fois
  8.                 si n<1
  9.                         polygone(nbCôtés, côté, q, s)
  10.                         Avancer(côté)
  11.                 sinon
  12.                         Avancer((1-k)/2*côté)
  13.                         assiette(nbCôtés, côté*k, nbPolygones, q, q2, n-1, k, sens*s)
  14.                         Avancer((1+k)/2*côté)
  15.                 tournerDroite(s*360*q2/nbPolygones)

Télécharger

On peut obtenir beaucoup de figures, dont celle-ci, qui évoque le flocon de von Koch :


Version Python

  1. from turtle import *
  2.  
  3. def polygoneR(nbC, c, q, orient):
  4.     for i in range(nbC):
  5.         forward(c)
  6.         right(orient*360*q/nbC)
  7.  
  8. def assiette(nbC, c, nbPoly, q, q2, n, k, s, sens):
  9.     for i in range(nbPoly):
  10.         if n<1:
  11.             polygoneR(nbC, c, q, s)
  12.             forward(c)
  13.         else:
  14.             forward((1-k)/2*c)
  15.             assiette(nbC, c*k, nbPoly, q, q2, n-1, k, sens*s, sens)
  16.             forward((1+k)/2*c)
  17.         right(s*360*q2/nbPoly)
  18.  
  19. pencolor("red")
  20. up()
  21. goto(-250,100)
  22. down()
  23. assiette(5, 500, 8, 3, 3, 1, 0.5, 1, -1)
  24.  
  25. exitonclick()

Télécharger


Version CaRMetal (en pseudo-code)

Avec CaRMetal, on peut rendre la figure dynamique par rapport à k en créant un curseur « k » et en écrivant un script de « programmation dynamique » [3] :

On peut alors animer le curseur k en utilisant le bouton d’animation ou par programmation avec quelques lignes du type :

t ⟵ 0.1
répéter 900 fois
  t ⟵ t + 0.001
  MettreValeurExpression("k",t)

   

Galerie d’assiettes DGPad convergentes




   

Galerie d’assiettes DGPad divergentes