Bresenham die 2te



  • void Bresenham(int d1x, int d1y, int d2x, int d2y)
    {	
    	bool X, Y, Z;		// zur Bestimmung der Bewegunsrichtung
    	int da, db;			// delta_a und delta_b
    	int *m;			// Bewegungsrichtung/Vektoren
    
    	// delta a, delta b und Bewegungsrichtung bestimmen 
    	int dx = abs(d2x) - abs(d1x);
    	int dy = abs(d2y) - abs(d1y);
    
    	if(abs(dx)-abs(dy)>=0)
    	{
    		da = abs(dx);
    		db = abs(dy);
    		Z = true;
    	}
    	else
    	{
    		da = abs(dy);
    		db = abs(dx);
    		Z = false;
    	}
    
    	if(dx >= 0)
    		X = true;
    	else
    		X = false;
    
    	if(dy >= 0)
    		Y = true;
    	else
    		Y = false;
    
    	int array[8][4] =
    	{
    		{ 0,-1,-1,-1 },		
    		{ 0,-1,1,-1 },		
    		{ 0,1,-1,1 },		
    		{ 0,1,1,1 },		
    		{ -1,0,-1,-1 },		
    		{ 1,0,1,-1 },		
    		{ -1,0,-1,1 },		
    		{ 1,0,1,1 },		
    	};
    
    	m = array[(X?1:0) + (Y?2:0) + (Z?4:0)];
    
    	int gradient = (db<<1) - da;
    	int x = d1x;
    	int y = d1y;
    
    	SetPixel(x, y);
    
    	for(int i = 0; i < da; i++)
    	{
    		if(gradient >= 0)
    		{
    			x = x + m[2];
    			y = y + m[3];
    			gradient = gradient + (db<<1) - (da<<1);
    		}
    		else
    		{
    			x = x + m[0];
    			y = y + m[1];
    			gradient = gradient + (db<<1);
    		}
    		SetPixel(x, y);
    	}
    }
    

    ich hoffe der code ist bis auf die SetPixel Funktion Standardkonfrom


Anmelden zum Antworten