Как заполнить треугольник с помощью библиотеки LCD5110 Graph?

Добрый день! В настоящее время я пытаюсь создать небольшой 3D-движок, используя C++, Arduino UNO, а также дисплей Nokia 5110 с библиотека. Теперь я успешно нарисовал куб с помощью треугольников, но я хочу заполнить треугольники, чтобы добавить правильное освещение. Мой метод рисования треугольников следующий:

LCD5110 lcd(8,9,10,12,11);

void DrawTriangle(int x1, int y1, int x2, int y2, int x3, int y3) {
 lcd.drawLine(x1, y1, x2, y2);
 lcd.drawLine(x2, y2, x3, y3);
 lcd.drawLine(x3, y3, x1, y1);
}

К сожалению, в моей библиотеке нет методов рисования или заливки треугольников. Я понятия не имею, как заполнить треугольник, поэтому надеюсь на помощь.

Заранее спасибо...

ПРИМЕЧАНИЕ: Пожалуйста, будьте проще.

ПРИМЕЧАНИЕ NR.2: я уже задавал этот вопрос на StackOverflow, но у меня нет хорошего ответа, поэтому я попробую еще раз.

, 👍0

Обсуждение

Вроде никто не отвечает..., @Leocat

Это, скорее всего, потому, что нет хорошего ответа. Если в вашей библиотеке нет метода отрисовки заполненного многоугольника, вы должны нарисовать его самостоятельно. Хорошо, это стандартный алгоритм компьютерной графики, но объяснить его непросто. Например, не хватает времени, чтобы подумать, как объяснить это в нескольких словах. Но я могу указать вам на простой для понимания алгоритм, который называется алгоритмом «заливки». Если я правильно помню, существует реализация C++ под названием FloodSpill., @Peter Paul Kiefer

Я посмотрю на FloodSpill., @Leocat

Как я сказал в комментариях к вашему ответу: если данное решение работает для вас, а производительность не имеет значения, ваше решение намного лучше, чем мое предложение. Но не забудьте добавить } к приведенному ниже коду. Так как это может сбить с толку других, которые хотят использовать ваше решение., @Peter Paul Kiefer


1 ответ


Лучший ответ:

0

После нескольких часов возни я наконец нашел отличный способ заполнять треугольники! Вот так:

for(int x = x1; x<=x2; x++) {
    for(int y = y1; y<=y2; y++) {
     lcd.drawLine(x3, y3, x, y);
    }
}

Отлично!

,

Если вы добавите недостающий }, он будет работать. Но это не очень эффективно. Если производительность не имеет значения, вы правы: это просто и работает., @Peter Paul Kiefer