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
Beitrag "Punkte eines Kreises berechnen" einfach mal die Suche benutzen, mit Kreis -re, oder Ellipse -re, bresenham -re findet sich viel. Gruß Hagen
Danke, aber das da oben ist der Bresenham Algorithmus! Und er geht bei mir nicht, leider!
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.