16.11.2015, 11:20
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
Перевел из паскаля http://www.delphimaster.net/view/8-1126933826 в си:
Код:
|
Код удалил много ошибок! |
алгоритм пока тоже не работает, точки вообще не отображаются. Разбираюсь...
Последний раз редактировалось MikhailSh; 18.11.2015 в 13:21.
|
|
|
|
16.11.2015, 12:11
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
шо-то слишком сложно.
|
|
|
|
16.11.2015, 12:14
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
Вот именно! Три вершины - три линии. Разницы не много между рисованием линии и закрашиванием по горизонтали. Если тупо тырить чужие либы без понимания процесса - на выходе будет говнокод, который работает медленно, нестабильно и жрет флеш.
|
|
|
|
16.11.2015, 13:58
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
используя 3й метод из http://totologic.blogspot.fr/2014/01...ngle-test.html
определяем ограничивающий прямоугольник:
Код:
|
inline int16_t min(int16_t v1, int16_t v2){ return (v1 ‹ v2) ? v1 : v2; }
inline int16_t max(int16_t v1, int16_t v2){ return (v1 › v2) ? v1 : v2; }
int16_t xmin = min(x1, min(x2,x3));
int16_t ymin = min(y1, min(y2,y3));
int16_t xmax = max(x1, max(x2,x3));
int16_t ymax = max(y1, max(y2,y3)); |
обход точек прямоугольника и закрашивание тех, которые лежат внутри треугольника:
Код:
|
for (int16_t y=ymin; y‹=ymax; y++){
for (int16_t x=xmin; x‹=xmax; x++){
int16_t dot1 = (y2 - y1)*(x - x1) + (-x2 + x1)*(y - y1);
int16_t dot2 = (y3 - y2)*(x - x2) + (-x3 + x2)*(y - y2);
int16_t dot3 = (y1 - y3)*(x - x3) + (-x1 + x3)*(y - y3);
if ((dot1 ›=0)&&(dot2 ›=0)&&(dot3 ›=0)){
// закрашивание точки
draw_dot(x,y);
}
}
} |
|
|
|
|
16.11.2015, 16:22
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
Спасибо.
Помоему в этих методах используются операции с типами real и * в циклах.
Нашел в переводе на Си несколько багов, исправлю и проверю...
|
|
|
|
16.11.2015, 21:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
zöner, Это прикол, или... ТС желает решение через Брезенхема.
Сообщение от MikhailSh
|
используются операции с типами real и * в циклах.
|
Именно так, форумчане желают, чтобы Вы сами допёрли до решения. Изи в посте №13 Вам намекнул направление.
Последний раз редактировалось AJScorp; 16.11.2015 в 21:58.
|
|
|
|
16.11.2015, 21:52
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
Цитата:
|
zöner, Это прикол, или... Не Брезенхем же это.
|
какая разница? или это особое требование?
Цитата:
|
Помоему в этих методах используются операции с типами real и * в циклах.
|
все операции целочисленные. Там некоторые операции можно вынести наружу. А умножение даже на AVR двухцикловое, не говоря про всякие ARM. Уточните какой у вас контроллер.
|
|
|
|
16.11.2015, 22:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
Сообщение от zöner
|
или это особое требование?
|
Дык первый пост "...или многоугольника (полилинии) на си с использованием алгоритма Брезенхема."
|
|
|
|
16.11.2015, 22:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
В любом случае, адаптировать любой открытый код рисования линии по Брезенхему для вычисления 2х координат по X не представляет никакой сложности.
|
|
|
|
18.11.2015, 13:41
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Нужна рабочая функция рисования закрашенного треугольника ...
Вот почти работающий код получился. Но когда треугольник становится равносторонним (почти) алгоритм неправильно работает причем со второй его частью... Например координаты: 0,0; 50,175; 175,50 - Ошибка; 0,0; 50,174; 174,50 - Нормально.
По поводу чужого кода:
Зачем изобретать велосипед, если можно взять готовое. Но разобраться в нем несомненно нужно. Хотя в чужие мысли не залезешь. Это касается кажущейся простоты адаптации чужого кода. Особенно когда там ошибки и недочеты содержатся. Но иногда писать свой код с нуля - трата времени, особенно когда этот код второстепенный... Действовать нужно по обстаятельствам
Микроконтроллер STM32F407.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:18.
|
|