Sujet : Re: Python, Turtle et étoiles...
De : bayosky (at) *nospam* pasla.invalid (HB)
Groupes : fr.sci.mathsDate : 21. Jul 2022, 07:35:53
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <62d8f3ca$0$2999$426a74cc@news.free.fr>
References : 1 2 3 4
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0
Le 21/07/2022 à 07:47, Dominique a écrit :
Le 21/07/2022 à 00:23, Olivier Miakinen a écrit :
Le 21/07/2022 00:01, je répondais à Dominique :
>
Mais on peut faire mieux, et savoir au bout de combien d'itérations on
revient au point de départ pour la première fois. Soit (p/q)×360° l'angle
choisi. Si p et q sont premiers entre eux, alors il faudra exactement q
itérations pour que l'angle soit p×360°, soit 0° modulo 360°.
>
Par ailleurs, pour qu'une rotation « à droite » ne se transforme pas en
rotation à gauche, il suffit de choisir p et q de sorte que 0 < p < q/2.
>
Enfin, si tu veux des polygones étoilés et pas de bêtes polygones
convexes, il suffit de choisir p > 1, donc 2 ≤ p < q/2.
>
Cette formule peut aussi être utilisée pour choisir l'angle en fonction
du nombre d'itérations voulu. Déjà cela impose que q ≥ 5, parce que sinon
il est impossible d'avoir 2 ≤ p < q/2 lorsque q/2 ≤ 2.
>
Reprenons tes exemples. Ta rotation à droite de 216°, c'est (3/5)×360° (ou
(2/5)×360° si tu choisis l'angle le plus petit). Il faut donc 5 itérations.
Quant à ta rotation de 198°, c'est (11/20)×360° ou (9/20)×360°, donc 20
itérations.
>
Avec q=5, le seul p vérifiant 2 ≤ p < 2,5 est p=2.
>
Dans le second cas, q=20, les nombres p vérifiant 2 ≤ p < 10 sont les entiers
de 2 à 9. Parmi ceux-ci, les seuls à être premiers avec 20 sont 3, 7 et 9. Ton
exemple était avec p=9, mais tu peux aussi essayer p=3 et p=7.
>
Je te remercie pour toutes ces explications très intéressantes. J'ai modifié mon code comme suit :
from turtle import *
speed(0)
q=int(input('Itérations >2 '))
for p in range(2,int(q/2)+1):
if q==10:
p=3
if q/p!=int(q/p):
break
break
if q==5 or q==20:
p=3
if q%6==0:
p=5
ang=p/q*360
for x in range (q):
forward(150)
right(ang)
J'échoue systématiquement avec q=6. Je suppose qu'il existera d'autres cas d'échec. Mais passée une vingtaine d'itérations, le résultat devient inintéressant.
Passe une bonne journée,
Dominique
Bonjour,
Si j'ai bien suivi, il s'agit d'obtenir de beaux polygones réguliers étoilés ...
J'ai commis, il y a fort longtemps, la petite chose qui se trouve là :
http://bayosky.free.fr/maths/polygones/poly.htmPlutôt que d'utiliser l'angle de la "pointe" on peut se diriger vers les points prédéfinis sur le cercle de base.
concrètement, cela limite les erreurs qui s'accumulent doucement par des "virages" imparfaits.
S'agissant de "6", il n'existe pas de polygone régulier étoilé à 6 sommets.
Pour qu'une étoile à n sommets existe, il faut qu'au moins un entier inférieur à [n/2] soit premier avec n.
Il me semble que n=6 est le seul cas impossible.
Amicalement,
Hubert.