-         

Ergebnis 1 bis 2 von 2

Thema: Bresenham-Algorithmus

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    26
    Beiträge
    106

    Bresenham-Algorithmus

    Anzeige

    hallo.
    ich habe auf der seite
    http://www-i1.informatik.rwth-aachen...mus/algo32.php
    einen schönen kurzen algorihmus zum kreise zeichenen gefunden. den wollte ich gleich auf meinem glcd anwenden (mega644, glcd mit 240x128 pixeln).
    aber die kreise die da rauskommen sehen nicht sehr schön "kreisig" =) aus.
    je größer der radius (30+ pixel wird, desto rechteckiger werden die kreise. kleine kreise sind zwar als solche erkennbar aber nicht sehr schön. das kann ms paint besser =(.

    ich würde gern wissen ob ich den den algorithmus falsch umgesetzt habe oder ob es bei diesem einfachen algorithmus einfach immer so ist.

    Code:
    void lcd_circle(unsigned char x, unsigned char y, unsigned char r){
    	signed char Y=r, X=0;
    	signed char F = 1-r;
    	lcd_setdot(x , y+r);
    	lcd_setdot(x+r , y);
    	lcd_setdot(x-r , y);
    	lcd_setdot(x , y-r);
    	while(X<Y){
    		X++;
    		if(F<0) F= F + 2*x - 1;
    		else {
    			F= F + 2*(x - Y);
    			Y--;
    			}
    		lcd_setdot(x+X , y+Y);
    		lcd_setdot(x-X , y+Y);
    		lcd_setdot(x+X , y-Y);
    		lcd_setdot(x-X , y-Y);
    		lcd_setdot(x+Y , y+X);
    		lcd_setdot(x-Y , y+X);
    		lcd_setdot(x+Y , y-X);
    		lcd_setdot(x-Y , y-X);
    		}
    }
    mfg maddin

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    26
    Beiträge
    106

    wie peinlich

    uh wie peinlich, der fehler ist so offensichtlich, dass ich ihn ne halbe stunde lang übersehen habe, es muss natürlich heißen

    Code:
    void lcd_circle(unsigned char x, unsigned char y, unsigned char r){
    	signed char Y=r, X=0;
    	signed char F = 1-r;
    	lcd_setdot(x , y+r);
    	lcd_setdot(x+r , y);
    	lcd_setdot(x-r , y);
    	lcd_setdot(x , y-r);
    	while(X<Y){
    		X++;
    		if(F<0) F= F + 2*X - 1;
    		else {
    			F= F + 2*(X - Y);
    			Y--;
    			}
    		lcd_setdot(x+X , y+Y);
    		lcd_setdot(x-X , y+Y);
    		lcd_setdot(x+X , y-Y);
    		lcd_setdot(x-X , y-Y);
    		lcd_setdot(x+Y , y+X);
    		lcd_setdot(x-Y , y+X);
    		lcd_setdot(x+Y , y-X);
    		lcd_setdot(x-Y , y-X);
    		}
    }
    sorry für den überflüssigen post. aber vllt interessierts ja jemanden, der sich auch mit glcds beschäftigt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •