2017-02-21 16 views
1

Хочу обратить по точкам окружность так, без canvas.create_oval(), но с использованием формулы х^2 + у^2 = г. Круг также должен быть нарисован внутри квадрата.Tkinter: рисовать круг на холсте без create_oval

Это код:

center = (maxx - ((maxx - minx)/2), maxy - ((maxy - miny)/2)) 
radius = ((maxx - minx)/2 + (maxy - miny)/2)/2 

for xc in range(0, x): 
    for yc in range(0, y): 
     if radius - 10 <= (xc - center[0]) ** 2 + (yc - center[1]) ** 2 <= radius + 10: 
      canvas.create_oval(xc + 50, yc + 50, xc + 50, yc + 50) 
  • (Maxx, Maxy) и (шалунья, мин) используются, чтобы нарисовать прямоугольник (используя canvas.create_rectangle)

  • х и y - ширина и высота холста

  • canvas.create_oval (xc + 50, yc + 50, xc + 50, + 50 Ус) используется только для имитации POIN, потому что в Tkinter не существует что-то вроде canvas.create_point

Проблема заключается в том, что круг, который вышел совершенно отличается от того, Я ожидал. (Не волнует кружок ручной работы

x = 400, y = 300, minx = 103, maxx = 269, miny = 62, maxy = 212, center = (186,0, 137,0), радиус = 79,0

photo

Как вы можете видеть круг действительно меньше, а центр не там, где я хочу? Что я делаю не так ??

+0

'* Что я делаю не так ?? * - Начнем с того, что вы звоните 'canvas.create_oval()', несмотря на свой комментарий, "* Я не могу использовать' canvas.create_oval() '*". Вы можете это назвать или нет? Если нет, почему бы и нет? –

+0

Извините, я забыл объяснить это. Я использую этот create_oval только для имитации точки (на самом деле, поскольку вы видите, что рисованные круги имеют размер 1 пиксель). Я не могу использовать use .create_oval, чтобы нарисовать главный круг, а не вообще –

+0

Я знаю, что вы говорите, чтобы игнорировать рисованный круг, но откуда он взялся? Нарисован ли рисунок, чтобы показать, что это примерно желаемый результат? Кроме того, это поле является результатом 'create_rectangle', правильно? Кроме того, какой код нарисовал этот пункт в центре? –

ответ

1

у нас был хороший разговор, где я расспросил все входы , но вход не был проблемой.

К сожалению, нам потребовалось много времени, чтобы понять, что проблема была в формуле.

Это не r = x^2 + y^2, это r^2 = x^2 + y^2.

Соответствующий цикл будет выглядеть следующим образом:

r_squared = radius * radius 
for xc in range(0, x): 
    for yc in range(0, y): 
     if r_squared - 10 <= (xc - center[0]) ** 2 + (yc - center[1]) ** 2 <= r_squared + 10: 
      canvas.create_oval(xc, yc, xc, yc)