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 : La courbe de Julia

modification dimanche 27 juin 2024.


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

Cette utilisation de l’API de MathGraph32 pour générer la coube de Julia a été imaginée par mon ami Daniel Buret.

La figure demande au moins une dizaine de secondes avant de voir le résultat après avoir cliqué sur le bouton Exécuter.

Pour une figure plus jolie car plus définie, remplacez à la ligne 3 pas = 0.02 ; par pas = 0.01 ; mais il faudra attendre une bonne minute avant de voir apparaître le résultat (cliquez sur le bouton attendre si un message du navigateur apparaît).

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

Vous trouverez en bas de cette page le code HTML qui a permis de générer cette page en utilisant in 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<.

Le code HTML utlisé pour inseérer l’éditeur Pytho dans la page :

<script type = "text/mtgPython" id = "PythonCodeId">


# rectangle de longueur 2,8 et de largeur 2,4 centré sur l'origine du repère
# ca abscisse du coin haut gauche, co ordonnée du coin haut gauche
ca = -1.4; co = 1.2; pas = 0.02;
valminx = ca; valmaxx = 1.4 + pas;
valminy = co; valmaxy = -1.2 - pas;
cr = ca;
# constante complexe pour julia : c= a + jb, on peut faire varier a et b
a = -0.06; b = 0.67;

def tracerPoint(x, y, nom, coul):
   addPointXY(x, y, nom, coul)

def couleurPoint(N):
   coul1 = 0; coul2 = 0; coul3 = 0; c1=0; c2=0; c3=50;
   if(N<8):
       coul1 = c1 + 165; coul2 = c2 + 155; coul3 = c3 + 155;
   elif(N<10):
       coul1 = c1 + 155; coul2 = c2 + 145; coul3 = c3 + 145;
   elif(N<20):
       coul1 = c1 + 140; coul2 = c2 + 130; coul3 = c3 + 130;
   elif(N<30):
       coul1 = c1 + 120; coul2 = c2 + 115; coul3 = c3 + 115;
   elif(N<40):
       coul1 = c1 + 100; coul2 = c2 + 100; coul3 = c3 + 100;
   elif(N<50):
       coul1 = c1 + 80; coul2 = c2 + 80; coul3 = c3 + 80;
   elif(N<75):
       coul1 = c1 + 60; coul2 = c2 + 60; coul3 = c3 + 60;
   elif(N<100):
       coul1 = c1 + 40; coul2 = c2 + 40; coul3 = c3 + 40;
   elif(N < 150):
       coul1 = c1 + 20; coul2 = c2 + 20; coul3 = c3 + 20;
   elif(N < 200):
       coul1 = c1; coul2 = c2; coul3 = c3;
   # hex(coul1))de la forme 0x9b, str(hex(coul1))[2:4] donne 9b, pour n de 0 à 9 il faut 0n
   coul1 = str(hex(coul1))[2:4];
   if(len(coul1)==1):
       coul1="0"+coul1;
   coul2 = str(hex(coul2))[2:4];
   if(len(coul2)==1):
       coul2="0"+coul2;  
   coul3 = str(hex(coul3))[2:4];
   if(len(coul3)==1):
       coul3="0"+coul3;    
   coul = '#'+coul1+coul2+coul3; # coul de la forme #0000ff'
   return coul

def julia(cr, ci, a, b):
   N = 0; Module = 0;
   zr = cr; zi = ci;
   while N<200 and Module<2:
        zrcar = zr**2 - zi**2;
        zicar = 2 * zr * zi;
        zr = zrcar + a; zi =zicar + b;
        Module = abs(zr) + zi**2;
        N += 1;
   return N;

i=valminx;
while i<valmaxx:
   j=valminy;
   cr += pas; ci = co; i += pas;
   while j>valmaxy:
       ci -= pas; j -= pas
       N = julia(cr, ci, a, b);
       tracerPoint(i, j, '', couleurPoint(N));
O = addPointXY(0, 0);
I = addPointXY(1, 0, "1", 'black', '°');
J = addPointXY(0, 1);
addLineAB(O, I, '', 'black', '-', 1);
addLineAB(O, J);



