2011-03-05 5 views
3

J'ai écrit comme ça mais ça ne marche que dans 50% des cas. Quelqu'un peut-il dire ce qui ne va pas?Comment écrire des algorithmes bresenham en C#?

public void Bresenham(int x1,int y1,int x2,int y2,Color c) 
     {    
      double dx = x2 - x1; 
      double dy = y2 - y1; 
      double d = 2*dy-dx; //aux variable 
      double p1 = 2 * dy ; 
      double p2 = 2 * (dy - dx); 
      int x = x1; 
      int y = y1; 
      int xend; 
      c = kolor; 
      if (x1 > x2) 
      { 
       x = x2; 
       y = y2; 
       xend = x1; 
      } 
      else 
      { 
       x = x1; 
       y = y1; 
       xend = x2; 
      } 
      bitmapa.SetPixel(x, y,c); 
      try 
      { 
       while (x < xend) 
       { 
        x++; 
        if (d < 0) 
        { 
         d += p1; 
        } 
        else 
        { 
         d += p2; 
         y += 1; 
        } 
        bitmapa.SetPixel(x, y, c); 
       } 
      } 

Merci :)

+0

Note: "zmienna pomocnicza" = "variable auxiliaire". – Vamana

+0

Veuillez éditer pour commenter. –

Répondre

4

Au premier coup, il vous manque un cas où d'autres coordonnées doivent être manipulés comme maintenant votre manipulez Y. Vous pouvez maintenant gérer le cas où DY < DX, vous devez également gérer cas lorsque DX < DY, c'est à dire la pente de la ligne est différente.

Pour comprendre ce que je veux dire, regardez steephere.

Et en fait, votre algorithme ne fonctionnera que dans 1/4 cas.

+0

Euh, quel est le "raide" pour, et pourquoi mis en évidence en tant que code? – Vamana

+0

@Vamana: regardez la page dans le lien et recherchez la variable 'raide'. –

+0

ok merci beaucoup c'était très utile :) – harry180