Logiciel libre de géométrie, d'analyse et de simulation multiplateforme par Yves Biton

Accueil Tutoriels l’API de MathGraph32

Programmer une figure en Python : des polygones emboîtés

modification vendredi 28 juin 2024.


Depuis la version 7.9.1, MathGraph32 permet de créer des objets dans une figure en langage Python.

La figure ci-dessous crée quatre points libres A, B, C et D puis appelle de façon récursive une fonction poly qui rajoute au polygone précédent un nouveau polygone inscrit dans celui-ci en utilisant des points images par des homothéties.

Si vous changez le code Python ci-dessous, cliquez sur le bouton Exécuter en dessous de ce cadre d’édition.

A noter que la figure obtenue est dynamique : vous pouvez capturer les points A, B, C et D.

Vous trouverez en bas de cette page le code HTML qui a permis de générer cette page en utilisant une balise mathgraph-player.

Notez que, une fois le code Python exécuté, cliquez sur le bouton Télécharger la figure vous permet d’enregistrer la figure MathGraph32 que vous pourrez ensuite ouvrir avec le logiciel.

Voir ci-dessous quelques explications sur le code utilisé.

Cette figure n’a pas besoin d’un repère pour s’exécuter.
La ligne [width, height] = getFigDim() renvoie dans width et height les dimensions de la figure (un SVG).

Les quatre lignes suivantes :

A = addFreePoint({'x':width/8, 'y':7*height/8, 'name':'A', 'color':'black', 'absCoord': True})
B = addFreePoint({'x':7*width/8, 'y':7*height/8, 'name':'B', 'color':'black', 'absCoord': True})
C = addFreePoint({'x':7*width/8, 'y':height/8, 'name':'C', 'color':'black', 'absCoord': True})
D = addFreePoint({'x':width/8, 'y':height/8, 'name':'D', 'color':'black', 'absCoord': True})

créent quatre points libres A, B, C et D dont les coordonnées sont données relativement au SVG de la figure (origine en haut et à gauche de la figure, abscisses croissantes de la gauche vers la droite et ordonnées croissantes du haut vers le bas).
{}ci on utilise la syntaxe objet pour créer ce points pour pouvoir utiliser le paramètre absCoord.
Le paramètre ’absCoord’ : True implique que l’on n’utilise pas les coordonnées dans un repère, même si un repère est présent dans la figure.
La ligne k = addCalc('k', '1/20') ajoute à la figure MathGraph32 un calcul nommé k et c’est ce calcul qui sera utilisé par toutes les homothéties dans la fonction poly.

Ci-dessous le code html utilisé pour générer cette page :

<script type = "text/mtgPython" id = "PythonCodeId">
[width, height] = getFigDim()
A = addFreePoint({'x':width/8, 'y':7*height/8, 'name':'A', 'color':'black', 'absCoord': True})
B = addFreePoint({'x':7*width/8, 'y':7*height/8, 'name':'B', 'color':'black', 'absCoord': True})
C = addFreePoint({'x':7*width/8, 'y':height/8, 'name':'C', 'color':'black', 'absCoord': True})
D = addFreePoint({'x':width/8, 'y':height/8, 'name':'D', 'color':'black', 'absCoord': True})
k = addCalc('k', '1/20')
profmax = 100
colors = ['red', 'yellow', 'cyan', 'grey', 'magenta', 'maroon']
def color(index):
   i = index % len(colors)
   return colors[i]
polyInit = [A, B, C, D]
def poly(tab, prof):
   pol = addPolygon(tab, 'black')
   addSurface(pol, color(profmax - prof))
   a = tab[0]
   b = tab[1]
   c = tab[2]
   d = tab[3]
   M = addImPointDilation(b, a, k)
   setHidden(M)
   N = addImPointDilation(c, b, k)
   setHidden(N)
   P = addImPointDilation(d, c, k)
   setHidden(P)
   Q = addImPointDilation(a, d, k)
   setHidden(Q)
   if (prof > 0):
       poly([M, N, P, Q], prof - 1)

poly([A, B, C, D], profmax)

</script>
<script async src="https://www.mathgraph32.org/js/mtgLoad/mathgraphElements.js"></script>
<mathgraph-player width="800" height="600" python-code-id="PythonCodeId" >
</mathgraph-player>