2017-02-21 6 views
1

Ich möchte ein Kreis so ohne canvas.create_oval Punkt für Punkt zeichnen() jedoch unter Verwendung der Formel x^2 + y^2 = r. Der Kreis muss auch innerhalb eines Quadrats gezeichnet werden.Tkinter: Zeichne einen Kreis auf einer Leinwand ohne create_oval

Dies ist der Code:

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) und (minx, min) verwendet, um das Rechteck zu zeichnen (mit canvas.create_rectangle)

  • x und y sind die Breite und die Höhe der Leinwand

  • canvas.create_oval (xc + 50, yc + 50, xc + 50, yc + 50) verwendet wird, nur die poin zu simulieren, weil in tkinter nicht so etwas wie canvas.create_point

Das Problem ist vorhanden, dass der Kreis, der völlig anders herauskam, was ist Ich erwartete. (Kümmern Sie sich nicht um den von Hand gezeichneten Kreis.

x = 400, y = 300, minx = 103, maxx = 269, miny = 62, maxy = 212, Mitte = (186.0, 137.0), Radius = 79.0

photo

Wie Sie den Kreis sehen kann, ist wirklich kleiner und das Zentrum ist nicht, wo ich? will Was ich tue, falsch ??

+0

'* Was mache ich falsch ?? *' - mit starten, die Sie anrufen 'canvas.create_oval()', trotz Ihrer Kommentar, "* Ich kann' canvas.create_oval() '*" nicht verwenden. " Kannst du es anrufen oder nicht? Wenn nicht, warum nicht? –

+0

Entschuldigung, ich habe vergessen, das zu erklären. Ich benutze create_oval nur, um einen Punkt zu simulieren (tatsächlich können Sie sehen, dass die Kreise 1 Pixel groß sind). Ich kann nicht verwenden .create_oval, um den Hauptkreis zu zeichnen, überhaupt nicht –

+0

Ich weiß, dass Sie sagen, den Hand gezeichneten Kreis zu ignorieren, aber woher kam es? Hand gezeichnet, um zu zeigen, dass das ungefähr das gewünschte Ergebnis ist? Auch diese Box ist das Ergebnis von create_rectangle, oder? Welcher Code zeichnete diesen Punkt in der Mitte? –

Antwort

1

Wir haben eine gute Diskussion, wo ich alle Eingänge in Frage gestellt , aber die Eingabe war nicht das Problem.

Leider dauerte es so lange, bis wir erkannten, dass das Problem die Formel war.

Es ist nicht r = x^2 + y^2, es ist r^2 = x^2 + y^2.

Die entsprechende Schleife würde wie folgt aussehen:

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) 
Verwandte Themen