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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 11:41   #1
cherkasenok
 
Регистрация: 19.05.2009
Сообщений: 6
Печаль построение изолиний

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

uses graph,crt;

const
n=220;
m=90;
// iterk=10000;
//eps=0.0001;
niz=10;


var

x0e,xke,y0e,yke :integer;
x0,xk,y0,yk :real;
z,zn,hz,zk :real;
hxe,hye :real;
alpha,beta,gamma,delta :real;
hx,hy :real;
xr,yr :array[1..4] of integer;
p,status:array [1..n,1..m] of real;
i,j,ii :integer;
grdriver,grmode :integer;
max,min :real;
imax,jmax,imin,jmin :integer;
xt1,yt1,xt2,yt2 :real;
ixt1,jyt1,ixt2,jyt2 :integer;

kk :integer;
x,y :real;
lx,ly :real;


BEGIN
clrscr;

grDriver := Detect;
initGraph(grDriver, grMode,'');

//setlinestyle(solidln,1,thickwidth);
setcolor(yellow);

x0e:=1; y0e:=1;
xke:=560;yke:=560;
hxe:=(xke-x0e)/n;hye:=(yke-y0e)/m;
x0:=0.0;y0:=0.0;xk:=2.2;yk:=0.9;
hx:=(xk-x0)/n; hy:=(yk-y0)/m;
alpha:=(x0e-xke)/(x0-xk);
beta:=(x0*xke-xk*x0e)/(x0-xk);
gamma:=(y0e-yke)/(yk-y0);
delta:=(yk*yke-y0*y0e)/(yk-y0);


x0:=1;y0:=1;
for i:=1 to n do
begin
x:=x0+(i-1)*hx;
for j:=1 to m do
begin
y:=y0+(j-1)*hy;
p[i,j]:=sin(x+y);
end;
end;
{построение сетки}
for i := 1 to n do
begin
x:=i * hxe;
MoveTo(round(x), round(y0e));
LineTo(round(x), round(yke));
end;
for j := 1 to m do
begin
y := j * hye;
MoveTo(round(x0e), round(y));
LineTo(round(xke), round(y));
end;
//€§®Ўа*¦Ґ*ЁҐ ॣг«па*®© бҐвЄЁ


max:=p[1,1];imax:=1;jmax:=1;
min:=p[1,1];imin:=1;jmin:=1;
for i:=1 to n do
begin
for j:=1 to m do
begin
if max<p[i,j] then
begin
max:=p[i,j];
imax:=i;
jmax:=j;
end;
if min>p[i,j] then
begin
min:=p[i,j];
imin:=i;
jmin:=j;
end;
end;
end;
zn:=min;zk:=max;hz:=(max-min)/niz;
z:=zn;
while z<=zk-0.000001*hz do
begin
for i:=1 to n-1 do
begin
lx:=x0+(i)*hx;
for j:=1 to m-1 do
begin
ly:=y0+(j)*hy;
kk:=0;
if ((p[i,j] <= z) and (z < p[i+1,j])) or
((p[i,j] >= z) and (z > p[i+1,j])) then
begin
x:=lx+(hx*(z-p[i,j]))/(p[i+1,j]-p[i,j]);
kk:=kk+1;
xr[kk]:=round(alpha*x+beta);
yr[kk]:=round(gamma*ly+delta);
end;

if ((p[i+1,j] <= z) and (z < p[i+1,j+1])) or
((p[i+1,j] >= z) and (z > p[i+1,j+1])) then
begin
y:=ly+(hy*(z-p[i+1,j]))/(p[i+1,j+1]-p[i+1,j]);
kk:=kk+1;
xr[kk]:=round(alpha*(lx+hx)+beta);
yr[kk]:=round(gamma*y+delta);

if kk=2 then
begin
MoveTo(xr[2],yr[2]);
LineTo(xr[1],yr[1]);
kk:=0;
end;
end;

if ((p[i,j+1] <= z) and (z < p[i+1,j+1])) or
((p[i,j+1] >= z) and (z > p[i+1,j+1])) then
begin
x:=lx+(hx*(z-p[i,j+1]))/(p[i+1,j+1]-p[i,j+1]);
kk:=kk+1;
xr[kk]:=round(alpha*x+beta);
yr[kk]:=round(gamma*(ly+hy)+delta);

if kk=2 then
begin
MoveTo(xr[2],yr[2]);
LineTo(xr[1],yr[1]);
kk:=0;
end;
end;

if ((p[i,j] <= z) and (z < p[i,j+1])) or
((p[i,j] >= z) and (z > p[i,j+1])) then
begin
y:=ly+(hy*(z-p[i,j]))/(p[i,j+1]-p[i,j]);
kk:=kk+1;
xr[kk]:=round(alpha*lx+beta);
yr[kk]:=round(gamma*y+delta);

if kk=2 then
begin
MoveTo(xr[2],yr[2]);
LineTo(xr[1],yr[1]);
kk:=0;
end;
end;
end;
end;
z:=z+hz;
end;
readln; readln;
closegraph;
END.

Бутьте добры, ПОМОГОТЕ ПОЖАЛУЙСТА!!!
Заранее спасибо!
cherkasenok вне форума Ответить с цитированием
Старый 19.05.2009, 11:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что ты называешь Изолиниями? Проекции на оси?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.05.2009, 12:35   #3
cherkasenok
 
Регистрация: 19.05.2009
Сообщений: 6
По умолчанию

под изолиниями я понимаю линиии, для которых функция принимает постоянные значения f(x,y)=z=Const,заданной в узлах прямоугольной сетки {Xi, Yj}.

Последний раз редактировалось cherkasenok; 19.05.2009 в 13:33.
cherkasenok вне форума Ответить с цитированием
Старый 19.05.2009, 13:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я так пониаю что твоя Z - значение на самой изолинии а x y - координаты на сетке?

Ну я бы скорее всего для каждого значения Z организовал массив иксов и игреков, а потом бы их отрисовывал...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.05.2009, 15:31   #5
cherkasenok
 
Регистрация: 19.05.2009
Сообщений: 6
По умолчанию

а поточнее можно, чет не очень понимаю
cherkasenok вне форума Ответить с цитированием
Старый 19.05.2009, 16:47   #6
cherkasenok
 
Регистрация: 19.05.2009
Сообщений: 6
По умолчанию

Помогите,пожалуйста!
cherkasenok вне форума Ответить с цитированием
Старый 19.05.2009, 17:25   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я себе это так представляю
Создаешь массив трехмерный.
Туда по ходу выполнения твоей функции заносишь значения x,y,z
И еще один массив, в которые заносишь только Z
Далее в цикле проходиш по второму массиву, читаешь каждое Z, и во внутреннем цикле перебираешь первый массив, если в нем Z-ты совпадают чертишь на экране очередную линию от предидущей точки до этой.
Когда внутренний массив закончится перемещаешся по экрану в начало координат и повторяешь черчение по следующиму Z.
Таким образом получишь кучу линий.

Жаль ухожу домой уже, времени нет наброски сделать...
Так что удачи...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.05.2009, 19:23   #8
cherkasenok
 
Регистрация: 19.05.2009
Сообщений: 6
По умолчанию

спасибо! я попробую сама, но если время будет сделай наброски, оч прошу.
cherkasenok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построение сечений Дина1109 Паскаль, Turbo Pascal, PascalABC.NET 0 11.04.2009 19:30
Построение на экране Ximer Паскаль, Turbo Pascal, PascalABC.NET 1 10.04.2009 21:37
Построение графиков на C# TheGuardian123 Общие вопросы .NET 2 29.01.2008 14:50
(С++) Построение графика tg(x)=y. Panterka Помощь студентам 2 13.12.2007 09:32
рисование изолиний Alar Паскаль, Turbo Pascal, PascalABC.NET 0 30.10.2006 14:17