2011-03-05 99 views
3

我这样写,但它只适用于50%的情况。有人可以说出了什么问题吗?如何在c#中编写bresenham算法?

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); 
       } 
      } 

谢谢:)

+0

注意:“zmienna pomocnicza”=“辅助变量”。 – Vamana 2011-03-05 12:11:38

+0

请修改以发表评论English。 – 2011-03-05 12:16:12

回答

4

在第一枪,你缺少的情况下,当其它的坐标应该像现在您正在处理Y.现在处理的情况下DY < DX,你也应该处理处理当DX < DY,即线的斜率不同时。

要了解我在说什么,请看steephere

实际上,你的算法只能在1/4的情况下工作。

+0

呃,什么是“陡峭的”,为什么突出显示代码? – Vamana 2011-03-05 12:35:46

+0

@Vamana:查看链接中的页面并搜索“陡峭”变量。 – 2011-03-05 13:11:26

+0

好的非常感谢,这非常有用:) – harry180 2011-03-06 13:31:25