-1

勾配が 0 から 1 の間の場合にのみ機能します。ここからどこに行けばよいかわかりません。ご協力いただきありがとうございます!このメソッドは 2 つの点を読み取り、bresenhams アルゴリズムを使用してそれらの間に線を引きます。すべての行に対して最適化するためにどこに行くべきかわかりません。ご協力いただきありがとうございます。

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;

    }
4

1 に答える 1

1

円を8つの部分に分割します。ブレゼンハムを1オクタントで実行し、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
于 2013-01-25T03:25:20.910 に答える