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.

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.

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]:

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. <font size=-1>(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.)</font>

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_%282%29.svg.png