ブレゼンハムの中点アルゴリズムを使用して、円を描画しようとしています (最終的には円全体を塗りつぶします)。基本的な 2D ゲームでのフォグ オブ ウォーのアウトラインになります。
線を描いたりピクセルを塗りつぶしたりする代わりに、2D ベクトルの値を変更しています。これは正しく機能しmapMatrix
、このコードで変更された場所は正しく表示されます。
ただし、円の下部と上部のみが表示されます。ギャップを埋めるにはどうすればよいですか?
int d = 3 - (2 * radius);
int x = 0;
int y = radius;
while (x <= y)
{
mapMatrix[centerX + x][centerY + y].fog = false;
mapMatrix[centerX + x][centerY - y].fog = false;
mapMatrix[centerX - x][centerY + y].fog = false;
mapMatrix[centerX - x][centerY - y].fog = false;
mapMatrix[centerX + x][centerY + y].fog = false;
mapMatrix[centerX + x][centerY - y].fog = false;
mapMatrix[centerX - x][centerY + y].fog = false;
mapMatrix[centerX - x][centerY - y].fog = false;
if (d < 0)
{
d = (d + (4*x) + 6);
}
else
{
d = ((d + 4 * (x - y)) + 10);
y--;
}
x++;
}
出力の写真を載せることができるので、この粗雑な ASCII 図面を見てください。
-------------
----ooooo----
---o-----o---
-------------
-------------
-------------
------o------
-------------
-------------
-------------
---o-----o---
----ooooo----
-------------
前もって感謝します!