![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| w1zard350 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 4.5.2009 Репутация: нет Всего: нет |
Здравствуйте!
Функции я представляю в виде:
Нужно нарисовать график подобной функции, передав в класс рисования указатель на нее. Для функции одной переменной я делаю обычно:
Как видно, тут обычная зависимость значения от переменной X и не более. f - указатель на ту самую функцию одной переменной. Когда дело дошло до функции двух переменных я чето задумался. Получается мы не высчитываем никакой зависимости, нам просто нужно передавать туда две координаты и проверять их на 0 ? Тогда это получается охренительно ресурсозатратно:
Вариант выразить зависимость вручную отпадает, т.к. необходима возможность построения графика вида: x^2 + y^2 = 1 Графическая библиотека гипотетическая. Жду с нетерпением любой мысли в нужную сторону. Горю желанием решить эту задачу =)) Спасибо. |
||||||
|
|||||||
| 17dufa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 3 Всего: 5 |
правильно ли я понял, что нужно нарисовать график f(x,y)=0?
особых идей нет, но что точно - рисовать подобное при помощи такого LineTo точно нельзя, херь получится. внутри if ты будешь получать точки (x,y) но вот в каком порядке их стоит соединить lineTo - это совершенно неочевидно. да и if достаточно спорный. если функция непрерывная, лучше проверять на то, что функция меняет знак, что-то типа: if (f(x,y)*f(x+dx,y) < 0 || f(x,y)*f(x,y+dy)<0 || f(x,y)*f(x+dx,y+dy)<0) Это сообщение отредактировал(а) 17dufa - 24.2.2010, 13:22 |
|||
|
||||
| Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: 1 Всего: 2 |
w1zard350, если вдруг не знаешь - то функция 2-х переменных - это не линия. Это поверхность. Т.е. зависимость сохраняется (куда ж ей деться-то?) - просто график функции строится в трехмерном пространстве.
Есть координаты x, y, z. z = x*x-y; Вот по ним и рисуется. --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
w1zard350, в книге
![]() есть пример реализации |
|||
|
||||
| w1zard350 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 4.5.2009 Репутация: нет Всего: нет |
17dufa
Да, все верно. Именно f(x,y)=0. LineTo не катит, согласен, я выше написал вприкидку, особо не думая. Я даже не рассматривал вариант использовать такой подход. Насчет вашего условия не понял =( Мое условие f(x,y) < eps означало то, мы не сравниваем напрямую с нулем, т.к. мы имеем дело с компьютером, у которого ограниченная разрядность и нужно рисовать с определенной точностью. Если я делал f(x,y) =0 - никогда такого бы не было. Static Зачем вы мне говорите о функции двух переменных? Люди, которые не знают что это такое обычно не пытаются с подобным работать. Вы просто невнимательно прочли мое сообщение, а там я имел ввиду именно выражение f(x,y) = 0. Мы рассматриваем это в двухмерном пространстве. chaos Спасибо, сейчас гляну! =) Это сообщение отредактировал(а) w1zard350 - 25.2.2010, 15:41 |
|||
|
||||
| 17dufa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 3 Всего: 5 |
w1zard350, ну почему с равенством на 0 сравнивать некорректно я знаю. Но и предложенный if на мой взгляд недостаточно хорош, чисто математически ты будешь получать некое "облако" точек вокруг реального графика, фишка в том, что это "облако" может оказаться слишком широким, получишь слишком много точек вокруг реального графика. лучше сравнивать не на то, что функция в заданной точке "достаточно мала", а на то, что функция при переходе от заданной точки (x,y) к следующей (x+dx,y) или (x,y+dy) ну или (x+dx, y+dy) меняет знак. именно эту смену знака я попытался отразить в своем варианте if.
в общем, читай умную книжку, потом напишешь что получилось. |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
возможно у него функция настолько часто изменчива, что ему нужна сетка в 0.01х0.01. насколько я понимаю именно вы борсетки решает сложность приближенного вычисления. а насчет точности - точность страдает всегда, и он правильно работает с эпсилончиком. эпсилон и выражает ту точность, которая его интересует. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| 17dufa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 3 Всего: 5 |
bilbobagginz, исчо раз: почему нужен eps а не сравнение с 0 - я понимаю.
насчет изменчивости - выбор сетки как раз позволит отловить переходы через 0. а такой пример (для простоты функция одного переменного) 1/x = 0. пусть eps = 0.001 это значит что данная проверка для всех x>1000 будет выдавать, что этот x - корень, что несколько некорректно все-таки. |
|||
|
||||
| w1zard350 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 4.5.2009 Репутация: нет Всего: нет |
Пока что решил разбивать функцию на две части и рисую эти графики отдельно.
|
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
В своей диссертации я как раз приводил исходники программ, как строить трехмерные графики и линии уровня. Кому хочется, может поразбираться.
Присоединённый файл ( Кол-во скачиваний: 47 )
7apps.zip 2,16 Kb-------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |