Article épinglé

samedi 2 novembre 2019

Python et quête n°2 - Tables de multiplication et Mandelbrot

Objectif

Reproduire en python avec la bibliothèque turtle le genre de graphique de la vidéo du dessus car personnellement je trouve ça joli, voire "mathgique". Je suis à deux doigts d'imprimer des tee-shirts ;))))


Objectif atteins en ce 3 nov 2019 - 17:34
Et mise en musique constructiviste ici en ce 4 nov 2019 - 19:07

Recherche de script

Créer un cercle

from turtle import *

penup()
goto(0,-100)
pendown()

circle(100,270)
penup()
home()

Créer x points sur le cercle et affichage des positions

from turtle import *

npt=11

penup()
goto(0,-100)

pendown()

for i in range(npt):
    circle(100,360/npt)
    dot()
    print(position())

penup()
home()

Enregistrement des positions dans une liste ou un dictionnaire

from turtle import *

npt=11 #nbre de points
pos={} #dictionnaire

penup()
goto(0,-100)

pendown()

for i in range(npt):
    circle(100,360/npt)
    dot()
    pos[i]=position()
    print(position())

penup()
home()

Cercle avec affichage des labels et dictionnaire des points

Remarque:
  • Notez l'apparition de la variable rayon en début de script
  • Notez la modification de l'ordre des lignes de commande dans la boucle pour obtenir un affichage cohérent


from turtle import *
rayon=200 #rayon du cercle
npt=11 #nbre de points
pos={} #dictionnaire

penup()
goto(0,-rayon)

pendown()

for i in range(npt):
 
    dot()
    write(i)
    pos[i]=position()
    print(position())
    circle(rayon,360/npt)

print(pos)
penup()
home()

Tracer d'un trait entre 2 labels en utilisant les coordonnées du dictionnaire

from turtle import *
rayon=200 #rayon du cercle
npt=11 #nbre de points
pos={} #dictionnaire

penup()
goto(0,-rayon)

pendown()

for i in range(npt):

    dot()
    write(i)
    pos[i]=position()
    print(position())
    circle(rayon,360/npt)

print(pos)
penup()
home()

# tracer des traits
goto(pos[2])
pendown()
goto(pos[4])

En approche de la solution finale

from turtle import *
rayon=200 #rayon du cercle
npt=10 #nbre de points
table=2
pos={} #dictionnaire

penup()
goto(0,-rayon)

pendown()

for i in range(npt):
    dot()
    write(i)
    pos[i]=position()
    print(position())
    circle(rayon,360/npt)

print(pos)
penup()
home()

# tracer des traits
for i in range (npt):
    penup()
    j=i*table
    goto(pos[i])
    pendown()
    goto(pos[j])

Solution finale pour la table de 2

Remarque

  • Fonctionne joliment bien pour la table de 2 mais un pb apparaît pour table =3 ou plus

from turtle import *
rayon=200 #rayon du cercle
npt=200 #nbre de points
table=2
pos={} #dictionnaire

penup()
goto(0,-rayon)

pendown()

for i in range(npt):

    dot()
    write(i)
    pos[i]=position()
 
    circle(rayon,360/npt)


penup()
home()

# tracer des traits
for i in range (npt):
    penup()
    j=i*table
    if j>=npt:
        j=j-npt
    goto(pos[i])
    pendown()
    goto(pos[j])

Script ultime

Vidéo pour vous motiver à tester le script ultime, à le comprendre puis à jouer avec la variable table. Ici c'est le résultat pour table=91. 
Remerciement à Burkard Polster sans qui je n'aurai même pas eu l'idée de me prendre la tête sur ce genre de dessin.

from turtle import *
# jouer avec les valeurs npt et table
# si dessin pas à la bonne taille jouer alors avec rayon

rayon=200 #rayon du cercle
npt=200 #nbre de points
table=91 #Saisir ici des valeurs entières

# la suite n'est pas à modifier!!

pos={} #dictionnaire

penup()
goto(0,-rayon)

pendown()

for i in range(npt):

    dot()
    write(i)
    pos[i]=position()

    circle(rayon,360/npt)


penup()
home()

# tracer des traits

for i in range (npt):
    penup()
    j=i*table
   
    goto(pos[i])
    pendown()
    goto(pos[j%npt]) # ce modulo a nécessité une réflexion de plusieurs heures ;)))

Aucun commentaire:

Enregistrer un commentaire

Tout commentaire nous engage ;)