Forum Programmation.python Rebonds sur une surface circulaire

Posté par  . Licence CC By‑SA.
Étiquettes :
0
20
mai
2018

Bonjour,
je débute en Python et je cherche à programmer un "billard circulaire" à l'aide de Turtle. Je n'arrive pas à déterminer l'angle à imposer à turtle (qui conçoit les angles bizarrement je trouve) de la bille sur les rebords du billard. Voici la partie du programme concernée :(je suis désolée si ce n'est pas le bon format)

   while nbrebonds>=0:
        forward(1)
        if (distance(0,y)>rayon):
            print(distance(0,y))
            left(2*angleinitial)  #j'ai mis cet angle comme test mais il ne fonctionne pas
            forward(1)
            nbrebonds+=(-1)

J'aimerais beaucoup réussir ce programme dans le cadre de mon TIPE, merci beaucoup !

  • # Commencer par le commencement

    Posté par  . Évalué à 1.

    Est-ce que tu as essayé de faire un schéma ?

    • [^] # Re: Commencer par le commencement

      Posté par  . Évalué à 1.

      Oui bien sûr, je connais mathématiquement l'angle de rebond, le seul problème est de le donner à turtle car l'angle qu'il prend en argument doit se faire faire la gauche ou la droite et selon une parallèle à l'axe des abscisses, or pour un cercle la bille rebondit selon la tangente au cercle dont la normale n'est pas parallèle à cet axe…

  • # se renseigner sur les calculs d'angle de rebond

    Posté par  . Évalué à 2.

    il y a surement plein de source sur internet,
    mais de memoire et generalement, quand un objet arrive en ligne droite, sur une surface, son angle de rebond est directement "symetrique" à son angle d'arrivée.

    pour la mise en forme de ton code il faut encadrer ton code avec les balises

    ```python
    ici ton code
    avec les espaces de debut
    de ligne
    ```

    ce qui va donner l'affichage

    ici ton code
       avec les espaces de debut
       de ligne
    • [^] # Re: se renseigner sur les calculs d'angle de rebond

      Posté par  . Évalué à 1.

      Je n'ai pas trouvé de sources qui utilisent le module turtle. La plupart utilise d'autres interfaces graphiques ou il suffit juste d'inverser la composante x ou y de la vitesse pour produire le rebond, or il n'y a pas cette fonction sur turtle.
      Merci !

  • # Piste

    Posté par  (site web personnel) . Évalué à 7.

    Faire tourner la tortue vers la gauche ou vers la droite est approprié lorsqu'on sait spécifiquement de quel angle on veut la faire tourner. Ce n'est pas vraiment ton cas ici, cet angle dépendant de l'angle d'incidence.

    Il va t'être indispensable d'enregistrer dans une variable le cap de la tortue avant rebond. Ensuite, à l'impact, il va falloir déterminer la direction de la tangente ou de la normale (une belle application de trigonométrie : tu connais l'abscisse et l'ordonnée du point d'impact, ainsi que le centre et le rayon du cercle, donc plus qu'il n'en faut pour calculer l'angle du point d'impact dans ce cercle !), puis calculer le nouveau cap. Enfin, tu pourras utiliser la fonction setheading() pour fixer le nouveau cap de la tortue.

    Au fait, dans ton code, qu'est-ce que c'est que ce y qui apparaît dans distance(0,y) > rayon ? Ton cercle n'est pas centré à l'origine ?

  • # Par défaut… angles relatifs

    Posté par  (site web personnel) . Évalué à 3.

    Pas bizarre, c'est un angle par rapport à l'orientation de ta tortue.

    Si besoin, j'ai un petit mémento turtle en ligne.

    Soit tu restes en rotations relatives, mais il faut le prendre en compte, soit tu passes en angles absolus. Et comme indiqué, un petit schéma pour tes calculs aide pas mal.

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

  • # Commentaire supprimé

    Posté par  . Évalué à 0. Dernière modification le 26 mai 2018 à 10:07.

    Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.