Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [Python|turtle] creation d'étoile
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

[Python|turtle] creation d'étoile

Posté le 21/01/2015 10:40

Salut à tous voila un ptit projet en python que j'ai et je le poste sur PC car c'est pas un problème de syntaxe mais d'algorithme
Ce programme marche pour les étoiles à nombre de branches impairs et pour les étoiles à 6 branches
voila l'algorithme : http://pastebin.com/XCheXkGZ
pour les étoiles à nombre pair de branches, le programme crée deux polygones "imbriqués" l'un dans l'autre avec un nombre de cotés égal au nombre de branches/2. Le problème se situe entre les lignes 27-33 car c'est après avoir tracé le premier polygone que j'essais de trouver le point de départ du second mais ca le décale en fait (il est néanmoins bien tracé )
Voila une image explicative :
@Fab chez moi elle a chargé en 5 secondes


Fabcvlr Hors ligne Membre Points: 2271 Défis: 41 Message

Citer : Posté le 21/01/2015 11:10 | #


Peux tu uploader une image d'étoile ratée à 8 branches ?
L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 21/01/2015 17:47 | #


voila : à droite c'est une image à 8 branches mais pour que tu vois mieux le décalage j'en ai fait une à 16
le problème est donc que c'est à chaque fois trop décalé vers la droite
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Fabcvlr Hors ligne Membre Points: 2271 Défis: 41 Message

Citer : Posté le 21/01/2015 23:09 | #


Problème dans ton décalage?
L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 21/01/2015 23:12 | #


Tout a fait
Et je crois avoir découvert quelque chose : déjà j'ai la confirmation que l'erreur se trouve sur les forward() lignes 28 et 33.
Alors pour un étoile à 6 branches pour qu'il n'y ai aucun décalage c'est bien longueur/3 mais pour une étoile à 8 branche c'est Longueur/24*7 omg
Je cherche un algorithme afin de faire correspondre les deux mais bon
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 21/01/2015 23:13 | #


T'es sûr que c'est bien avancer d'un tiers ?
Si oui, alors l'erreur n'est pas de là. Fais gaffe, parce que si l'erreur était sur l'angle tu pourrais la corriger en modifiant une valeur de longueur.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 21/01/2015 23:22 | #


Bah non justement pour moi l'erreur est de là sinon j'ai trouvé là un topic qui en parle mais ne dis pas la solution pour les etoiles à nombre pair de branches (à moins d'avoir mal lu )

Ajouté le 21/01/2015 à 23:30 :
Aha ! La recherche se précise : pour 10 étoiles il faudrait faire forward(longueur/24*6.5) mais ATTENTION ceci est une valeur inexacte (on voit encore un petit décalage ) mais au moins ca s'affine
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Fabcvlr Hors ligne Membre Points: 2271 Défis: 41 Message

Citer : Posté le 22/01/2015 08:37 | #


Je pense que c'est la méthode qui n'est pas bonne. Tu trace un triangle et tu fais pivoter d'un angle de (360 / branches).
L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !
Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 22/01/2015 16:17 | #


Ou as-tu vu écrit qu'il fallait avancer d'un tiers ? Est-ce que ce ne serait pas un tiers d'une longueur variable (ou à l'inverse, constante) ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Fabcvlr Hors ligne Membre Points: 2271 Défis: 41 Message

Citer : Posté le 22/01/2015 16:19 | #


Ce ne serait pas 1/3 de rotation ?
L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 22/01/2015 17:41 | #


En fait j'ai pris 1/3 parceque ca marchait avec 6 côtés mais tout a fait lephe
et fab je ne pense pas
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 22/01/2015 17:47 | #


Ah mais c'est pas une formule générale alors.
J'ai pas exactement compris ce que tu veux faire, tu saurais m'expliquer quel doit être le rendu final pour expliquer le dessin de plusieurs polygones en rotation ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 22/01/2015 17:54 | #


