Я создаю приложение, которое вращает несколько точек вокруг центральной точки. Цель состоит в том, чтобы соединить каждую точку, используя, например. линии / дуги и точки / (последующий чертеж) вращаются вокруг центральной точки.
Я пытаюсь выполнить это с помощью метода, который вращает каждую точку на определенную величину при каждом вызове метода, а затем распределяет каждую точку n
раз вокруг центральной точки, используя цикл for
.
(Для дальнейшего использования мне также понадобятся некоторые виджеты tkinter, работающие вдоль кода, например, записи для получения пользовательского ввода.)
Мой текущий код просто рисует круг для каждой точки, а не соединяет их. В настоящее время я не понимаю пару вещей:
Мой код на короткое время работает нормально, а затем закрывается с Error: maximum recursion depth exceeded.
- Это плохо, чтобы очистить холст с помощью .delete
?
Значение функции .after
, похоже, не оказывает никакого влияния, поэтому использование time.sleep
.
(Я также использовал цикл while True:
для запуска кода в более ранней версии, но я прочитал, что запускать бесконечный цикл внутри цикла событий GUI - это плохая практика. И я редактировал его из-за мерцания)
Было бы лучше структурировать мой код по-другому?
Извините за неправильную терминологию, за грязный и длинный пост / код, я новый не-английский студент Python.
class Create_gear:
def __init__(self, location, ox, oy, rpm, n):
self.location = location
self.ox = ox
self.oy = oy
self.rpm = rpm
self.n = n
self.rotation_from_normal = 0
#Rotates point px1, py1 by value of "rpm" each time method is called.
def draw_rotating_gear(self, px1, py1, px2, py2, r):
self.rotation_from_normal = self.rotation_from_normal +self.rpm
self.location.delete("all")
#rotates point px1, py1 n times around to form a circle.
for i in range (0, self.n):
angle = (math.radians(self.rotation_from_normal + 360/self.n *i) )
qx = ( self.ox + math.cos(angle) * (px1 - self.ox) - math.sin(angle) * (py1 - self.oy) )
qy = ( self.oy + math.sin(angle) * (px1 - self.ox) + math.cos(angle) * (py1 - self.oy) )
x0 = qx - r
y0 = qy - r
x1 = qx + r
y1 = qy + r
self.location.create_oval(x0, y0, x1, y1, fill = "black")
self.location.update()
time.sleep(0.01)
self.location.after(1000000000, self.draw_rotating_gear(480, 200, 500, 300, 5))