Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mesure d'angle

    5 juin 2019 à 19:58:14

    Salut, j'utilise pycharm pour coder, or l'unité d'angle est prédéfini sur le radian, et j'aimerais changer ça. Si vous avez la solution n'hésitez pas à répondre!
    • Partager sur Facebook
    • Partager sur Twitter
      5 juin 2019 à 20:06:07

      Salut,

      Tu ne peux pas changer une fonction prédéfinie dans un module. Le seul moyen est de la coder toi-même

      Bonne journée

      • Partager sur Facebook
      • Partager sur Twitter

      "I believe in two things. Discipline and the Bible." The Shawshank Redemption

        5 juin 2019 à 20:31:46

        BergiGnon a écrit:

        Salut,

        Tu ne peux pas changer une fonction prédéfinie dans un module. Le seul moyen est de la coder toi-même

        Bonne journée

        Et comment la coder pour que un angle de 90 radian soit équivalent à un angle de 90 degré, parce que je peux effectivement convertir un angle de 90 radian en degré mais il ne fera pas 90 degré



        • Partager sur Facebook
        • Partager sur Twitter
          5 juin 2019 à 20:34:50

          AxelEven1 a écrit:

          BergiGnon a écrit:

          Salut,

          Tu ne peux pas changer une fonction prédéfinie dans un module. Le seul moyen est de la coder toi-même

          Bonne journée

          Et comment la coder pour que un angle de 90 radian soit équivalent à un angle de 90 degré, parce que je peux effectivement convertir un angle de 90 radian en degré mais il ne fera pas 90 degré




          Ah ah ah ! C'est à toi de trouver :soleil:

          -
          Edité par bergiLeZÉR0 5 juin 2019 à 20:36:39

          • Partager sur Facebook
          • Partager sur Twitter

          "I believe in two things. Discipline and the Bible." The Shawshank Redemption

            5 juin 2019 à 21:15:26

            D'acc! merci pour la réponse!
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              6 juin 2019 à 11:07:57

              Il vaut mieux travailler en radian, et garder les conversions degré-radian et radian-degré dans la partie UI de ton application.

              • Partager sur Facebook
              • Partager sur Twitter
                6 juin 2019 à 15:10:09

                A savoir que 90 radians != 90° mais bon xD

                Bref j'ai été confronté a peu près au même problème car je fais des calculs d'angle en radians et j'ai besoins de degrés pour rotate mon image. J'ai donc essayé le

                math.acos(cosangle)

                en bidouillant un peu mais bien entendu, ça part en couille (genre ma fonction fonctionne bien lorsque je l'appelle mais renvoie n’importe quoi quand elle est appelée par mon programme main xD)

                Bref bonne chance ^^

                • Partager sur Facebook
                • Partager sur Twitter

                 "Je ne crois qu'en une seule chose : le pouvoir de la volonté humaine."  - Joseph Stalin

                Anonyme
                  7 juin 2019 à 9:23:26

                  import math
                  import tkinter as tk
                  
                  
                  # Core:
                  
                  class Point:
                  
                      def __init__(self, x, y):
                          self.x, self.y = x, y
                  
                      def rotate(self, other, angle):
                          distance = math.hypot(self.x - other.x, self.y - other.y)
                          self.x = other.x + math.cos(angle) * distance
                          self.y = other.y + math.sin(angle) * distance
                  
                  
                  def point_to_coords(point, width, height=None):
                      if height is None:
                          height = width
                      w, h = width / 2, height / 2
                      return tuple(map(int, (point.x - w, point.y - h, point.x + w, point.y + h)))
                  
                  
                  # UI:
                  
                  CAN_WIDTH = 400
                  CAN_HEIGHT = CAN_WIDTH
                  
                  CENTRE_X = CAN_WIDTH // 2
                  CENTRE_Y = CAN_HEIGHT // 2
                  CENTRE_WIDTH = 4
                  
                  DISTANCE = 125
                  
                  OBJECT_X = CENTRE_X + DISTANCE
                  OBJECT_Y = CENTRE_Y
                  OBJECT_WIDTH = 24
                  
                  
                  def rotate(angle):
                      object_point.rotate(centre_point, math.radians(float(angle)))
                      canvas.coords(object_item, point_to_coords(object_point, OBJECT_WIDTH))
                  
                  
                  centre_point = Point(CENTRE_X, CENTRE_Y)
                  object_point = Point(OBJECT_X, OBJECT_Y)
                  
                  root = tk.Tk()
                  
                  canvas = tk.Canvas(root, width=CAN_WIDTH, height=CAN_HEIGHT)
                  canvas.pack()
                  
                  centre_item = canvas.create_oval(point_to_coords(centre_point, CENTRE_WIDTH),
                                                   fill="red")
                  object_item = canvas.create_oval(point_to_coords(object_point, OBJECT_WIDTH),
                                                   fill="black")
                  
                  scale = tk.Scale(root, orient="horizontal", from_=0, to=360,
                                   resolution=1, tickinterval=60, length=250,
                                   label="Rotation (en degrés) :", relief="solid",
                                   command=rotate)
                  scale.pack()
                  
                  root.mainloop()
                  

                  -
                  Edité par Anonyme 7 juin 2019 à 9:42:41

                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 juin 2019 à 12:15:47

                    IdiotBête_ a écrit:

                    import math
                    import tkinter as tk
                    
                    
                    # Core:
                    
                    
                    
                    # UI:
                    

                    +10 pour la séparation (le découplage)

                    A signaler que Python dispose en standard d'une rotation d'un angle en degrés grâce à la classe Vec2D du module standard Turtle (à noter que cette rotation est une rotation vectorielle et non ponctuelle).  Cette classe hérite de tuple et surcharge l'addition et la soustraction, et bien qu'améliorable, elle peut être utile quand on travaille avec des vecteurs. J'ai repris le code de l'UI de IdiotBête_ et j'ai utilisé cette classe pour effectuer la rotation :

                    #!/usr/bin/env python3
                     
                    import tkinter as tk
                    from turtle import Vec2D
                    
                    
                    def rot(centre, angle, point):
                        CM=Vec2D(*point)-Vec2D(*centre)
                        return Vec2D(*centre)+CM.rotate(-angle)
                    
                     
                    # UI:
                     
                    CAN_WIDTH = 400
                    CAN_HEIGHT = CAN_WIDTH
                     
                    CENTRE_X = CAN_WIDTH // 2
                    CENTRE_Y = CAN_HEIGHT // 2
                    RADIUS1 = 2
                     
                    DISTANCE = 125
                     
                    OBJECT_X = CENTRE_X + DISTANCE
                    OBJECT_Y = CENTRE_Y
                    RADIUS2 = 12
                    
                    
                    def rotate(angle):
                        x, y=rot(centre_point, float(angle), object_point)
                        canvas.coords(object_item, x-RADIUS2, y-RADIUS2, x+RADIUS2, y+RADIUS2)
                    
                    root = tk.Tk()
                    
                    centre_point = (CENTRE_X, CENTRE_Y)
                    object_point = (OBJECT_X, OBJECT_Y)
                     
                    canvas = tk.Canvas(root, width=CAN_WIDTH, height=CAN_HEIGHT)
                    canvas.pack()
                     
                    centre_item =  canvas.create_oval(CENTRE_X-RADIUS1, CENTRE_Y-RADIUS1, CENTRE_X+RADIUS1, CENTRE_Y+RADIUS1, fill="red")
                    object_item = canvas.create_oval(OBJECT_X-RADIUS2,OBJECT_Y-RADIUS2,OBJECT_X+RADIUS2,OBJECT_Y+RADIUS2, fill="black")
                     
                    scale = tk.Scale(root, orient="horizontal", from_=0, to=360,
                                     resolution=1, tickinterval=60, length=250,
                                     label="Rotation (en degrés) :", relief="solid",
                                     command=rotate)
                    scale.pack()
                     
                    root.mainloop() 
                    

                    Le rendu est le même que le code de IdiotBête_ :

                                                                          



                    -
                    Edité par PascalOrtiz 7 juin 2019 à 12:24:11

                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 juin 2019 à 13:28:36

                      Je ne sait pas si je répond au problème, mais ne pourrais-tu pas créer une fonction par exemple Degree(radian) qui retournerais une valeur en degrés?

                      Voici à ce que je pensais :

                      import math
                      
                      def Degree(radian):
                          return radian*180/math.pi
                      
                      
                      ## Exemple ##
                      while(True):
                          rad = float(input("Mesure d'angle en radians :"))
                          deg = Degree(rad)
                          print(rad,"radians, correspond à", deg, "degrés.")
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 juin 2019 à 14:15:03

                        Cette fonction existe déjà :

                        >>> from math import degrees
                        >>> degrees(3.141592653589793)
                        180.0
                        >>>



                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 juin 2019 à 21:09:26

                          Salut sinon on sait que 2pi est égal a 360 degrés donc tu peux écrire cette fonction si tu ne veux pas utiliser des fonctions de base.

                          def radtodeg(anglerad):
                              angledeg=(anglerad*360)/(2*3.14)
                              return angledeg
                              
                          print(radtodeg(3.14)) # affiche 180
                          print(radtodeg(3.14/2)) #affiche 90



                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 juin 2019 à 22:53:10

                            HugoDenim1 a écrit:

                            Je ne sait pas si je répond au problème, mais ne pourrais-tu pas créer une fonction par exemple Degree(radian) qui retournerais une valeur en degrés?

                            Voici à ce que je pensais :

                            import math
                            
                            def Degree(radian):
                                return radian*180/math.pi
                            
                            
                            ## Exemple ##
                            while(True):
                                rad = float(input("Mesure d'angle en radians :"))
                                deg = Degree(rad)
                                print(rad,"radians, correspond à", deg, "degrés.")


                            Non, il faut que la valeur envoyé par l'utilisateur en degré par exemple 56.5° mais interprété comme 56.5 rad soit converti en 56.5 ° mais je ne sais pas pour l'instant

                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 juin 2019 à 19:09:02

                              AxelEven1 a écrit:

                              HugoDenim1 a écrit:

                              Je ne sait pas si je répond au problème, mais ne pourrais-tu pas créer une fonction par exemple Degree(radian) qui retournerais une valeur en degrés?

                              Voici à ce que je pensais :

                              import math
                              
                              def Degree(radian):
                                  return radian*180/math.pi
                              
                              
                              ## Exemple ##
                              while(True):
                                  rad = float(input("Mesure d'angle en radians :"))
                                  deg = Degree(rad)
                                  print(rad,"radians, correspond à", deg, "degrés.")


                              Non, il faut que la valeur envoyé par l'utilisateur en degré par exemple 56.5° mais interprété comme 56.5 rad soit converti en 56.5 ° mais je ne sais pas pour l'instant

                              Je comprend pas le probléme la ,tu as accés a ta valeur 

                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 juin 2019 à 23:19:19

                                AxelEven1 a écrit:

                                HugoDenim1 a écrit:

                                Je ne sait pas si je répond au problème, mais ne pourrais-tu pas créer une fonction par exemple Degree(radian) qui retournerais une valeur en degrés?

                                Voici à ce que je pensais :

                                import math
                                
                                def Degree(radian):
                                    return radian*180/math.pi
                                
                                
                                ## Exemple ##
                                while(True):
                                    rad = float(input("Mesure d'angle en radians :"))
                                    deg = Degree(rad)
                                    print(rad,"radians, correspond à", deg, "degrés.")


                                Non, il faut que la valeur envoyé par l'utilisateur en degré par exemple 56.5° mais interprété comme 56.5 rad soit converti en 56.5 ° mais je ne sais pas pour l'instant


                                Aaaaaa ok ! Je viens de comprendre ! Mais sans un bout de code je pense pas que l'on puisse t'aider... Tu ne pourrais pas créer un petit bout de code qui résume ton problème ? On pourra alors t'aider avec beaucoup plus de facilité je pense ;)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Mesure d'angle

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown