如何在C#中编写Bresenham算法?

3
我写的代码只有50%的情况下有效,请问哪里出了问题?
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);
                }
            }

谢谢 :)

注意:“zmienna pomocnicza”意为“辅助变量”。请返回翻译后的文本: - Vamana
请编辑以使注释为英语。 - Merlyn Morgan-Graham
1个回答

4

一开始,您错过了一个情况,即需要处理其他坐标,就像现在处理Y坐标一样。您现在处理DY < DX的情况,您还应该处理DX < DY的情况,即线的斜率不同。

为了理解我的意思,请看这里的steephere

实际上,您的算法只能在四分之一的情况下工作。


@Vamana:看一下链接中的页面,搜索“steep”变量。 - Daniel Mošmondor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接