Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

построить линии уровня   Найти похожие ветки 

 
злобная танька ©   (2005-11-16 10:45) [0]

привет!
проблема следующая:
есть унимодальная функция от двух переменных. нужно найти минимум и построить линии уровня. строю на TImage. нахожу минимум; выбираю некоторую область двумерную с точкой минимума в центре. нахожу максимум в этой области. нахожу промежуточные значения функции между Fmin и Fmax..

а дальше начинается самое интересное: нужно построить линии (концентрические "окружности") во всех точках которых значение функции одинаково (близко к одному из промежуточных между Fmin и Fmax). пробегаю все точки в цикле и проверяю
 if abs(f(x,y) - LLs[k]) < e then {закрашиваю}
где LLs - массив промежуточных значений функции
e - погрешность

так вот проблема в том что чем ближе к минимуму тем медленнее изменяется функция и тем жирнее получаются линии уровня. а чем дальше - тем тоньше и на краях графика бывает шо они совсем исчезают.
я так понимаю что значение переменной e должно изменяться но вот вопрос каким образом??

помогите плиз!


 
Duracell ©   (2005-11-16 11:17) [1]

Привет Добрая Танька !
Погляди здесь: http://nsft.narod.ru/Programming/colmetopt.html
Может что окажется полезным...


 
злобная танька ©   (2005-11-16 11:23) [2]


> Duracell ©   (16.11.05 11:17) [1]

спасибо но я там уже была :)
и линии уровня там страдают такой же болезнью только в еще более тяжкой форме


 
злобная танька ©   (2005-11-16 11:30) [3]

ок я попробовала привинтить в вычисление e производную в точке но ето сделало вычисления слишком уж медленными. надо наверно подход менять в корне.


 
jack128 ©   (2005-11-16 11:50) [4]

Если я правельно понял задачу, то для цикла по одному аргументу нужно делать примерно так:
CurX := 0;
while CurX <= MaxX do
begin
 if abs(f(CurX, Y) < LLs[k]) < e then
 begin
   StartX := CurX;
   FinalX := StartX;
   while (FinalX <= MaxX) and (abs(f(CurX, Y) < LLs[k]) < e) do Inc(FinalX);
   {рисуешь в точке (StartX + FinalX) div 2}    
   CurX := FinalX + 1;
 end else
  Inc(CurX);  
end;

А вот как это преобразовать в цикл по двум аргументам не соображу..

PS задай на Sources.ru вопрос, там есть человек с картами работающий, может посоветует что нить полезное.


 
han_malign ©   (2005-11-16 12:31) [5]

А ты рисуй градиентом по f(|(F(x,y)-L)*|)(f - какая нибудь логарифмическая функция(с быстрым затуханием, подбирается экспериментально), L - уровень), заодно и ступенчантых линий не будет... Можно сразу по всем уровням одним проходом, только вещественный аналог mod ввести. Хотя производную(по обоим дифференциалам) все равно неплохо "прикрутить", но для этого хватит, за глаза(для глаза), дельта-разности...

Для четкого определения быстрее проверять по квадратам 2x2 на переход уровня, и выбирать ближайшую точку.


 
Amoeba ©   (2005-11-16 14:16) [6]

Посмотри компонент TPColor
http://www.chat.ru/~anfilat
Беслатно и с исходниками. Единственно придется внести небольшую правку в исходники для компиляции под D7 - это касается DsgnIntf (или что-то вроде этого) - заменить ссылку на этот модуль ссылками на 2 других (точнее сказать не могу, т.к. D7 не использую).


 
MBo ©   (2005-11-16 14:24) [7]

Не вполне осознал проблему - обычно изолинии строятся по равномерной сетке уровней. В таком случае их сгущение отвечает большому градиенту, разрежение - маленькому, т.е. более плоским областям.
Если есть желание специальным образом подчеркнуть минимум, стоит подобрать функцию, при которой в конкретных условиях изолинии выглядят желаемым образом, например, можно параболу попробовать.


 
злобная танька ©   (2005-11-16 16:30) [8]

спасибо всем буду пробовать!


> MBo ©   (16.11.05 14:24) [7]

гм у меня более плоские и меннее плоские области выделяются цветом т.е. точки со значениями от Fmin до Fmax закрашиваются цветами от черного до белого. но при этом вокруг минимума получается слишком большая область черноты а ето не красиво поэтому я хочу чтобы линии уровня были везде одинаково густыми и фактически их задача показать что творится около минимума.


 
MBo ©   (2005-11-16 17:10) [9]

>поэтому я хочу чтобы линии уровня были везде одинаково густыми и фактически их задача показать что творится около минимума.

Да уж, нетрадиционно. Всё же привычно, когда по изолиниям можно оценить градиент.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.053 c
14-1132222541
Vlad Oshin
2005-11-17 13:15
2005.12.11
Написал заявление. Нафиг.


2-1132551144
KitsumVI
2005-11-21 08:32
2005.12.11
Композитивный класс


14-1132266612
Джонсон
2005-11-18 01:30
2005.12.11
Шевченке!


2-1132844658
worldmen
2005-11-24 18:04
2005.12.11
BIOS.


4-1129098748
MEDJIK
2005-10-12 10:32
2005.12.11
Железо





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский