Speedcube.de Forum

Normale Version: Frage: Kennt sich jemand mit dem "Bresenham-Algorithmus für Kreise" aus?
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo...
ich suche jemanden, der schon mal mit diesem Algorithmus gearbeitet hat und mir erklären kann, wie ich diesen mit einer Java GUI für ein Referat anschaulich zeigen kann.

Hab mir gedacht, mit Algorithmen befassen wir uns alle und es scheinen viele Informatiker im Forum aktiv zu sein Smile

Also ich bin wirklich für jede Antwort dankbar.

Momentan habe ich (immerhin): GUI mit Canvas, Benutzer kann Radius und Koordinaten für Mittelpunkt eingeben, Kreis wird gezeichnet (Button "START"), die ersten 4 Pixel stelle ich als Quadrate dar (benutzte drawRect und nehme die Koordinaten des linken Eckpunktes in Abhängigkeit des Mittelpunktes, Breite/Höhe sind 10 Pixel), dann beginnt der "wahre" Algorithmus und ich komme nicht weiter...
Code:
public void jButton1_ActionPerformed(ActionEvent evt) {
    Graphics g = canvas1.getGraphics();
    int r = Integer.parseInt(jTextField1.getText());
    int mx = Integer.parseInt(jTextField2.getText());
    int my = Integer.parseInt(jTextField3.getText());
    g.drawRect(mx-5, my-r-5, 10, 10);
    g.drawRect(mx-5, my+r-5, 10, 10);
    g.drawRect(mx-r-5, my-5, 10, 10);
    g.drawRect(mx+r-5, my-5, 10, 10);
    g.drawOval(mx-r, my-r, 2*r, 2*r);
    int x = mx;
    int y = my-r;
    int f = (5/4)-r;
    int blubb = 3;
    while (blubb<10) {
      //innerhalb des Kreises
      if (f<0) {
        f = f + 20*mx + 10;
        x = x + 10;
      } // end of if
      //ausserhalb des Kreises
      else {
        f = f + 20*mx - 20*my + 20;
        x = x + 10;
        y = y + 10;
      } // end of if-else
      g.drawRect(x-5, y-5, 10, 10);
      g.drawRect(mx+y-5, my-x-5, 10, 10);
      g.drawRect(-x-5, y-5, 10, 10);
      g.drawRect(y-5, -x-5, 10, 10);
      g.drawRect(x-5, -y-5, 10, 10);
      g.drawRect(-y-5, x-5, 10, 10);
      g.drawRect(-x-5, -y-5, 10, 10);
      g.drawRect(-y-5, -x-5, 10, 10);
      blubb++;
    } // end of while
    g.dispose();
  } // end of jButton1_ActionPerformed

Wie man sieht habe ich eigentlich schon extrem viel umsetzen können, nur leider fehlt mir der Geistesblitz für die Bedingung der while-Schleife... mit einer Endlosschleife kommen aber leider auch nicht alle Quadrate da raus, wo sie hin sollen... da scheint noch einiges falsch zu sein... Confused

Ich hoffe ich stelle mich nicht vollkommen dämlich an, leider kann ich nur auf eine Art BASIC-Implementierung zurückgreifen, die den Befehl "plot" benutzt. In der Schule benutzen wir aber Java. Und das dann auch noch der Ursprung links oben ist und dass ich die einzelnen Pixel mit Quadraten realisieren will, deren Mittelpunkte mit den plot-Befehlen übereinstimmen sollen überfordert mich leider ehrlich...

Vielen Dank schon mal! Smile

EDIT:

Also nur als Hinweis: r ist Radius, mx die eingelesene x-Koordinate des Mittelpunktes und my analog.
Ehm ja... hat sich erledigt Smile bin froh es doch geschafft zu haben, das Problem war: falsche Koordinaten für drawRect in der Schleife und eine sinnlose Bedingung, die ich jetzt ändern konnte (ich hab einfach Differenzen von x und y genommen)

Also wenn jemand nicht weiter kommt kann ich jetzt sogar selbst helfen Smile

Und das obwohl ich und gewisse Menschen in der Schule mir so was nie zugetraut hätten Wink