#python #python_3x #tkinter
Здравствуйте! Подскажите, пожалуйста, как правильно нарисовать спираль? Написал такую пародию на код from tkinter import * root = Tk() canvas = Canvas(root, width=300, height=300) canvas.pack() step = 10 p = [145, 145, 155, 155] iters = 0 canvas.create_arc(p[0], p[1], p[2], p[3], start=0, extent=180, style=ARC) while p[0] > 10: if (iters % 2): canvas.create_arc(p[0] - step, p[1] - step, p[2], p[3], start=0, extent=180, style=ARC) p[0], p[1] = p[0] - step, p[1] - step else: canvas.create_arc(p[0], p[1], p[2] + step, p[3] + step, start=0, extent=-180, style=ARC) p[2], p[3] = p[2] + step, p[3] + step iters += 1 root.mainloop() На выходе получаю такое: Вопрос в том как избавиться от этой щели? Я пробовал играться с аргументами start и extent, но какого-либо качественного результата это не дало, потому что две части не совпадали друг с другом, т.е. что-то типо этого: ^ Тут я от балды ввел значения, попиксельно не подгоняя. Сталкивался ли кто с такой проблемой?
Ответы
Ответ 1
На каждом шаге нужно расширять эллипс (частью которого является отрисовываемая дуга) вверх и вниз одинаково. Если делать как у вас сейчас, то центры четных и нечетных эллипсов будут смещаться вверх и вниз от горизонтальной оси, из-за чего и получается зазор между верхней и нижней частью. Рабочий код: from tkinter import * root = Tk() canvas = Canvas(root, width=300, height=300) canvas.pack() step = 10 p = [145, 145, 155, 155] iters = 0 canvas.create_arc(*p, start=0, extent=180, style=ARC) while p[0] > step: p[1] -= step/2 # расширение вниз p[3] += step/2 # расширение вверх if iters % 2: p[0] -= step # расширение и сдвиг левой границы влево canvas.create_arc(*p, start=0, extent=180, style=ARC) else: p[2] += step # расширение и сдвиг правой границы вправо canvas.create_arc(*p, start=0, extent=-180, style=ARC) iters += 1 root.mainloop()
Комментариев нет:
Отправить комментарий