Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
1

Рисование линий уровня функции двух переменных

04.04.2013, 02:25. Показов 5632. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно, сабж.
Ничего толкового не придумал, кроме как сделать тупо канву, на ней попиксельно идти и смотреть, если функция принимает какое-то искомое нами значение, то мы её закрашиваем, иначе идем дальше. Проблемы очевидны: нужно велосипедить свое отображение из пикселей экранных в континуальное множество допустимых значений (то есть искать иксы дискретно), нужно проходить каждый раз все изображение, при достаточно больших размерах это проблема. Ну и в третьих, потом по этим точкам нужно будет как-то интерполировать замкнутую кривую, как, я пока не придумал.

Вопрос: есть ли нормальные решения задачи?
Другое название : изолинии
http://ru.wikipedia.org/wiki/%... 0%B8%D1%8F
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2013, 02:25
Ответы с готовыми решениями:

Библиотека для отрисовки линий уровня функции от 2-ух переменных
Может быть кто-то знает какие-нибудь библиотеки, которые позволили бы стоить линии уровня функции...

Построить график поверхности и карту линий уровня для функций двух переменных
построить график поверхности и карту линий уровня для функций двух переменных...

Поверхность уровня функции двух переменных
Приведите, пожалуйста, два хороших примера. Необходимо взять функцию от трёх переменных и описать...

Изобразите график и линии уровня функции двух переменных z=f(x,y) в заданной области G
Изобразите график и линии уровня функции двух переменных z=f(x,y) в заданой области G Опишите...

9
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,132
Записей в блоге: 6
04.04.2013, 09:22 2
Цитата Сообщение от Psilon Посмотреть сообщение
искомое нами значение, то мы её закрашиваем
Эээ... не понял. Нужны же изолинии вроде, при чем тут закрашивание?

Решение, конечно, есть. У нас в проекте используется отдельная сишная либа для постройки оных. Делается тупо -ей передаётся сформированный массив, получаем результат. При изменении поверхности всё перестраивается полностью.
Откуда взята - не знаю, могу нарыть, если надо.

Добавлено через 23 секунды
Работает довольно быстро, кстати.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.04.2013, 12:23  [ТС] 3
dondublon, не надо. У меня есть функция - на вход принимает массив аргументов (для рисования на вход всегда будет подаваться функция двух аргументов) - на выходе естественно число. Как эта библиотека будет работать? Если уже есть рабочая - то ок..

Цитата Сообщение от dondublon Посмотреть сообщение
Эээ... не понял. Нужны же изолинии вроде, при чем тут закрашивание?
Я имел ввиду, что изолинию буду строить как интерполяцию по точкам, которые буду высчитывать в каждом отображаемом "пикселе", задав отображение экран -> дискретные значения иксов. Но если есть более человеческие методы, буду рад посмотреть
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,132
Записей в блоге: 6
04.04.2013, 13:43 4
Цитата Сообщение от Psilon Посмотреть сообщение
на выходе естественно число
В смысле? На выходе же линии должны быть.

Цитата Сообщение от Psilon Посмотреть сообщение
Я имел ввиду, что изолинию буду строить как интерполяцию по точкам, которые буду высчитывать в каждом отображаемом "пикселе", задав отображение экран -> дискретные значения иксов. Но если есть более человеческие методы, буду рад посмотреть
Чота я не понял. Ну ладно.
Ладно, я тогда искать не буду, раз есть. Наверное, не разберешься, а то документации нет.
Алгоритм я не знаю, но достаточно умный, строит хорошо.
Вот тут еще кое-что нашел makematics.com/code/isolines/
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.04.2013, 13:48  [ТС] 5
dondublon, у меня пока кроме идеи ничего нет. Я говорю ,что у меня есть функция от переменных, вот так выглядит, например:
C#
1
2
3
4
        private void SetFirstFunction(object sender, RoutedEventArgs e)
        {
            function = x => Math.Pow(3*x[0] - x[1], 2) + Math.Pow(2*x[0] - 3 * x[1], 2);
        }
на вход подаем массив (используем x0 и x1), на выход получаем число - значение фунцкии f(x,y)
Вопрос в том, как это связать с графиком (нужны линии уровня для фиксированного значения f(x,y).
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,132
Записей в блоге: 6
04.04.2013, 13:59 6
Цитата Сообщение от Psilon Посмотреть сообщение
Как эта библиотека будет работать?
Теперь понял.
Эта либа принимает на вход готовую поверхность, т.е. двумерный массив, можешь думать о нём как о рельефе.
Возвращает изолинии.
Если забыть о готовом рельефе, и думать о функции, то, имхо, будет слишком сложно.
Потому что для каждого уровня z (z=0, 10, 20, ..., 100, к примеру), надо будет искать решение f(x,y) = z, решение в виде кривой. Хотя если функция простая и фиксированная - тоже вариант.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.04.2013, 15:19  [ТС] 7
dondublon, то есть примерно так?
C#
1
2
3
4
for(var x = minX; x < maxX; x+=step)
   for(var y = minY; y < maxY; y+=step)
      a[x,y] = F(x,y);
IsolinesLibrary.GetIsolines(a);
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.04.2013, 15:23  [ТС] 8
У меня, при step = 0.0001, minX = minY = 0, maxX = maxY = 5 отрабатывает за 5 секунд ( получается, примерно 10к шагов в секунду), я думаю, этого должно хватить. И вопрос: что библиотека возвращает, мне нужно на WPF вставить картинку рядом с решением функции. Если интересно, вот программа. Она должна изолинии эти построить:
Вложения
Тип файла: rar VectorOptimization.rar (91.8 Кб, 119 просмотров)
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,132
Записей в блоге: 6
04.04.2013, 16:07 9
Цитата Сообщение от Psilon Посмотреть сообщение
dondublon, то есть примерно так?
Ага.
Цитата Сообщение от Psilon Посмотреть сообщение
У меня, при step = 0.0001, minX = minY = 0, maxX = maxY = 5
Т.е. сетка 50000 * 50000 ? Да, отличная скорость (без сарказма).

Цитата Сообщение от Psilon Посмотреть сообщение
что библиотека возвращает,
Возвращает набор линий в pureC-style.
То есть число N (сколько линий), за ними N указателей, каждый - на свою линию, там n - число точек, ну и n точек в виде двух подряд идущих double.

Добавлено через 9 секунд
Цитата Сообщение от Psilon Посмотреть сообщение
dondublon, то есть примерно так?
Ага.
Цитата Сообщение от Psilon Посмотреть сообщение
У меня, при step = 0.0001, minX = minY = 0, maxX = maxY = 5
Т.е. сетка 50000 * 50000 ? Да, отличная скорость (без сарказма).

Цитата Сообщение от Psilon Посмотреть сообщение
что библиотека возвращает,
Возвращает набор линий в pureC-style.
То есть число N (сколько линий), за ними N указателей, каждый - на свою линию, там n - число точек, ну и n точек в виде двух подряд идущих double.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.04.2013, 00:02  [ТС] 10
dondublon, ясно. Ну может что и выйдет. А то у меня простую функцию рисует (правда пока точками, но это поправимо), а вот более сложную - уже нет (почему - не знаю, коллекция оказывается пустой). Ради любопытсва можете глянуть
Вложения
Тип файла: rar Isolines.rar (41.6 Кб, 146 просмотров)
0
05.04.2013, 00:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2013, 00:02
Помогаю со студенческими работами здесь

Построение линий уровня функции
Делаю курсовую работу и не знаю в какой программе построить линии уровня функции. Как сделать...

Фрагмент карты линий уровня функции
Здравствуйте! К моему стыду я не могу решить пример, а точнее не знаю даже как решать и где взять...

Линии уровня от двух переменных
Пытаюсь создать линии уровня функции 2*X12 - X1*X2 + 3*X22 - X1 + 2*X2 следующим кодом: =...

Построение линий уровня
Добрый день! Есть задача: нужно построить линии уровня для функции двух переменных f(x,y)=z=Const,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru