Forum: Mikrocontroller und Digitale Elektronik Kreis zeichnen - GLCD - bekomme nur ein Karo?


von Tobias E. (doenges2)


Lesenswert?

Hallo,

ich habe mich beim zeichen auf den C-Code unter wikipedia berufen und in 
mit copy/paste in mein Code hineingebastelt und bekomme nur karos!

Der funktioniert doch, oder?
Hat jemand Erfahrung mit dem Code?

void ks0108_circle(uint8_t x0, uint8_t y0, uint8_t radius)  {
  uint8_t f = 1 - radius;
     uint8_t ddF_x = 0;
     uint8_t ddF_y = -2 * radius;
     uint8_t x = 0;
     uint8_t y = radius;

     ks0108_set_pixel(x0, y0 + radius);
     ks0108_set_pixel(x0, y0 - radius);
     ks0108_set_pixel(x0 + radius, y0);
     ks0108_set_pixel(x0 - radius, y0);

     while(x < y) {
      if(f >= 0) {
           y--;
           ddF_y += 2;
           f += ddF_y;
      }
    x++;
    ddF_x += 2;
    f += ddF_x + 1;
    ks0108_set_pixel(x0 + x, y0 + y);
    ks0108_set_pixel(x0 - x, y0 + y);
    ks0108_set_pixel(x0 + x, y0 - y);
    ks0108_set_pixel(x0 - x, y0 - y);
    ks0108_set_pixel(x0 + y, y0 + x);
    ks0108_set_pixel(x0 - y, y0 + x);
    ks0108_set_pixel(x0 + y, y0 - x);
    ks0108_set_pixel(x0 - y, y0 - x);
  }
}


Gruß

Tobi

von Hagen R. (hagen)


Lesenswert?

Beitrag "Punkte eines Kreises berechnen"

einfach mal die Suche benutzen, mit Kreis -re, oder Ellipse -re, 
bresenham -re findet sich viel.

Gruß Hagen

von Tobias E. (doenges2)


Lesenswert?

Danke, aber das da oben ist der Bresenham Algorithmus!
Und er geht bei mir nicht, leider!

von Hagen R. (hagen)


Lesenswert?

>uint8_t f = 1 - radius;
>uint8_t ddF_x = 0;
>uint8_t ddF_y = -2 * radius;

deklariere f als int16_t oder int32_t, und ddf_x, ddf_y als int16_t. Bei 
beiden musst du mit Vorzeichen rechnen.

im verlinkten Thread schaue dir RasterCircle() von Johannes an, das ist 
defakto excakt der Source den du auch hast, eben nur mit korrekten 
Deklarationen der lokalen Variablen.

Gruß Hagen

von Tobias E. (doenges2)


Lesenswert?

Oh mann....ja klar.....logisch!

Da geht man Zeile für Zeile durch, findet keinen Fehler und vergißt 
total dabei den Zahlenraum der Variablen!

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.