Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование гиперболы по Брезенхему 
:(
    Опции темы
Kiw
Дата 14.10.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



Добрый день! Интересует алгоритм Брезенхема для рисования гиперболы. Для окружности всё понятно, а вот с гиперболой не выходит =(
PM MAIL   Вверх
maxim1000
Дата 14.10.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



для начала стоит уточнить, какие именно гиперболы рассматриваются
в общем виде (т.е. с произвольными параметрами) или вида y=a/x?
общий подход, используемый в алгоритмах Брезенхема - рассмотреть варианты следующих точек и выбрать тот, который больше всего походит

например, для графика функции y=a/x (a>0 - параметр)
ограничимся правой веткой
будем рисовать её слева направо
пусть часть точек мы уже нарисовали
задача - нарисовать следующую
(x,y) - предыдущая точка
из вида графика функции можно заметить, что возможны только три варианта для следующей точки:
(x+1,y), (x+1,y+1), (x,y+1)
кроме того, если производная функции по модулю больше 1, то первого варианта не будет, а если меньше - не будет последнего, так что будем отдельно обрабатывать 0<x<sqrt(a) (тут производная будет большая) и x>sqrt(a) (тут график более пологий)

для примера рассмотрим вторую часть
тут у нас два кандидата: (x+1,y) и (x+1,y-1)
для того, чтобы выбрать, нужен критерий
возьмём квадрат отклонения от линии:
e1=(y - 1/(x+1) )^2
e2=(y-1 - 1/(x+1) )^2
нужно их сравнить
e1 <?> e2
y^2 + 1/(x+1)^2 - 2y/(x+1) <?> (y-1)^2 + 1/(x+1)^2 - 2(y-1)/(x+1)
y^2 - 2y/(x+1) <?> (y-1)^2 - 2(y-1)/(x+1)
y^2 - 2y/(x+1) <?> y^2 + 1 - 2y - 2(y-1)/(x+1)
-2y/(x+1) <?> 1 - 2y - 2(y-1)/(x+1)
-2y/(x+1) <?> 1 - 2y - 2y/(x+1) + 2/(x+1)
0 <?> 1 - 2y + 2/(x+1)
0 <?> (1-2y)*(x+1) + 2
т.е. если правая часть положительная, значит, вторая точка дальше от кривой, так что берём первую, иначе - вторую...

P.S.
не тестировал, так что не исключено, что в выкладках ошибки, впрочем, надеюсь, смысл передал...


--------------------
qqq
PM WWW   Вверх
Kiw
Дата 14.10.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



Можно поподробнее про критерий выбора точки? Не понятно, как отклонение от линии считается... 
А если уравнение гиперболы в каноническом виде, x^2-y^2=a^2 (равносторонняя),  то как отклонение считать?

Это сообщение отредактировал(а) Kiw - 14.10.2007, 17:36
PM MAIL   Вверх
maxim1000
Дата 14.10.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(Kiw @  14.10.2007,  17:17 Найти цитируемый пост)
Можно поподробнее про критерий выбора точки?

критерий такой: чтобы производная с одной стороны была больше 1, а с другой - меньше (по модулю):
(a/x)'=-a/x^2, модуль: a/x^2
он равен 1 в точке x=sqrt(a)
Цитата(Kiw @  14.10.2007,  17:17 Найти цитируемый пост)
А если уравнение гиперболы в каноническом виде, x^2-y^2=a^2 (равносторонняя),  то как отклонение считать?

тут, наверное, даже попроще будет, т.к. по модулю производная всегда меньше 1
так что просто делим на правую (>0) и левую (<0)
достаточно нарисовать правую, а левую - просто отразить
ну а отклонение... например, взять по аналогии ( (x^2-y^2) - a^2 )^2
возможные следующие точки тут тоже будут (x+1,y) и (x+1,y+1)
ну а дальше упростить неравенство...



--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.