En fait lorsque que le programme fini de tracer le premier polygone (quand c'est une étoile à nombre de branches pair bien sur ), je dis au "curseur" d'avancer d'une certaine longueur (qui correspond pour 6 branches à longueur/3 et pour 8 branches à longueur*7/24 ). Il faudrait changer cela et mettre une formule à la place en fait car du coup ca marche pas pour tout .
Après avoir avancé de cette longueur, je demande au curseur de tourner de 180/nb_de_pointes ° vers la gauche puis de ré-avancer de la même longueur que précedemment. Ensuite il ne reste plus qu'a tracer le 2nd polygone. Toute cette maneuvre a donc pour seul but de trouver le point de départ du 2nd polygone .
En fait regarde l'image explicative dans le post tu verras
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 22/01/2015 18:04 | #


Je te conseille bien plus simple.
Tu mets un cercle qui a pour centre le centre de la fenêtre. Tu prends le point à la verticale en haut du cercle et tu dessines un polygone depuis ce point.
Ensuite, tu prends le point à, par exemple, 45° sur la droite du premier et tu redessines un polygone.

L'angle entre chaque polygone dépend :
→ Du nombre n de côtés ;
→ Du nombre p de polygones ;
Et si je raconte pas de conneries, sa valeur est de 360/(n*p).

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 22/01/2015 18:09 | #


Aha en effet mais j'ai quelques questions :
-comment trouver le rayon du cercle sachant que ca trace le polygone en fonction de la longueur de son cote (si jamais c'est pas grave on peu prendre une valeur pas defaut hein )
-comment trouver ce deuxieme point ?
a partir de la je pense que ca pourrai le faire
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 22/01/2015 18:16 | #


Si t'as fait un peu de trigo (1S), tu sais déjà tout ça, mais au cas où :
→ L'angle 0 est au milieu à droite du cercle. Si tu prends une graphique avec une cercle de centre O et de rayon 1, le point correspondant à l'angle 0 est aux coordonnées (1;0).
→ Les angles augmentent dans le sens trigonométrique = anti-horaire.
→ La position d'un point sur un cercle selon son angle (décrit ci-dessus) est (x_centre + rayon * cos(angle) ; y_centre + rayon * sin(angle)).
→ Les angles sont toujours exprimés en radians (2π radians = 360°).

Pour le rayon du cercle, c'est toi que le choisis. Il te suffit d'avoir trois variables, par exemple x_centre, y_centre et rayon.
Pour trouver le deuxième point il suffit d'appliquer la formule ci-dessus à partir de l'angle.

Au passage ton angle va diminuer dans les exemples que tu nous a présentés
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 22/01/2015 18:25 | #


Alors je suis en 2nd donc ce "rappel" est bienvenue
Si les angles sont exprimés en radians, me faut-il faire ( 360/(n*p) /2π) pour convertir ? pasque j'ai jamais étudié les radians non plus ...
D'accord j'essaie ca le plus tot possible (ce qui n'est pas se soir car j'ai un exposé à faire pour...demain )
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 22/01/2015 18:32 | #


Pour la conversion radians/degrés, rien de bien compliqué.
Pour aller de degrés en radians on ramène à une unité de « 1 » (donc entre 0 et 1, comme une échelle universelle), puis on multiplie par 2π (équivalent de 360°), ce qui nous donne :
angle/360*2*pi

Je ne sais plus comment on note pi en Python, mais t'as compris le principe.
Dans une optique de complétude, on ne peut pas faire ça en C car si l'angle est un entier (courant), alors le ramener entre 0 et 1 implique qu'il soit tronqué, donc on a toujours 0... pour cette raison, et dans tous les cas de conversion, on multiplie avant de diviser. Ça augmente aussi la précision.
angle*2*pi/360 = angle*pi/180

Je te conseille de toujours prendre cette habitude.

Si t'as compris tout le reste, tu verras que c'est très utile (c'est la base de la trigonométrie ), et puis ça t'avance un peu sur l'année prochaine si tu veux aller en S
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 125 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd