IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> проблема с графиком
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 143
Пол: Мужской

Репутация: -  0  +


проблема такая: при нажатии кнопки на форме программа виснет и ничего соотвественно не показывает (графики не строит)
вот код:
Код

procedure TForm2.Button2Click(Sender: TObject);
var
x:array [1..1000] of real;
y:array [1..1000] of real;
z:array [1..1000] of real;
stop:boolean;
i,n:integer;
r,p1,p0,m1,m0,M,Cd,Dt,U,W,V,sx,sy,sz:real;
scalex, scaley, ymin, ymax, xmin, xmax: double;
begin
r:=StrToInt(edit1.text);
p1:=strtoint(edit7.text);
p0:=strtoint(edit6.text);
m1:=p1*(4/3)*3.14*(sqr(r)*r);
m0:=p0*(2/3)*3.14*(sqr(r)*r);
M:=m0+m1;
Cd:=strtoint(edit8.Text);
Dt:=strtoint(edit9.Text);
x[1]:=strtoint(edit3.Text);
y[1]:=strtoint(edit4.Text);
z[1]:=strtoint(edit5.Text);
n:=5;
  stop:=false;
  While not stop do
begin
for i:=1 to n do
begin
u:=x[i]/(dt/n);
v:=y[i]/(dt/n);
w:=z[i]/(dt/n);
x[i+1]:=((p0*Cd)/M)*sqr(U-(x[i]-x[i-1])/dt)*(U-(x[i]-x[i-1])/dt)-2*x[i]+x[i-1];
y[i+1]:=((p0*Cd)/M)*sqr(v-(y[i]-y[i-1])/dt)*(v-(y[i]-y[i-1])/dt)-2*y[i]+y[i-1];
z[i+1]:=((p0*Cd)/M)*sqr(w-(z[i]-z[i-1])/dt)*(w-(z[i]-z[i-1])/dt)-2*z[i]+z[i-1];
paintbox1.Canvas.Pixels[round(x[i]),round(z[i])]:=clBlack;
paintbox2.Canvas.Pixels[round(x[i]),round(y[i])]:=clBlack;
paintbox3.Canvas.Pixels[round(y[i]),round(z[i])]:=clBlack;
sx:=sx+u;
sy:=sy+v;
sz:=sz+w;
end;
if n=4 then stop:=true;
end;
label14.Caption:=inttostr(round(sx/n));
label15.Caption:=inttostr(round(sy/n));
label16.Caption:=inttostr(round(sx/n));
end;


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
при нажатии кнопки на форме программа виснет и ничего соотвественно не показывает

Странно... Должна вообще вылетать:
for i:=1 to n do
begin
u:=x[i]/(dt/n);
v:=y[i]/(dt/n);
w:=z[i]/(dt/n);

// уже при i = 1 - попытка обращения к x[0]
x[i+1]:=((p0*Cd)/M)*sqr(U-(x[i]-x[i-1])/dt)*(U-(x[i]-x[i-1])/dt)-2*x[i]+x[i-1];
(ну, и дальше - по тому же сценарию). Что-то ты не договариваешь...

Кстати, чему равно содержимое всех Edit-ов? Как ты думаешь, надо ДОГАДАТЬСЯ, или лучше ты приведешь те значения, на которых у тебя не работает?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 143
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 27.11.2007 10:09) *

Странно... Должна вообще вылетать:
for i:=1 to n do
begin
u:=x[i]/(dt/n);
v:=y[i]/(dt/n);
w:=z[i]/(dt/n);

// уже при i = 1 - попытка обращения к x[0]
x[i+1]:=((p0*Cd)/M)*sqr(U-(x[i]-x[i-1])/dt)*(U-(x[i]-x[i-1])/dt)-2*x[i]+x[i-1];
(ну, и дальше - по тому же сценарию). Что-то ты не договариваешь...

Кстати, чему равно содержимое всех Edit-ов? Как ты думаешь, надо ДОГАДАТЬСЯ, или лучше ты приведешь те значения, на которых у тебя не работает?

начальные x,y,z =1
r=0.025
p0 и p1=1
Сd=1.17
dt=2
сделал изменения
Код

procedure TForm2.Button2Click(Sender: TObject);
var
x:array [1..1000] of real;
y:array [1..1000] of real;
z:array [1..1000] of real;
stop:boolean;
i,n:integer;
r,p1,p0,m1,m0,M,Cd,Dt,U,W,V,sx,sy,sz:real;
begin
r:=StrToInt(edit1.text);
p1:=strtoint(edit7.text);
p0:=strtoint(edit6.text);
m1:=p1*(4/3)*3.14*(sqr(r)*r);
m0:=p0*(2/3)*3.14*(sqr(r)*r);
M:=m0+m1;
Cd:=strtoint(edit8.Text);
Dt:=strtoint(edit9.Text);
x[1]:=strtoint(edit3.Text);
y[1]:=strtoint(edit4.Text);
z[1]:=strtoint(edit5.Text);
n:=5;
  stop:=false;
  While not stop do
begin
for i:=1 to n do
begin
u:=x[i]/(dt/n);
v:=y[i]/(dt/n);
w:=z[i]/(dt/n);
if i>2 then
begin
x[i+1]:=((p0*Cd)/M)*sqr(U-(x[i])/dt)*(U-(x[i])/dt)-2*x[i];
y[i+1]:=((p0*Cd)/M)*sqr(v-(y[i])/dt)*(v-(y[i])/dt)-2*y[i];
z[i+1]:=((p0*Cd)/M)*sqr(w-(z[i])/dt)*(w-(z[i])/dt)-2*z[i];
end
else
begin
x[i+1]:=((p0*Cd)/M)*sqr(U-(x[i]-x[i-1])/dt)*(U-(x[i]-x[i-1])/dt)-2*x[i]+x[i-1];
y[i+1]:=((p0*Cd)/M)*sqr(v-(y[i]-y[i-1])/dt)*(v-(y[i]-y[i-1])/dt)-2*y[i]+y[i-1];
z[i+1]:=((p0*Cd)/M)*sqr(w-(z[i]-z[i-1])/dt)*(w-(z[i]-z[i-1])/dt)-2*z[i]+z[i-1];
end;
paintbox1.Canvas.Pixels[round(x[i]),round(z[i])]:=clBlack;
paintbox2.Canvas.Pixels[round(x[i]),round(y[i])]:=clBlack;
paintbox3.Canvas.Pixels[round(y[i]),round(z[i])]:=clBlack;
sx:=sx+u;
sy:=sy+v;
sz:=sz+w;
end;
if n=4 then stop:=true;
end;
label14.Caption:=inttostr(round(sx/n));
label15.Caption:=inttostr(round(sy/n));
label16.Caption:=inttostr(round(sx/n));
end;


теперь ошибку выдаёт 'project2.exe raised exception class Einvalidop with message ‘Invalid floating point operation’…'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
теперь ошибку выдаёт 'project2.exe raised exception class Einvalidop with message ‘Invalid floating point operation’
Еще бы... Ты видел, какие значения принимают x[i], y[i], z[i]? Посмотри:

Прикрепленное изображение

Какой же тут Round справится?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата(volvo @ 27.11.2007 11:31) *

Еще бы... Ты видел, какие значения принимают x[i], y[i], z[i]? Посмотри:

Прикрепленное изображение

Какой же тут Round справится?

good.gif спасибо!
значит надо пошаманить с формулой...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.10.2020 21:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name