PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einen gefüllten Kreis zeichen?



peecee
12-10-2004, 18:14
Hi,

Ich suche einen Algorithmus der einen gefüllten Kreis zeichnet, die einzige Funktion die ich habe ist putpixel(x, y, color) mit der man einen einzigen Pixel zeichnen kann.

Help Wanted;)

peschmae
12-10-2004, 18:36
Das schreit so ziemlich nach Sinus und Cosinus. Hast du die?

MfG Peschmä

SeeksTheMoon
12-10-2004, 18:41
welche Sprache?

Geist
12-10-2004, 18:43
drawOval(int x, int y, int width, int height)
-> http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Graphics.html


Oder hab ich das missverstanden?

SeeksTheMoon
12-10-2004, 18:51
wenn Du es generisch willst:
Die Kreisfläche ist ja pi*r² und Du könntest z.B. alle Pixel durchlaufen und nachsehen ob sie innerhalb der Fläche drin sind - vorausgesetzt Du kennst den Mittelpunkt des Kreises, damit Du die Abstände des Pixels zum Rand des Kreises ausrechnen kannst.
Was wird mit x+y übergeben? Eigentlich gehören mehr Infos zu einem Kreis, z.B. Mittelpunkt und Radius oder soll das ein Einheitskreis werden?

peecee
12-10-2004, 18:55
Sinus und Cosinus hab ich, Sprache wäre C Style Code ;)

@Geist das wäre die Funktion die ich bräuchte danke, aber ich will sie ihm Quellcode ich benutze kein Java.

Optimal wäre sowas DrawCircle(int posx, int posy, int radius)

Geist
12-10-2004, 18:59
öhm, war ohnehin falsch :D
fillOval wäre Deinen Ansprüchen gerecht geworden und in C/C++ bin ich noch nicht über die Konsole hinaus gekommen. ;)

Blaubär
12-10-2004, 19:33
Hallo,

evtl. kommst Du mit dem Satz von Phytagoras weiter. Du gibst z.B. y vom Mittelpunkt vor und gehst in 1 Pixel Schritten zum Radius senkrecht nach oben und unten. Bei jedem Pixel kannst Du mit deinem y-Wert und r den dazugehörigen x-Wert ausrechnen. So bekommst Du auf jeden Fall eine Kreislinie. Das drinnen kannst Du ausfüllen, da Du so zu jedem y-Wert die Grenze x_links und x_rechts hast.

Vielleicht hilft das weiter

Tschuess

Blaubär

peecee
13-10-2004, 19:20
hab mal
hier (http://de.wikipedia.org/wiki/Kreis_%28Geometrie%29)
was gefunden (x - xm)2 + (y - ym)2 = r2



void DrawCircle(int posx, int posy) {

int r = BALL_BORE / 2;
int xm = posx + r;
int ym = posy + r;
int x;
int y;

for(y = posy; y <= (BALL_BORE + posy); ++y) {
for(x = posx; x <= (BALL_BORE + posx); ++x) {
if(pow(x - xm, 2) + pow(y - ym, 2) <= r * r) { /*(x - xm)2 + (y - ym)2 = r2*/
putpixel(screen, x, y, colorball);
}
}
}
}


funktioniert aber leider noch nicht.
Noch immer Help Wanted :)

wraith
13-10-2004, 19:57
Was funktioniert denn nicht?
Ich habe deine Funktion getestet (mit einer für meine API äquivalenten putpixel Funktion), und sie funktioniert tadellos.
Liegt der Fehler vielleicht an einer falschen Anwendung der putpixel Funktion?
Welche Größe hat BALL_BORE?

peecee
14-10-2004, 17:32
Habs jetzt hinbekommen.



void DrawBall(int posx, int posy) {

int r = BALL_BORE >> 1; /*BALL_BORE = 100*/
int x;
int y;

/*circle algo (x - xm)2 + (y - ym)2 = r2*/
for(y = 0; y < r << 1; ++y) {
for(x = 0; x < r << 1; ++x) {
if((x - r) * (x - r) + (y - r) * (y - r) <= r * r) {
putpixel(screen, x + posx, y + posy, colorball);
}
}
}
}