Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

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

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

перенесено со старого форума. сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование квадрата KocT9 Assembler 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


09:17.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru