#visual-c
#visual-c
Вопрос:
int main()
{
const auto console = ::GetConsoleWindow();
const auto context = ::GetDC(console);
constexpr auto red = RGB(255, 0, 0);
constexpr auto yellow = RGB(255, 255, 0);
RECT rectClient, rectWindow;
GetClientRect(console, amp;rectClient);
GetWindowRect(console, amp;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
и это то, что я хочу (я добавил несколько пикселей вверху, чтобы это выглядело лучше) введите описание изображения здесь
Ответ №1:
Ваше «то, что я хочу» выглядит сглаженным. Так что рисуйте сглаженным.
Если исходное условие не выполнено, но x*x y*y <= (radius 1)*(radius 1)
выполнено, то вам нужен частично затененный пиксель.
Другой способ выполнить сглаживание — проверить не центр каждого пикселя, а четыре угла (x plusminus 0,5, y plusminus 0,5). Если внутри круга больше нуля, но меньше четырех углов, вам нужен частично затененный пиксель.
Комментарии:
1. Войт, не могли бы вы показать это в коде? Я не знаю, что ты имеешь в виду