IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Графика, Заливка треугольника одним цветом
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Женский
Реальное имя: Nataly

Репутация: -  0  +


Помогите, пожалуйста, с решением данной задачи!
рис1Прикрепленное изображение

Из рисунка1 следует, что изображение треугольника на экране – это набор горизонтальных отрезков оси абсцисс, при чем каждой строке экрана соответствует один отрезок, проведенный между точками пересечения отрезков со сторонами треугольника AB и AC, затем BC и AC.
Составим математическую модель. Координаты точек пересечения отрезков со сторонами треугольника будут рассчитываться по следующим формулам:

X = Ax + (Bx – Ax) / (By – Ay) * (By – Ay)
X2 (1) = Ay + (Sy – Ay) / (Bx – Ax) / (By – Ay)
X1 = Ax + (Sy – Ay) * (Cx – Ax) / (By – Ay)
X2 (2) = Bx + (Sy – By) * (Cx – Bx) / (Cy – By)

Далее приведем словесное описание алгоритма будущей программы.
рис2Прикрепленное изображение

После проведения сортировки координат вершин данного треугольника необходимо организовать цикл, обеспечивающий рисование линий для ординаты Y, которая изменяется от Ymin до Ymax. В теле цикла необходимо определить координаты точек X1 и X2 и затем провести между ними линию заданного цвета.

Сообщение отредактировано: Pautina -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Итак, по делу..
Ты извини, но мне было проще привести свое решение с нуля. Попробуй с ним разобраться - ладно? Спрашивай, если что неясно.
Сначала рассмотрим рисунок: Прикрепленное изображение
Принципиально различных случая я вижу два (возможную параллельность сторон осям координат пока не рассматриваем): синий и зеленый. Процесс заполнения также делится на две стадии: красную (от А до первой встреченной по У вершины) и рыжий (остальное).

1. Сначала находим вершину с минимальным Y и называем ее А.
2. Затем две оставшиеся упорядочиваем по Х: В и С, Вх<Cx.
3. Находим минимум и максимум из чисел Ву и Су и запоминаем их соответственно в переменных d и е.
4. Проходим по Y от Ау до d, вычисляя х1 и х2 исходя из пересечения линии на уровне у, параллельной оси Х, и соответствующего отрезка.
5. То же самое, что и 4, но для других отрезков, от d до е.

Формулы будут такие..
Дано: y.
Найти х1 и х2.

Синий случай:
Красная фаза:
x1 = Ax+(Bx-Ax)*(y-Ay)/(By-Ay)
Рыжая фаза:
x1 = Bx+(Cx-Bx)*(y-By)/(Cy-By)
х2 в обеих фазах одинаковый:
x2 = Ax+(Cx-Ax)*(y-Ay)/(Cy-Ay)

Зеленый случай:
х1 в обеих фазах одинаковый:
x1 = Ax+(Bx-Ax)*(y-Ay)/(By-Ay)
Красная фаза:
x2 = Ax+(Сx-Ax)*(y-Ay)/(Сy-Ay)
Рыжая фаза:
x2 = Cx+(Bx-Cx)*(y-Cy)/(By-Cy)

Эти формулы выведены из простых соотношений пропорции, исходя из подобия треугольников. Они однотипны, и при кодировании можно достичь немалой экономии, если использовать функции.

Теперь достаточно сделать два цикла: один от Ах до d, второй от d до е (или один цикл от Ах до е с проверкой условия), где собственно и отрисовываем отрезки.

Случаи, когда равны нулю знаменатели в формулах (стороны параллельны оси Х), нужно рассмотреть отдельно. Фактически это означает выпадение красной или рыжей фазы (или обеих).
Вроде, все..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.11.2025 17:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name