Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
19.04.2013, 12:17
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Построение дуги
Никак не могу найти алгоритма построения дуги (куска окружности).
Если адаптировать алгоритм построения окружности Брезенхема, выходит немного громоздко.
Может кто-то ткнет носом в сторону, где искать?
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
19.04.2013, 12:23
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Построение дуги
alberio, если можно, конкретней: в какой системе, что является исходными параметрами и т.д.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.04.2013, 12:28
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Построение дуги
Вот моя рисовалка круга:
Код:
|
void DrawCircle(int x, int y, int r, unsigned int color)
{
int x1,y1,yk = 0;
int sigma,delta,f;
x1 = 0;
y1 = r;
delta = 2*(1-r);
do {
LCD_SetPoint(x+x1,y+y1,color);
LCD_SetPoint(x-x1,y+y1,color);
LCD_SetPoint(x+x1,y-y1,color);
LCD_SetPoint(x-x1,y-y1,color);
f = 0;
if(y1 ‹ yk) break;
if(delta ‹ 0) {
sigma = 2*(delta+y1)-1;
if(sigma ‹= 0) {
x1++;
delta += 2*x1+1;
f = 1;
}
}
else if(delta › 0) {
sigma = 2*(delta-x1)-1;
if(sigma › 0) {
y1--;
delta += 1-2*y1;
f = 1;
}
}
if(!f) {
x1++;
y1--;
delta += 2*(x1-y1-1);
}
} while(1);
} |
Надо подумать, как ее переделать под дугу.
|
|
|
|
19.04.2013, 12:39
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Построение дуги
входное параметры - координаты центра, радиус, начальный градус и конечный градус.
Алгоритм окружности у меня есть, но я надеюсь, может есть алгоритм специально для дуги...
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
19.04.2013, 12:50
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Построение дуги
Перед применением алгоритма окружности определить диапазон изменения 'X' по cos углов с учетом квадрантов - и вперед, на мины!
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 19.04.2013 в 13:08.
|
|
|
|
19.04.2013, 16:15
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Построение дуги
Еще вопрос, немного хитрее.
Допустим, есть изображение на дисплее. Его надо "изогнуть" вокруг одной точки (координаты даны).
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
19.04.2013, 16:27
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Построение дуги
Думаю, тут нужно попробовать считая точку лежащей на дуге "бесконечно" большого (для применимости в цифровом виде - достаточно большого) радиуса, уменьшать радиус, просчитывая иксы под необходимые углы. Но этот алгоритм сырой, его нужно посмоктать и оптимизировать. Не могу подробно въехать сейчас. Может, кто точнее скажет.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.04.2013, 17:00
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Построение дуги
Точка, которую надо спроецировать (изогнуть) и выходная точка на дуге будут лежать на одной прямой, которая проходит через центр "круга проекции". Так вот, угол (отношение х к у) для обеих точек будет одинаков, но вот неизвестных все равно 2...
UPD:
Таки нет, знаем еще и радиус круга, из которого находим собственно координаты.
__________________
Sex, Druggs, Rock&Roll
Последний раз редактировалось alberio; 19.04.2013 в 17:59.
Причина: update
|
|
|
|
19.04.2013, 19:27
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Построение дуги
alberio, чавой-то у меня плохо получается сообразить. Можно попробовать спросить гуглю за алгоритм обработки изображения "рыбий глаз" (выпуклое искажение) и т.п.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.04.2013, 20:38
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Построение дуги
Вот, слепил по-быстрому.
Точка (х1,у1) изгибается вокруг точки (х0,у0) и переходит в точку (х2,у2).
Для каждой точки вычисляем коэффициенты Sin, Cos, R.
Верхний край изображения на высоте Н относительно точки изгиба. Точка изгиба должна быть ниже нижнего края изображения, иначе всё выворачивается наизнанку, синус становится больше единицы и алгоритм не работает.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:44.
|
|