Quelques graphiques


Sage est très fort pour dessiner et dessiner c'est très utile en mathématiques.

Exemples


Pour l'instant contentez-vous d'exécuter les exemples suivants. (Exemples que j'ai copiés-collés de la documentation de Sage.)

In [1]:
plot(atan,(-2,2))
Out[1]:
In [2]:
plot(-x^2 + 0.3*cos(20*x))
Out[2]:
In [3]:
var('u, v')
f1=(4+(3+cos(v))*sin(u),4+(3+cos(v))*cos(u), 4+sin(v))
f2=(8+(3+cos(v))*cos(u),3+sin(v), 4+(3+cos(v))*sin(u))
p1=parametric_plot3d(f1,(u,0,2*pi),(v,0,2*pi),color="red", opacity=0.5, aspect_ratio=[1,1,1])
p2=parametric_plot3d(f2,(u,0,2*pi),(v,0,2*pi),color="blue", opacity=0.5)
p1+p2
Out[3]:

Flocon de Koch


Vous allez maintenant essayer de tracer le flocon de Koch

Avec la commande line(), tracez un triangle.

In [0]:
 

La commande line() (comme circle() ou plot()) renvoie un graphique, que vous pouvez aussi créer directement Graphics(). Vous pouvez ajouter des objet à un graphique et vous avez des options d'affichage par exemple G.show(axes=False).

En vous souvenant de la matrice de la rotation d'angle $\pi/3$, tracez un triangle équilatéral puis une étoile de David.

In [0]:
 

Pour tracer le flocon de Koch, nous avons besoin d'une fonction qui sous-divise un segment en quatre segments. Écrivez-donc une fonction subdivise(segment) qui prend en argument une liste de deux points (chaque point est lui-même une liste de deux coordonnées) et qui renvoie une liste de quatre segments (chaque segment est une liste de deux points, etc.) comme dans le flocon de Koch.

In [13]:
line([(0,0),(1,0),(1.5,0.866),(2,0),(3,0)]).show(axes=False,aspect_ratio=True)
Out[13]:
In [0]:
 

Il faut maintenant appeler récursivement la fonction subdivise() (disons avec une profondeur de 3 pour commencer). Écrivez une fonction trace_Koch(segment,profondeur=3) qui trace le segment si la profondeur est nulle et qui s'appelle elle-même avec les quatre sous-segments et une profondeur diminuée de 1 sinon. (Le profondeur=3 dans l'appel de la fonction signifie que 3 est la valeur par défaut de profondeur, c'est-à-dire que l'utilisateur peut choisir d'omettre ce deuxième paramètre: trace_Koch([(1,0),(0,0)]) dans ce cas la fonction reçoit profondeur=3.)

In [0]:
 

Courbe du dragon


Est-ce que vous sauriez faire la même chose avec la courbe du dragon ? En vous débrouillant pour qu'elle ne s'auto-intersecte pas ?
Dragon_curve_iterations.png

In [0]: