如何解决如何绘制此圆圈而不是布雷森纳姆的圆圈算法
int main()
{
const auto console = ::GetConsoleWindow();
const auto context = ::GetDC(console);
constexpr auto red = RGB(255,0);
constexpr auto yellow = RGB(255,255,0);
RECT rectClient,rectWindow;
GetClientRect(console,&rectClient);
GetWindowRect(console,&rectWindow);
int posx,posy;
posx = GetSystemMetrics(SM_CXSCREEN) / 2 - (rectWindow.right - rectWindow.left) / 2;
posy = GetSystemMetrics(SM_CYSCREEN) / 2 - (rectWindow.bottom - rectWindow.top) / 2;
const int radius = 150;
for (int y = -radius; y <= radius; y++)
for (int x = -radius; x <= radius; x++)
if (x * x + y * y <= radius * radius)
SetPixel(context,posx + x,posy + y,red);
}
它给了我这个结果img
看起来不错,但我在侧面(上,下,右,左)看到了这个奇怪的像素 img
这就是我想要的(我在顶部添加了一些像素,因此看起来更好) enter image description here
解决方法
您的“我想要的”看起来没有锯齿。因此请画出抗锯齿。
如果不满足原始条件,但满足x*x + y*y <= (radius+1)*(radius+1)
,则需要部分阴影的像素。
进行抗锯齿的另一种方法是,不是测试每个像素的中心,而是测试四个角(x \ + 0.5,y \ +0.5)。如果圆内的角大于零但小于四个,则需要部分阴影的像素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。