Newegor 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Есть задача выводить на ЖКИ стрелочный прибор. Может у кого есть уже наработки по этому вопросу? Интересует наиболее простая реализация, желательно целочисленная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Массив координат конца стрелки (X,Y) на 100 позиций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 25 октября, 2010 Опубликовано 25 октября, 2010 (изменено) · Жалоба Есть упрощенные формулы для синуса и косинуса (вам же мегаточность не нужна). Я в студенческие годы на ассемблере выводил дуги и кружочки напрямую в адаптер VGA :) Щас покопался - похоже, наврал. Наверняка по параметрическому уравнению кружочки рисовал... Массив координат конца стрелки (X,Y) на 100 позиций. А почему именно на 100, а не 180 или 256? Да, массив - самое простое. Изменено 25 октября, 2010 пользователем MrYuran Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба А почему именно на 100, а не 180 или 256? 0-100%, но возможны и варианты:-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Newegor 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Да. Действительно, идея с массивом как-то в голову не пришла. Буду скорее всего ее пробовать. Спасибо :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Deka 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Использовать целочисленный алгоритм рисования линии Брезенхама. Кажется так называется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sherr 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Использовать целочисленный алгоритм рисования линии Брезенхама. Кажется так называется... В таком простом варианте получается довольно некрасиво(пробовал)... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Есть задача выводить на ЖКИ стрелочный прибор. Может у кого есть уже наработки по этому вопросу? Интересует наиболее простая реализация, желательно целочисленная. Для рисования линий на растровых дисплеях неплохо подходит алгоритм Брейзенхейма. Вот одна из реализаций: //------------------------------------------------------------------------------ // // Description: the function draws line from point 'p1' to point 'p2' // with pixels (colour, intensity, transparency) defined // by argument 'pix'. // void gui::draw_line(TPoint p1, TPoint p2, uint8_t pix) { int16_t dx = (p2.x - p1.x >= 0 ? 1 : -1); int16_t dy = (p2.y - p1.y >= 0 ? 1 : -1); int16_t lenX = abs(p2.x - p1.x); int16_t lenY = abs(p2.y - p1.y); int16_t len = max(lenX, lenY); if (len == 0) { draw_pixel(p1, pix); return; } if (lenY <= lenX) { int16_t x = p1.x; int16_t y = p1.y; int16_t d = -lenX; len++; while(len--) { draw_pixel(TPoint(x, y), pix); x += dx; d += 2*lenY; if(d > 0) { d -= 2*lenX; y += dy; } } } else { int16_t x = p1.x; int16_t y = p1.y; int16_t d = -lenY; len++; while(len--) { draw_pixel(TPoint(x, y), pix); y += dy; d += 2*lenX; if (d > 0) { d -= 2*lenY; x += dx; } } } } где TPoint: struct TPoint { int16_t x; int16_t y; ... // остальное определение: конструкторы, операторы }; а фукнция draw_pixel просто записывает значение пиксела в буфер экрана. Реализация рабочая, используется в реальных проектах. Если вам больше подойдет реализация в полярных координатах (эта, как видно из кода, для декартовых), то их тоже есть, можно поискать на просторах инета. Ну, и погуглите на слово Брейзенхейм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Diusha 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Однажды делал круговую диаграмму на AVR с ЖКИ. Коэффициент, определяющий наклон линии (стрелки), равен, как известно тангенсу этого угла (если стрелку рассматривать как y=kx). Т.е., вся задача сводилась к простому вычислению tg. Я тогда вывел довольно простое приближение: tg(x) = x/(pi/2-abs(x)) А если к этому еще прибавить 0.44*(-x^3+x*pi^2/16), будет еще точнее. Конечно, с таблицей координат это вряд ли сможет конкурировать по простоте. А мне нужна была независимость от размеров Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться