-         

Ergebnis 1 bis 9 von 9

Thema: Freie Linie auf GLCD

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2009
    Beiträge
    118

    Freie Linie auf GLCD

    Anzeige

    Hey,
    ich habe dieses LCD mit dem Treiber von Sebastian: http://www.roboternetz.de/phpBB2/zei...741&highlight=

    Jetzt schreibe ich gerade eine Bibliothek für Befehle mit denen man Quadrate, Kreise, etc. zeichnen kann. Nun stehe ich vor dem Problem "Linie". Eine Vertikale/Horizontale Linie ist kein Problem, aber ich möchte (wie bei meinem GTR) einen Befehl wie DrawLine(x1,y1,x2,y2).
    Wie kann ich die Punkte berechnen?

    Hier ist einfach mal der Code für nen Kreis (geht verdammt schnell):
    Code:
    //Zeichnet einen Kreis
    void DrawCircle(char r, char x, char y, char PixelState) {
    	char winkel;
    	for (winkel=0; winkel <= 360; winkel++) {
    		lcd_plot_pixel(x + sin(winkel)*r,y-cos(winkel)*r,PixelState);
    	}
    }
    Was meint ihr, soll ich die Lib wennse fertig ist veröffentlichen?

    Danke,
    C_Classic

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672

    Re: Freie Linie auf GLCD

    Zitat Zitat von C_Classic
    Wie kann ich die Punkte berechnen?
    Bresenham

    Zitat Zitat von C_Classic
    Hier ist einfach mal der Code für nen Kreis (geht verdammt schnell):
    Code:
    //Zeichnet einen Kreis
    void DrawCircle(char r, char x, char y, char PixelState) {
    	char winkel;
    	for (winkel=0; winkel <= 360; winkel++) {
    		lcd_plot_pixel(x + sin(winkel)*r,y-cos(winkel)*r,PixelState);
    	}
    }
    Ich möchte dir ja nicht zu nahe treten, aber soll das "geht verdammt schnell" etwa ironisch gemeint sein? Denn das ist so ziemlich die langsamste Methode einen Kreis zu zeichnen, die man sich überhaupt vorstellen kann. Wenn man schon so rechenintensive Funktionen wie sin und cos verwendet, dann sollte man deren Ergebnisse zumindest mehrfach verwenden. Man muss nämlich effektiv nur 1/8 des Kreises berechnen, den Rest kann man auch durch simples Spiegeln der Ergebnisse bekommen.

    Davon abgesehen funktioniert der Code so (mit winkel als char) mit Sicherheit gar nicht.
    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2009
    Beiträge
    118
    Naja... War eigentlich Net ironisch gemeint, aber du hast natürlich recht. Ich hatte schon vermutet, dass die Methode Ansich langsam sein müsste, aber war dann vom Ergebnis überrascht, weil z.B. mein GTR dafür 3 sek braucht.
    Werd die Funktion mal überarbeiten.
    Gibt es eine andere Möglichkeit als sin/cos?

    MfG
    C_Classic

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.03.2010
    Beiträge
    94
    Könntest die Werte aus einer Sinus/Cosinus Tabelle holen statt sie zu errechnen.
    Außerdem hat sternst das mit dem 1/8 Kreis vorgeschlagen.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2009
    Beiträge
    118
    Ok danke für eure Antworten. Aber wie Kann ich denn nun eine solche Linie zeichnen? Werd mich dann mal morgen dranmachen...

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von C_Classic
    Aber wie Kann ich denn nun eine solche Linie zeichnen?
    ???
    Das habe ich doch beantwortet.
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Achja, der gute alte Bresenham-Algorithmus...

    für einfache Linien gibt's kaum was Besseres, und er eignet sich mit ein paar kleinen Modifikationen auch zum Zeichnen von Kreisen (und das sehr viel schneller als deine einfache sin/cos Variante).
    So viele Treppen und so wenig Zeit!

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    18.10.2007
    Ort
    Hamm
    Alter
    42
    Beiträge
    21
    jau ich verwende auch den Bresham

    auf einem color tft mit ST7781 chip

    musste mir aber leider die Routinen zum Zeichnen von Kreisen und Co. selber schreiben .

    Hat jemand ne idee welchen algo Ich verwenden kann um die gezeichneten Graphiken auch noch auszufüllen ????

    Axo *gg* benutze überigens AVR Atmel ATMega 32 Board mit TFT Touch Display, Kamera einfach mal in der großen Bucht danach suchen iss recht brauchbar.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2009
    Beiträge
    118
    Oh Entschuldigung - Ich hatte das Bresham ganz überlesen. Werds mir gleich mal anschauen.

Berechtigungen

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