Re: Python, Turtle et étoiles...

7 views
Skip to first unread message

Olivier Miakinen

unread,
Jul 20, 2022, 6:01:23 PMJul 20
to
[diapublication, copie et suivi vers fr.sci.maths]

Bonsoir,

Le 20/07/2022 19:59, Dominique a écrit :
>
> Je me suis amusé à écrire un script assez simple qui dessine des étoiles
> avec Turtle :
>
> from turtle import *
> #speed(0)
> nb=int(input('Itérations '))
> ang=float(input('Angle à gauche '))
> for x in range (nb):
> forward(300)
> right(ang+180)
>
> Avec 5 itérations et une rotation à droite de 216° (180°+36°),

C'est-à-dire une rotation à gauche de 144° (180°−36°)

> j'obtiens
> bien un pentagramme. C'est assez simple, parce qu'on est là sur des
> triangles d'or.
>
> Si je passe à 20 itérations et des rotations à droite de 198°(180° +
> 18°),

Du coup des rotations à gauche de 162°.

> j’obtiens quelque chose d’intéressant.
>
> Ce que je ne sais pas, c’est comment m’assurer que mon étoile est bien
> exacte, c’est à dire que le curseur revient exactement à son point de
> départ. La précision de Python est suffisamment élevée pour donner
> l’impression de l’exactitude.
>
> Existe-t-il une formule qui permet, à partir du nombre de branche qu’on
> veut obtenir, de connaître l’angle de rotation du curseur ? Mes
> connaissances en géométrie trébuchent...

Déjà, pour que ça finisse par tomber juste, il suffit que l'angle soit un
multiple rationnel d'un tour complet, soit 2pi ou 360°. En degrés, vu que
360 est un nombre entier, il suffit que l'angle soit rationnel.

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.

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.

[suivi vers fr.sci.maths pour avoir d'autres avis]


--
Olivier Miakinen

Olivier Miakinen

unread,
Jul 20, 2022, 6:23:08 PMJul 20
to
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.

--
Olivier Miakinen

Dominique

unread,
Jul 21, 2022, 1:47:49 AMJul 21
to
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

HB

unread,
Jul 21, 2022, 2:35:56 AMJul 21
to
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.htm

Plutô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.

Dominique

unread,
Jul 21, 2022, 3:42:03 AMJul 21
to
Le 21/07/2022 à 08:35, HB a écrit :

> 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.htm
>
> Plutô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.
>

Bonjour André,

Je me suis promené sur ton site. Il est intéressant, notamment les
animations avec le compas et la règle.

Tu l'as programmé en Python ?

Pour 6, je reste étonné. En effet, l'étoile à 6 branches est composée de
2 triangles équilatéraux opposés. Pourquoi n'est-il pas possible de la
dessiner ?

Je vais réfléchir à ta méthode : partir du cercle dans lequel est
inscrit le polygone. À voir comment ça peut se traiter avec Turtle.
Note bien que c'est pour le jeu. À dire vrai, je n'ai pas véritablement
besoin de Turtle. Suis un grand garçon de 64 ans :-)

Bon, soyons francs, avec mon seul BEPC, mon bagage arithmétique et
géométrique est plus que modeste. Mais Python aide bien à transcender
ces faiblesses et à rendre les branches arithmétique et géométrique plus
attrayantes.

Bien à toi,

Dominique

HB

unread,
Jul 21, 2022, 5:10:03 AMJul 21
to
bonjour,

En fait, le pb de départ consiste à parcourir les n côtés d'un polygone
régulier étoilé puisqu'on ne relève pas le crayon pour recommencer
ailleurs. Du coup l'étoile formée de deux triangles équilatéraux n'est
pas visée...

amicalement,

HB.

P.S. : pourquoi "André" ? ;o)

Dominique

unread,
Jul 21, 2022, 11:45:13 AMJul 21
to
Le 21/07/2022 à 11:09, HB a écrit :

>
> En fait, le pb de départ consiste à parcourir les n côtés d'un polygone
> régulier étoilé puisqu'on ne relève pas le crayon pour recommencer
> ailleurs. Du coup l'étoile formée de deux triangles équilatéraux n'est
> pas visée...

Ton raisonnement est juste, sans lever le crayon, l'exercice est
impossible. J'imagine que Turtle autorise à reposer le crayon à un
endroit déterminé, mais je ne sais pas encore comment.

>
> P.S. : pourquoi "André" ? ;o)


Euh... je peux sortir un joker :-)) ?

Bien amicalement,

Dominique


Lulu

unread,
Aug 8, 2022, 2:16:13 PMAug 8
to
Le 20-07-2022, Olivier Miakinen <om+...@miakinen.net> a écrit :
> [diapublication, copie et suivi vers fr.sci.maths]

> [...] En degrés, vu que 360 est un nombre entier, [...]

360 me semble divisible par 2, 3, 4, 5, 6...

Dominique

unread,
Aug 9, 2022, 3:32:59 AMAug 9
to
360 est un nombre entier, pas premier :-)

Olivier Miakinen

unread,
Aug 9, 2022, 7:34:36 AMAug 9
to
Le 08/08/2022 à 20:16, Lulu m'a répondu :
>
>> [...] En degrés, vu que 360 est un nombre entier, [...]
>
> 360 me semble divisible par 2, 3, 4, 5, 6...

... ce qui confirme qu'il s'agit d'un nombre entier, puisqu'on peut
parler de sa divisibilité avec d'autres nombres entiers. C'est bien
la différence dont je parlais avec 2.pi, qui lui n'est ni entier ni
même rationnel.


--
Olivier Miakinen

Richard Hachel

unread,
Aug 17, 2022, 4:11:57 AMAug 17
to
840 est divisible par 2,3,4,5,6,7,8.

C'est un nombre sympa et conciliant.

Moi, je l'aime bien 840, c'est un nombre gentil.

R.H.

Olivier Miakinen

unread,
Aug 17, 2022, 4:33:16 AMAug 17
to
Le 17/08/2022 à 10:11, Richard Hachel a écrit :
>
> 840 est divisible par 2,3,4,5,6,7,8.
>
> C'est un nombre sympa et conciliant.
>
> Moi, je l'aime bien 840, c'est un nombre gentil.

<https://oeis.org/A003418>
§
Least common multiple (or LCM) of {1, 2, ..., n} for n >= 1, a(0) = 1.
1, 1, 2, 6, 12, 60, 60, 420, 840, 2520, 2520, 27720, 27720, 360360,
360360, 360360, 720720, 12252240, 12252240, 232792560, 232792560,
232792560, 232792560, 5354228880, 5354228880, 26771144400, 26771144400,
80313433200, 80313433200, 2329089562800, 2329089562800
§

<https://oeis.org/A298410>
§
Unique least common multiples for {1,2,...,n}.
2, 6, 12, 420, 840, 720720, 72201776446800,
6676878045498705789701874602220118271269436344024536000,
16674490806895842671659008751776385350270324508909651849955453691538889375930032935391666564679008085339616000
§

J'aime bien le nombre seize octodécillions
six-cent-soixante-quatorze-mille-quatre-cent-quatre-vingt-dix
septendécillions huit-cent-six-mille-huit-cent-quatre-vingt-quinze
sédécillions huit-cent-quarante-deux-mille-six-cent-soixante-et-onze
quindécillions six-cent-cinquante-neuf-mille-huit quattuordécillions
sept-cent-cinquante-et-un-mille-sept-cent-soixante-seize trédécillions
trois-cent-quatre-vingt-cinq-mille-trois-cent-cinquante duodécillions
deux-cent-soixante-dix-mille-trois-cent-vingt-quatre undécillions
cinq-cent-huit-mille-neuf-cent-neuf décillions
six-cent-cinquante-et-un-mille-huit-cent-quarante-neuf nonillions
neuf-cent-cinquante-cinq-mille-quatre-cent-cinquante-trois octillions
six-cent-quatre-vingt-onze-mille-cinq-cent-trente-huit septillions
huit-cent-quatre-vingt-neuf-mille-trois-cent-soixante-quinze sextillions
neuf-cent-trente-mille-trente-deux quintillions
neuf-cent-trente-cinq-mille-trois-cent-quatre-vingt-onze quatrillions
six-cent-soixante-six-mille-cinq-cent-soixante-quatre trillions
six-cent-soixante-dix-neuf-mille-huit billions quatre-vingt-cinq
milliards trois-cent-trente-neuf millions six-cent-seize-mille, c'est un
nombre gentil.

--
Olivier Miakinen

Richard Hachel

unread,
Aug 17, 2022, 4:51:03 AMAug 17
to
Oui, il est adorable.

R.H.

Marioux Paule

unread,
Sep 9, 2022, 2:35:36 PMSep 9
to
Il parait que d'après ce qu'il paraitrait un participant bien connu de
fr.sci.physique aurait découvert
le dernier nombre premier possible en entrant une infinité infinie de
nombres dans son ordinateur.

C'est un nombre n de quarante cinq mille milliards trois cent vingt milles
millions douze cent et quatre-vingt trois chiffres qui commence par
5689... et se termine par ....4075

Il parait.

Je suis la question de façon attentive.

Je vous tiens à l'électricité.

Paule

Olivier Miakinen

unread,
Sep 9, 2022, 3:37:32 PMSep 9
to
Le 09/09/2022 20:35, Marioux Paule a écrit :
>>
>> 360 est un nombre entier, pas premier :-)
>
> Il parait que d'après ce qu'il paraitrait un participant bien connu de
> fr.sci.physique aurait découvert
> le dernier nombre premier possible en entrant une infinité infinie de
> nombres dans son ordinateur.

Il a dû copier sur moi.

> C'est un nombre n de quarante cinq mille milliards trois cent vingt mille[]
> millions douze cent et quatre-vingt[-]trois chiffres qui commence par
> 5689... et se termine par ....4075
>
> Il parait.

Ah non, pas du tout. Je suis formel : j'ai moi-même compté à partir de l'infini
dans le sens décroissant (deux fois comme Chuck Norris), et le dernier nombre
premier possible est 2. Il n'y en a aucun autre après.

--
Olivier Miakinen

Marioux Paule

unread,
Sep 9, 2022, 3:44:11 PMSep 9
to
Ha oui, c'est pas con ça.

Au moins tu ne peux pas descendre plus bas dans les entiers.

Moi, j'avais pensé diviser un nombre réel comme racine de 2 par un
nombre négatif comme -3,5.

Mais ça me parait un peu trop compliqué.

Histoire de voir si on pouvait trouver un entier naturel entre 1 et 2.

Paule.
Reply all
Reply to author
Forward
0 new messages