|
|
Опции темы | Поиск в этой теме | Опции просмотра |
23.05.2018, 21:26 | #1 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Графический дисплей и Atmega328. Технические аспекты рисования.
Учусь рисовать на lcd5110. Кружочки (кривые), квадратики это все рисую с помощью adafruitGFX.
А вот как нарисовать допустим линию, вращающуюся относительно точки на угол заданный извне? Например имитация аналогового спидометра? |
23.05.2018, 23:07 | #2 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Нужно рисовать линию , потом стирать ее и рисовать новую линию уже развернутую под углом
|
24.05.2018, 07:07 | #3 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Это я примерно понимаю. Но при перерисовке одного объекта страдают и соседние области. То есть надо перерисовывать все содержимое дисплея?
С расчетом точек начала и конца линии у меня тоже проблема. До 90 градусов тригонометрия помогает. А вот с 90 уже не очень - это отдельно проверять надо? А как решаются сложные алгоритмы? Ну например вращающийся квадрат? У меня с практическим применением математики туговато.. Нет ли сайтика с примерами таких алгоритмов? |
24.05.2018, 08:41 | #4 | |||
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Цитата:
Цитата:
Еще понадобится создать фунцию setPixel, которая будет рисовать точку PHP код:
Цитата:
В этих либах есть все функции рисования |
|||
25.05.2018, 22:05 | #5 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Так я и использую AdafruitGFX, с рисованием линии проблемы нет. Что там с фоном спрайта предположить затрудняюсь, ИМХО там тупо ставится курсор в первую непустую позицию и выставляются биты по-порядку дальше. И-за этого пропадает часть изображения попавшая в поле работы.
Можно конечно придумать хитрые алгоритмы, но мне сейчас проще перерисовывать весь экран. Возвращаясь к линии. В библиотеке есть функция: drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color), Ок. допустим точка x0y0 мне известна и не меняется. Как расчитать точку x1y1 если известен угол от 0 до 359 градусов? |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|