我在使用Bresenham的算法时遇到了麻烦

时间:2013-01-25 03:15:53

标签: c# visual-studio-2010

它只适用于坡度介于0和1之间的情况。我不知道从哪里开始。谢谢你的帮助!这个方法读入两个点并使用bresenhams algo在它们之间绘制线。我不知道去哪里为所有线路优化它。谢谢你的帮助。

void Bresenhams(int x1, int y1, int xk, int yk)
    {
        int deltaX = xk - x1;
        int deltaY = yk - y1;
        int error = 0;
        int y = y1;
        int x = x1;
        int doubleDeltaX = 2 * deltaX;
        bool steep = Math.Abs(yk - y1) > Math.Abs(xk - x1);



        canvas.SetPixel(x1, y1, Color.Black);

        if (!steep)
        {
            for (int i = x1 + 1; i <= xk; i++)
            {

                if (x1 > xk)
                {
                    int temp = x1;
                    x1 = xk;
                    xk = temp;

                    temp = y1;
                    y1 = yk;
                    yk = temp;

                }

                error = error + deltaY;
                if (error > deltaX)
                {
                    y++;
                    error -= doubleDeltaX;
                }
                canvas.SetPixel(i, y, Color.Black);
            }
        }
        else
        {
            for (int i = y1 + 1; i <= yk; i++)
            {

                if (y1 > yk)
                {
                    int temp = x1;
                    x1 = xk;
                    xk = temp;

                    temp = y1;
                    y1 = yk;
                    yk = temp;
                }

                error = error + deltaY;
                if (error > deltaY)
                {
                    y++;
                    error -= doubleDeltaX;
                }
                canvas.SetPixel(x, i, Color.Black);
            }
        }

        pictureBox1.Image = canvas;

    }

1 个答案:

答案 0 :(得分:1)

将一个圆圈分成8个部分。您可以在一个八分圆上运行Bresenham并同时绘制所有8个。对于0,0的中心:

   0-45 x,y
  45-90 y,x
 90-135 -y,x
135-180 -x,y
180-225 -x,-y
225-270 -y,-x
270-315 y,-x
315-360 x,-y