{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# section4_1.ipynb\n",
"\n",
"PYTHON, Apprentissage Actif, JP. ROY, ELLIPSES 2020"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from turtle_init import *\n",
"# from turtle import *\n",
"# init(x=0,y=0,cap=0)\n",
"# afficher(msg,x,y)\n",
"# sleep(dt) en secondes flottantes\n",
"# deg_rad(a_degrés) conversion degrés -> radians\n",
"# rot(M,K,a_degrés) K = centre de rotation\n",
"# segment(M1,M2) le tracé d'un segment\n",
"# pi, sqrt, sin, cos, randint pour les calculs fréquents"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def poly_cart(n,a,b,r):\n",
" '''Dessine un polygone régulier ayant n côtés inscrit\n",
" dans un cercle de rayon r et de centre (a,b).'''\n",
" up() ; goto(a+r,b) ; down() # départ au pôle Est\n",
" alpha = 2 * pi / n # radians pour la trigo\n",
" for k in range(1,n+1):\n",
" goto(a + r * cos(k * alpha), b + r * sin(k * alpha))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def poly_pol(n,c):\n",
" '''Dessine un polygone régulier ayant n côtés,\n",
" côté ayant une longueur c, à partir de la position\n",
" courante de la tortue.'''\n",
" a = 360 / n\n",
" for i in range(n):\n",
" forward(c)\n",
" left(a)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def von_koch(n,L): # approximant de niveau n, base de longueur L\n",
" if n == 0 :\n",
" forward(L) # le générateur\n",
" else :\n",
" von_koch(n-1,L/3) # 4 appels récursifs !\n",
" left(60)\n",
" von_koch(n-1,L/3)\n",
" right(120)\n",
" von_koch(n-1,L/3)\n",
" left(60)\n",
" von_koch(n-1,L/3)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if __name__ == '__main__':\n",
" reset() # effacement canvas graphique, init. tortue au centre\n",
" tracer(False) # début tracé immédiat\n",
" afficher('Tracé en cartésien',0,220)\n",
" poly_cart(7,0,0,200)\n",
" poly_cart(4,100,50,50)\n",
" tracer(True) # fin tracé immédiat\n",
" getcanvas().postscript(file='polygone7_4.ps') # création d'un fichier disque\n",
"\n",
" tracer(False)\n",
" poly_cart(40,-200,200,30) # polygone régulier de 40 côtés : quasi-cercle\n",
" tracer(True) # fin tracé immédiat\n",
" sleep(4)\n",
"\n",
" # tracé lent, cette fois en polaire, à l'endroit où est la tortue\n",
" reset()\n",
" afficher('Tracé en polaire (mode lent)',0,-100)\n",
" poly_pol(7,100)\n",
" sleep(2)\n",
"\n",
" # la fractale de von Koch, niveaux 0..7\n",
" reset()\n",
" tracer(False)\n",
" for i in range(8):\n",
" reset()\n",
" init(-285,0,0) # à gauche, cap Est\n",
" von_koch(i,285*2)\n",
" afficher('Von Koch, niveau {}'.format(i),0,-100)\n",
" sleep(2)\n",
" tracer(True)\n",
" getcanvas().postscript(file='von_koch.ps') # fichier Postscript sur le disque\n",
"\n",
" # Lancement de la boucle d'évènements (bloquante) dans la fenêtre tortue\n",
" mainloop()\n",
" print('Fini.') # une fois la fenêtre fermée..."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}