Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2006, 14:17   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию рисование изолиний

перенесено со старого форума. сообщение от Юдифь.

Добрый день!
Уважаемые эксперты, не подскажете, как на Паскале реализовать алгоритм рисования изолиний (линий уровня) и траектории спуска в точку экстремума для квадратичной функции двух переменных? Вернее, траекторию спуска я себе представляю, как нарисовать, а вот с линиями уровня проблема.

перенесено со старого форума. сообщение от pascal65536.

Насколько я понимаю, функция 2х переменных это уже 3D?

перенесено со старого форума. сообщение от Юдифь.

Да, это функция в простанстве, но мне нужны именно линии уровня. Вот определение:
**************************
Линией уровня функции двух переменных называется линия на плоскости XOY, принадлежащая D(z), в каждой точке которой функция принимает одно и то же значение.
Уравнение линии уровня: f(x, y)=c, где с - произвольное число. На данной линии уровня значение функции z=c. Линий уровня бесконечно много, и через каждую точку области определения можно провести линию уровня.
**************************

Должна получиться вот такая картинка .

перенесено со старого форума. сообщение от zetrix.

Можно в лоб решать: перебирать все x,y и проверять f(x,y)=c

перенесено со старого форума. сообщение от pascal65536.

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

перенесено со старого форума. сообщение от Юдифь.

Добрый день!
Большое спасибо за ответы. У меня получилось дойти до функции одной переменной. Но тут возникла другая проблема:
Получилась квадратная функция, которую я пыталась решить методом хорд и дихотомии. Но оба эти метода находят лишь один корень на отрезке. А мне нужны оба. Можно, конечно, решить через дисриминант, но квадратное уравнение уравнение получилось лишь в моем случае, а в общем случае может получиться любое. Как мне быть?

перенесено со старого форума. сообщение от zetrix.

Хм... Может в прошлом моём сообщении я как-то непонятно сказал... Ну график ты как строишь? по точкам. Вот у тебя разрешение экрана допустим 640х480. Берём 2 цикла вложенных по x и y, и перебираем их по разрешению:

for y:=1 to 480 do
for x:=1 to 640 do
begin
// здесь мы проверяем f(x,y)=c если равно, то на экране отображаем точку (x,y), если не равно, то ничего не делаем.
end;

Может этот метод не годится, т.к. он достаточно долгий, но это всё же вариант...

перенесено со старого форума. сообщение от Юдифь .


Твой вариант не годится. Дело в том, что функция дана такая: 4*x^2+4*x*y+6*y^2-17*x.
Приравниваю я ее к 1 (например), решение: x=3,4....., y=-4.06.....
То есть очень приблизительно. А ты мне предлагаешь через For, где шаг равен единице. То есть ни однй точки подходящей я не найду.

перенесено со старого форума. сообщение от pascal65536.

Как-то так.

uses graph;



const zoom = 100;



var x,y,w : Real;

grDriver : Integer;

grMode : Integer;

I,J : Integer;

Color : Byte;





function f(x,y : real):real;

begin

f:=4*x*x+4*x*y+6*y*y-17*x;

end;



begin

w := 1/zoom;



grDriver := Detect;

InitGraph(grDriver,grMode,'c:\tp\bg i\');



For I := 0 To GetMaxX Do

Begin

For J := 0 To GetMaxY Do

Begin

X := (GetMaxX/2-I)/zoom;

Y := (GetMaxY/2-J)/zoom;

Color := Round(f(x,y));



If ((X > -w) And (X < w))

Or ((Y > -w) And (Y < w))

Then Color := 0;



PutPixel(I, J, Color);

End;

End;

readln;

CloseGraph;



end.

перенесено со старого форума. сообщение от Юдифь.

Огромное спасибо!
Только я поменяла три строчки в Вашем коде, чтобы изолинии были повернуты куда надо:
...
X := (I-GetMaxX/2)/zoom;
Y := (J-GetMaxY/2)/zoom;
....
PutPixel(I,GetMaxY-J,Color);
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование квадрата KocT9 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 22.10.2014 11:58
JavaScript :: Рисование beginner JavaScript, Ajax 7 11.08.2008 11:32
рисование на форме Kostua Помощь студентам 2 26.07.2008 16:24
рисование в TImage Rusl92 Общие вопросы Delphi 8 02.05.2008 20:23
Рисование... HunterMan Win Api 10 30.04.2008 23:46