![]() |
|
|
![]()
|
|
| AlexST |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
У меня возник вопрос: Есть ли алгоритм рисования окружности строго по\против часовой стрелки. Т. е. чтобы прорисовка шла последовательно, не по частям.
Или самому писать? А то чего-то не найду никак... |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Не понял. Какой именно алгоритм тебе нужен? Для твоего случая (по/против часовой стрелки) лучше всего использовать такую формулу: x = x0 + r*cos(alpha) y = y0 + r*sin(alpha) (x0,y0) -- центр окружности, r -- ее радиус. alpha -- угол, от 0 до 2*pi. Если хочешь нарисовать окружность по часовой стрелке начиная с pi/2, например, то агоритм будет такой: 1) ставишь точку для alpha = pi/2 2) уменьшаешь alpha на нужный шаг. Ставишь точку. 3) повторяешь п2 до тех пор пока alpha > -3pi/2 (один оборот назад от точки pi/2) Что-то в этом роде |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
нет это не лучше всего да и вообще посредственный алгоритм. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
esperant0, Если чуть вспомнить тригонометрию, то этот алгоритм можно свести к простому прибавлению и умножению. Надо только воспользоваться разложению формул sin(a+b); cos(a+b). Где b равна 1 градусу или 1 минуте в зависимости от желаний.
-------------------- Пролетал мимо. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
esperant0, чем тебе он не понравился В любом случае для рисования фигуры нужны ее точки. Мой способ очень прост, элементарно кодируется. Лишних затрат процессора не требует. Универсален (можно нарисовать любую чать окружности). А твой, пока, вообще ничего не умеет P.S. Если ты такой спец, то предложи свой. Просто обос..ть любой может. Ты обоснуй |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Есть известный алгоритм рисования окружности, который не использует не синусов не косинов. Очень быстр и прост. Эффективней вашего. Алгоритм имеется в любом хорошем учебнике по комп. графике. Добавлено @ 22:17 тут есть ответ на ваши вопросы http://www.codenet.ru/progr/video/alg/alg4.php с уважением -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
||||
|
||||
| AlexST |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
Ребята! Вы меня не поняли.
ivashkanet, мне нужен целочисленный алгоритм, оптимизированный для прорисовки по экрану (нет вычисления лишних точек). Т. е. типа Брезенхема, но ,esperant0, он рисует окружность частями, а я говорю про последовательность точек. Каждая следующая точка продолжает кривую, формируя окружность. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
AlexST, так ведь можно сделать 8 проходов метода Брезенхема и будет тебе окружность
P.S. Надо было сразу все условия задачи давать |
|||
|
||||
| AlexST |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
AlexST, ты переходил по ссылке esperant0?
В кратце идея (она конечно в лоб, но ничего умнее на вскидку не приходит Метод Брезенхема по сути рисует только 1/8 часть окружности (верхнюю половину I четверти). А остальное дорисовывает исходя из симметрии окружности. Получается, что эти части рисуются одновременно (почти). Тебя это не устраивает. Так? Поэтому, вместо одновременного рисования ставим последовательное. Алгоритм будет работать медленнее (7 лишних раз нужно координаты точек окружности вычислять), но зато так как надо. Еще один минус: отправной точкой рисования может быть только лубая их начальных точек этих восьмушек.
Что нить такое. Не проверял, но должно работать |
|||
|
||||
| AlexST |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Я не понял кому это хочется? Мне или тебе То что немного изменив этот алгоритм можно получить рисование любой 1/8 окружности? Так это очевидно Ты хоть представляешь сколько точек придется хранить? Тебе какой алгоритм нужен? Быстрый, но конкретно жрущий память или немного медленный, но не требующий ресурсы машины? Уточни: В твоей конкретно задаче это не минус? или не минус вообще? |
|||
|
||||
| AlexST |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
AlexST, понимаешь, окружность это примитив, который должен рисоваться быстро. Не будет же у тебя все прилложение состоять из одной окружности. Нет. Давай посчитаем сколько примерно понадобится точек для окружности радиусом 100 пикселей: Так как мы на каждом шаге идем либо вниз либо вправо, то для рисования четверти круга нам понадобится около 150 точек (чтобы попасть из точки (0, 100) в (100, 0) нужно в любом случае "прошагать" 100 пикселей вправо и 100 вниз, но так как мы иногда идем одновременно и вниз и вправо, то будем считать, что вниз мы прошагали всего 50 пикселей). Поэтому для нашей 1/8 придеться хранить координаты 75 точек = 75*2 точки* 2 байта (в один не влезем никак) = 300 байт на одну окружность. А если нам их нужно тысячи нарисовать (это ведь примитив, он обычно тучами рисуется Короче вопросы есть Ясно что нужно выбирать в каждой конкретной ситуации свое решение. Например если ты хочешь чтобы точка просто бегала по окружности фиксированого радиуса, то ясно что лучше всего сохранять точки. А если радиус окружности меняется, то, ИМХО, лучше пересчитывать Добавлено @ 15:42 В общем бири алгоритм и пользуйся Если потом тебя не устроит его скорость, то приходи сюда. Всесте подумаем |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |