{ "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 }