eine linie zeichnen



  • hi leute,

    ich wollte schnell ein dreieck-fractal machen (als ascii-art) und für das brauche ich ne funktion die mir eine linie in mein coordinatensystem zeichnet,
    es funktioniert auch(naja fast ^^), aber ab der hälfte der linie werden bei steigungen > 1 felder ausgelassen, bitte helft mir, ich komm einfach net drauf

    #       
           ##       
           # #      
          #  #      
          #   #     
         #    #     
         #     #    
        #      #    
                #   
       #            
                 #  
      #             
                  # 
     #              
                   #
    ################
    
    void draw_line(char **f, int x1, int y1, int x2, int y2){ // f ist das array in dem alle "pixel" gesetzt werden
    	int step = x1 < x2 ? 1 : -1, i, j;
    	if(x1 != x2){
    		double gradient = (double)(y2 - y1) / (x2 - x1);
    		for(i = 0; x1 + i != x2 + step; i += step){
    			j = 1;
    			do {
    				f[y1 + (int)(i * gradient / j)][x1 + i / j] = SET; // SET ist das zeichen für einen gesetzen "pixel"
    			} while(j++ < fabs(gradient)); // für steigungen größer 1
    		}
    	}else{
    		step = y1 < y2 ? 1 : -1;
    		for(i = 0; y1 + i != y2 + step; i += step)
    			f[y1 + i][x1] = SET;
    	}
    }
    


  • Wennze magst, kannst du dir hier den Bresenham copy & pasten.
    Weiter unten findest du eine c-implementierung.
    http://de.wikipedia.org/wiki/Bresenham-Algorithmus
    Für die Konsole ist das in 5 min umgeschrieben.



  • ok danke, aber eigentlich würde mich sehr intressieren was bei meiner idee falsch ist^^


Anmelden zum Antworten