математика — управление диагональной линией в переполнении стека

Я играю с использованием вложенных циклов for для построения пикселей и в основном рисую флаги. До сих пор я разобрался, как сделать круги, диагональные линии и крестики.

Однако я не могу обернуть голову вокруг того, как ограничить, откуда должна быть проведена прямая линия.

В основном я пытаюсь выяснить, как мне нужно изменить код, который я использовал, чтобы нарисовать диагональные линии в Юнион Джек, чтобы сделать свастику на флаге нацистской Германии. Любая помощь приветствуется!

Вот мой текущий код и скриншот того, что я получаю:

for (int x = 0; x < 240; x++)
{
for (int y = 0; y < 160; y++)
{
uint16_t cX = 120;
uint16_t cY = 80;
uint16_t r = 66;

// Makes line
if (x-100 < y * 240 / 240 + 20 && x-100 > y * 240 / 240 - 20)
{
PlotPixel16(x, y, black);
}
// Makes circle
else if (((x-cX)*(x-cX))+((y-cY)*(y-cY)) < r*r)
{
PlotPixel16(x, y, white);
}
else
{
PlotPixel16(x, y, red);
}
}
}

Скриншот!

1

Решение

Вы фактически рисуете многоугольник, определяемый четырьмя линиями. Уравнение линии y = mx + b, и вы хотите быть выше или ниже линии. Хотя это не то, как я бы это сделал, это соответствует духу вашего подхода к проверке того, что y-mx + b<0 (или> 0) для четырех разных пар m и b. Это даст вам один отрезок, а остальные вы сможете получить аналогичным образом.

Прямо сейчас вы выбираете регион только из двух строк. Вот почему вы получаете это изображение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector