En fait je veux trouver les coordonnées de plusieurs points .
Ces points sont en fait le contour du grand cercle .
Alors le petit cercle devra suivre la trace du grand cercle (il se téléportera de points en points).
Ces points ont peux les calculer avec les coordonnées cartésiennes (X, y) ou avec les coordonnées polaires (r, thêta) le problème c'est que je ne sais pas comment faire.
Je sais juste qu'il faut le rayon et l'angle pour trouver un point sur le cercle mais après je suis perdu dans les formules.
La seule valeur qui change est l'angle (je crois) car le rayon est le même.
Donc tu ne cherches pas à déterminer les coordonnées d'un point, mais tu veux exprimer celles d'un ensemble de points, c'est à dire l'équation du cercle.
Exactement, je ne veux pas calculer les coordonnées d'un seul point mais touts les points du cercle, pour ensuite y faire glisser le deuxième cercle.
Je crois que la méthode consiste à incrémenter l'angle (changer sa valeur) de 0 à 360 degrés pour trouver les points mais je suis toujours coincé au même endroit.
Voici le code que j'ai commencé à écrire :
from tkinter import * from math import *
class Area: def __init__(self, width, height): """Main class"""
La prochaine fois, pense à utiliser des balises code, ça permet entre autres la coloration syntaxique.
Dans ton code, je ne vois pas de boucle événementielle, mais si je comprends bien, tu cherches à faire tourner un cercle autour d'un autre. À chaque pas de ta boucle, tu auras donc un point différent sur ton cercle « maître ».
Le plus simple est d'identifier ce point par son angle (que tu incrémenterais, de 1° par exemple, à chaque tour de boucle). Il ne te sera pas nécessaire de connaître les coordonnées de ce point, car ce n'est pas lui que tu manipuleras directement. On peut toute fois le noter M pour s'y retrouver un peu, et α l'angle associé. Par ailleurs, j'ai considéré que le cercle maître était de centre O et de rayon R.
On considère ensuite le cercle esclave, de rayon r (fixé) et de centre A (variable). A est en fait un point du cercle de centre O et de rayon R+r (puisque M appartient aux deux cercles et que O, M et A sont alignés).
A se retrouve associé au même angle α que M, et tu peux donc retrouver ses coordonnées cartésiennes (tu as toutes les données : le centre O, le rayon R+r, et l'angle α, qui forment un repère et des coordonnées polaires).
Une fois le point A connu, et connaissant le rayon r du cercle esclave, il ne te reste plus qu'à le tracer.
Je suis en 1 ere SSI mais je suis pas hyper fort en maths .
Désolé pour le double commentaire, mais est-ce que vous savez comment calculer les coordonnées de M ?
Sachant que le centre du cercle "maitre" est le centre de la fenêtre graphique (200, 200) et que le rayon est de 100 pixels et que l'angle change mais j'ai commencé avec un angle de 90 degrés, et sachant que l'axe des ordonnées sur le module tkinter est inversé c-a-d que 0 correspond au haut de la fenêtre.
Et dans quel but dois-tu réaliser ce programme, c'est pour un exercice ?
Je suppose que tu n'es pas très à l'aise avec les changements de repère, mais tu connais les coordonnées polaires de M dans un repère centré sur O (puisque tu connais le rayon de ton cercle, et que tu connais l'angle α). Tu peux donc opérer une translation pour centrer ton repère sur ce point O.
Partant de là, tu peux déterminer facilement les coordonnées cartésiennes de M dans ce repère (par la conversion des données polaires).
Il ne reste plus qu'à opérer la translation inverse pour revenir au repère initial.
# Create the two circles relative to each other self.big_circle = Circle(self.canvas, self.window_items, 100, "white", "blue", None) self.small_circle = Circle(self.canvas, self.window_items, 20, None, "magenta", self.big_circle.items)
def coords_circle(self, x, y, s_circle): """update the small circle's coordinates"""
s_circle["x1"] = x - s_circle["radius"] s_circle["x2"] = x + s_circle["radius"] s_circle["y1"] = y - s_circle["radius"] s_circle["y2"] = y + s_circle["radius"]
class Commands: def __init__(self, area): """Use commands to explore functions"""
def change_speed(self, new_speed): """change the small circle's speed"""
self.area.speed = int(new_speed)
def manage_moves(self, answer): """launch or stop the small circle"""
if answer == "1": self.area.move_circle(self.area.small_circle.items, self.area.big_circle.items) else: if self.area.move: self.area.window.after_cancel(self.area.move)
def change_color(self, circle, in_color, out_color): """change color of a circle"""
× 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.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique