![]() |
|
![]() ![]() ![]() |
|
Kiw |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.9.2006 Репутация: нет Всего: нет |
Добрый день! Интересует алгоритм Брезенхема для рисования гиперболы. Для окружности всё понятно, а вот с гиперболой не выходит =(
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
Kiw |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.9.2006 Репутация: нет Всего: нет |
Можно поподробнее про критерий выбора точки? Не понятно, как отклонение от линии считается...
А если уравнение гиперболы в каноническом виде, x^2-y^2=a^2 (равносторонняя), то как отклонение считать? Это сообщение отредактировал(а) Kiw - 14.10.2007, 17:36 |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
критерий такой: чтобы производная с одной стороны была больше 1, а с другой - меньше (по модулю): (a/x)'=-a/x^2, модуль: a/x^2 он равен 1 в точке x=sqrt(a)
тут, наверное, даже попроще будет, т.к. по модулю производная всегда меньше 1 так что просто делим на правую (>0) и левую (<0) достаточно нарисовать правую, а левую - просто отразить ну а отклонение... например, взять по аналогии ( (x^2-y^2) - a^2 )^2 возможные следующие точки тут тоже будут (x+1,y) и (x+1,y+1) ну а дальше упростить неравенство... -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |