Здравствуйте! Подскажите, пожалуйста, как правильно нарисовать спираль?
Написал такую пародию на код
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, но какого-либо качественного результата это не дало, потому что две части не совпадали друг с другом, т.е. что-то типо этого:
^ Тут я от балды ввел значения, попиксельно не подгоняя.
Сталкивался ли кто с такой проблемой?
Ответ
На каждом шаге нужно расширять эллипс (частью которого является отрисовываемая дуга) вверх и вниз одинаково. Если делать как у вас сейчас, то центры четных и нечетных эллипсов будут смещаться вверх и вниз от горизонтальной оси, из-за чего и получается зазор между верхней и нижней частью. Рабочий код:
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()
Комментариев нет:
Отправить комментарий