След из линий концы которых перемещаются по окружности
Я нарисовал линии концы которых перемещаются по окружностям. Входные данные берутся из файла, сначала координаты окружности, радиус, начальный угол и изменение угла. Нужно чтобы на экране было определенное кол-во следов, например 3. То есть когда рисуется 4 линия, удаляется 1, но я не знаю как это сделать. В моем коде линии рисуются до бесконечности.
import tkinter
import time
import math
SCREEN_SIZE = (600, 600)
f = open('info.txt', 'rt', encoding='utf-8')
list_str = [list(map(int, x.strip().split())) for x in f.readlines()]
f.close()
data = []
line_coords = []
line = []
trace_list = []
for i in range(1, len(list_str)):
data.append(list_str[i])
main = tkinter.Tk()
canvas = tkinter.Canvas(main, bg='white', height=SCREEN_SIZE[0], width=SCREEN_SIZE[1])
main.title('does not matter')
def xys(x, y):
return SCREEN_SIZE[0] // 2 + x, SCREEN_SIZE[1] // 2 - y
for j in range(len(data)):
try:
line_coords.append([*xys(data[j][0] + data[j][2] * math.cos(data[j][3] * math.pi / 180),
data[j][0] + data[j][2] * math.sin(data[j][3] * math.pi / 180)),
*xys(data[j + 1][0] + data[j + 1][2] * math.cos(data[j + 1][3] * math.pi / 180),
data[j + 1][0] + data[j + 1][2] * math.sin(data[j + 1][3] * math.pi / 180))])
except IndexError:
line_coords.append([*xys(data[j][0] + data[j][2] * math.cos(data[j][3] * math.pi / 180), data[j][0] + data[j][2] * math.sin(data[j][3] * math.pi / 180)),
*xys(data[0][0] + data[0][2] * math.cos(data[0][3] * math.pi / 180), data[0][0] + data[0][2] * math.sin(data[0][3] * math.pi / 180))])
line.append(canvas.create_line(*line_coords[j], width=2))
def rotate():
for j in range(len(data)):
data[j][3] += data[j][4]
try:
line_coords.append([*xys(data[j][0] + data[j][2] * math.cos(data[j][3] * math.pi / 180),
data[j][0] + data[j][2] * math.sin(data[j][3] * math.pi / 180)),
*xys(data[j + 1][0] + data[j + 1][2] * math.cos(data[j + 1][3] * math.pi / 180),
data[j + 1][0] + data[j + 1][2] * math.sin(data[j + 1][3] * math.pi / 180))])
except IndexError:
line_coords.append([*xys(data[j][0] + data[j][2] * math.cos(data[j][3] * math.pi / 180),
data[j][0] + data[j][2] * math.sin(data[j][3] * math.pi / 180)),
*xys(data[0][0] + data[0][2] * math.cos(data[0][3] * math.pi / 180),
data[0][0] + data[0][2] * math.sin(data[0][3] * math.pi / 180))])
for i2 in range(len(line_coords)):
canvas.create_line(*line_coords[i2])
main.after(1000, rotate)
rotate()
canvas.pack()
main.mainloop()
Мои входные данные: 3, 100 100 50 45 2, -200 -200 100 0 5, -200 200 50 -45 10, 100 -100 200 0 -7
Источник: Stack Overflow на русском