</script>
<script async src="https://www.mathgraph32.org/js/mtgLoad/mathgraphElements.js"></script>
<mathgraph-player width="800" height="600" python-code-id="PythonCodeId"  fig=" TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcqWbzQEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAA######AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAOAAFPAMAoAAAAAAAAAAAAAAAAAAAAAAUAAUB3Nj1wo9cKQHGnCj1wo9f#####AAAAAQAUQ0Ryb2l0ZURpcmVjdGlvbkZpeGUA#####wEAAAAADgAAAQAAAAEAAAABAT#wAAAAAAAA#####wAAAAEAD0NQb2ludExpZURyb2l0ZQD#####AAAAAAAOAAFJAMAAAAAAAAAAQBQAAAAAAAAAAAUAAUBsk4UeuFHsAAAAAv####8AAAABAAlDRHJvaXRlQUIA#####wAAAAAAEAAAAQAAAAEAAAABAAAAA#####8AAAABABZDRHJvaXRlUGVycGVuZGljdWxhaXJlAP####8AAAAAAA4AAAEAAAABAAAAAQAAAAT#####AAAAAQAJQ0NlcmNsZU9BAP####8BAAAAAAAAAQAAAAEAAAAD#####wAAAAEAEENJbnREcm9pdGVDZXJjbGUA#####wAAAAUAAAAG#####wAAAAEAEENQb2ludExpZUJpcG9pbnQA#####wEAAAAADgAAAQAABQABAAAABwAAAAkA#####wAAAAAADgABSgDAMAAAAAAAAMAiAAAAAAAAAAAFAAIAAAAH#####wAAAAIAB0NSZXBlcmUA#####wDm5uYAA3JlcAABAAAAAQAAAAMAAAAJAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAT#wAAAAAAAAAAAAAT#wAAAAAAAA#####wAAAAEACkNVbml0ZXhSZXAA#####wAEdW5pdAAAAAr#####AAAAAQALQ0hvbW90aGV0aWUA#####wAAAAH#####AAAAAQAKQ09wZXJhdGlvbgMAAAABP#AAAAAAAAD#####AAAAAQAPQ1Jlc3VsdGF0VmFsZXVyAAAAC#####8AAAABAAtDUG9pbnRJbWFnZQD#####AQAAAAAQAAJXIgEAAAEAAAAAAwAAAAz#####AAAAAQAJQ0xvbmd1ZXVyAP####8AAAABAAAADQAAAA7##########w==">
</mathgraph-player>

A noter que dans la balise mathgraph-player, le paramètre

fig="<mathgraph-player width="800" height="600" python-code-id="PythonCodeId"  fig=" TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcqWbzQEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAA######AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAOAAFPAMAoAAAAAAAAAAAAAAAAAAAAAAUAAUB3Nj1wo9cKQHGnCj1wo9f#####AAAAAQAUQ0Ryb2l0ZURpcmVjdGlvbkZpeGUA#####wEAAAAADgAAAQAAAAEAAAABAT#wAAAAAAAA#####wAAAAEAD0NQb2ludExpZURyb2l0ZQD#####AAAAAAAOAAFJAMAAAAAAAAAAQBQAAAAAAAAAAAUAAUBsk4UeuFHsAAAAAv####8AAAABAAlDRHJvaXRlQUIA#####wAAAAAAEAAAAQAAAAEAAAABAAAAA#####8AAAABABZDRHJvaXRlUGVycGVuZGljdWxhaXJlAP####8AAAAAAA4AAAEAAAABAAAAAQAAAAT#####AAAAAQAJQ0NlcmNsZU9BAP####8BAAAAAAAAAQAAAAEAAAAD#####wAAAAEAEENJbnREcm9pdGVDZXJjbGUA#####wAAAAUAAAAG#####wAAAAEAEENQb2ludExpZUJpcG9pbnQA#####wEAAAAADgAAAQAABQABAAAABwAAAAkA#####wAAAAAADgABSgDAMAAAAAAAAMAiAAAAAAAAAAAFAAIAAAAH#####wAAAAIAB0NSZXBlcmUA#####wDm5uYAA3JlcAABAAAAAQAAAAMAAAAJAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAT#wAAAAAAAAAAAAAT#wAAAAAAAA#####wAAAAEACkNVbml0ZXhSZXAA#####wAEdW5pdAAAAAr#####AAAAAQALQ0hvbW90aGV0aWUA#####wAAAAH#####AAAAAQAKQ09wZXJhdGlvbgMAAAABP#AAAAAAAAD#####AAAAAQAPQ1Jlc3VsdGF0VmFsZXVyAAAAC#####8AAAABAAtDUG9pbnRJbWFnZQD#####AQAAAAAQAAJXIgEAAAEAAAAAAwAAAAz#####AAAAAQAJQ0xvbmd1ZXVyAP####8AAAABAAAADQAAAA7##########w==">
</mathgraph-player>"

fournit le code Base 64 d’une figure MathGraph32 avec un repère centré dans le cadre 800 x 600 et une couleur de fond #A59BCD. C’est sur cette figure que le code Python travaille par défaut quand on clique sur le bouton Exécuter.