(Spiele-/Gra...) Linien, Bresenham



  • hallo
    ich bin gerade dabei eine art 'ascii-engine' zu schreiben. d.h. ich habe ein
    int [80][25] array dessen werte geändert werden und dann der reihe nach angezeigt werden, so dass ein bild entsteht.
    beispiel:ein x an postion (4,5):
    screen[4][5]='x';

    jetzt gibt es aber probleme mit linien.dank google weiss ich von einem Bresenham-algo. ich bin mir nicht ganz sicher ob ich den wirklich verstanden habe, hier mal meine version(nach einer seite):

    int screen::draw_line(int x1,int y1  ,int x2,int y2,  char symbol)
    {
    int m= (y2 - y1) / (x2 - x1); //steigung
    int d=0;
    int x = x1; 
    int y = y1;
    
    while (x != x2)
    {
        sign[x][y]=symbol;
        x++;
        d=d+m;
        if (d > 0.5){
            y++;
            d--;
            }
       }
    return 0;
    }
    

    aufgerufen wird z.B. mit testbild.draw_line(10,10 ,20,8, 'x');
    richtig gut funktioniert es aber nur wenn der steigunswinkel 45° beträgt also z.B. eine linie von (10,10) nach (20,20).
    ehrlich gesagt wundert mich schon das.

    hat jemand vielleicht irgendeine idee oder kennt eine _gute_ seite wo der algo. erklärt wird? die links die ich bei google dunkelblau gefärbt habe waren irgendwie nicht wirklich verständlich...



  • Also ich hab den Algorithmus benutzt um Pixel in einer Linie zu zeichnen und das hat geklappt.

    Ich verschied das mal in das Grafik Forum


Anmelden zum Antworten