This repository has been archived on 2019-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
s1-tp/S1/TP 5/polygones.py

130 lines
3.1 KiB
Python

# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015
# TP n°5 donné le 10/10/2014 - Dessiner des polygones réguliers
# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_itcond_tortue.html
from turtle import *
# Instructions pour simplifier le code
def suivant():
"""
Suspend l'éxecution du script, attend la pression de l'utilisateur sur la
touche <Entrée> puis efface l'écran de turtle.
"""
input("Appuyez sur <Entrée> pour continuer")
clearscreen()
DECALAGEX = 0
DECALAGEY = -50
ECART = 150
COTE = 75
def deplacer(x, y):
"""
Déplace la tortue sans tracer de trait à une position ('x', 'y') sur
un tableau virtuel.
CU : x et y entiers
Exemple :
>>> deplacer(-1, 1)
"""
assert(type(x) is int), "x doit être un entier"
assert(type(y) is int), "y doit être un entier"
penup()
goto(x*ECART + DECALAGEX, y*ECART + DECALAGEY)
# Cas des polygones convexes
# Q1
# Cet angle est de 360°/n
# En effet au total la tortue aura effecuté un tour complet (360°), mais en
# n fois. Il faut donc diviser les 360° par n.
# Q2 Réalisez une procédure nommée polygone_reg_convexe
def polygone_reg_convexe(n, l):
"""
Dessine un polygone régulier convexe à 'n' côtés de longueur 'l' depuis
l'état scourant de la tortue
CU : n et l entiers strictement positifs
Exemple :
>>> polygone_reg_convexe(5, 100)
"""
assert(type(n) is int and n > 0), "n doit être un entier strictement \
positif"
assert(type(l) is int and l > 0), "l doit être un entier strictement \
positif"
pendown()
for i in range(0, n):
left(360/n)
forward(l)
# Q3 Réalisez la figure Quatre polygones convexes.
print("Quatre polygones convexes")
deplacer(-1, 1)
polygone_reg_convexe(4, COTE)
deplacer(1, 1)
polygone_reg_convexe(5, COTE)
deplacer(-1, -1)
polygone_reg_convexe(6, COTE)
deplacer(1, -1)
polygone_reg_convexe(7, COTE)
suivant()
# Cas des polygones étoilés
# Q1 Réalisez une procédure nommée polygone_etoile
def polygone_etoile(n, l, k):
"""
Dessine un polygone régulier étoilé à 'n' côtés de longueur 'l' avec 'k'
étant l'ordre de parcours des sommets depuis l'état courant de la tortue.
CU : n, l et k entiers strictement positifs
Exemple :
>>> polygone_etoile(7, 100, 3)
"""
assert(type(n) is int and n > 0), "n doit être un entier strictement \
positif"
assert(type(l) is int and l > 0), "l doit être un entier strictement \
positif"
assert(type(k) is int and k > 0), "k doit être un entier strictement \
positif"
pendown()
for i in range(0, n):
left(k*360/n)
forward(l)
# Q2 Réalisez la figure Quatre polygones étoilés.
print("Quatre polygones étoilés")
deplacer(-1, 1)
polygone_etoile(5, COTE, 2)
deplacer(1, 1)
polygone_etoile(7, COTE, 3)
deplacer(-1, -1)
polygone_etoile(8, COTE, 3)
deplacer(1, -1)
polygone_etoile(9, COTE, 5)
# Q3 Peut-on dessiner un hexagone étoilé ?
# L'hexagone en bas à gauche de la figure Quatre polygones étoilés est un
# hexagone étoilé, donc oui.