2

ミッドポイント サークル アルゴリズムを使用すると、各ピクセルに 1 回だけアクセスして、対称的な円を描くことができます。アルゴリズムの性質上、直径が奇数 (2 * r + 1) の円しか描画できません。このアルゴリズムを拡張して、ピクセル数が偶数の直径の円を正常に描画できるようにすることはできますか?

アルゴリズムの要件:

  • ピクセルは 1 回だけ描画する必要があります。
  • RAM は非常に高価です。

これを処理するために Midpoint circle アルゴリズムを実際に変更できない場合は、次の解決策で問題ありません。

void DrawCircle(int x, int y, int diameter)
{
    if (diameter % 2 == 0)
        EvenWidthCircle(x, y, diameter / 2);
    else
        MidpointCircle(x, y, diameter / 2);
}
4

2 に答える 2

1

直径が偶数の場合は中点アルゴリズムを使用できますが、少し変更を加える必要があります。直径8の円の場合は、中点アルゴリズムを使用して直径7の円を実行します。

2 | 1
-----
3 | 4

象限1の八分象限については、何もしません。2の場合は、左に1シフトします。3の場合は、左および下にシフトします。4の場合は、下にシフトして、不足しているピクセル/ブロック/円を作成しているものをすべて入力します。

于 2013-01-11T07:04:12.383 に答える