25.03.2012, 00:20
|
Прохожий
|
|
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
|
|
всю процедуру выложу, и еще скрин программы
Для оси Х строит норм, а для Y не хочет ( выделил жырным )
Наконец-то я догадываюсь что не так. Оно берет макс значение, разбивает на 10 отрезков и их наносит на шкалу, но видать макс знач. не берется
Код:
Procedure BUILD(AA, TT : MASK1; FT: MASK1; wob11, w : real);
Function Max(var p: mask1):single;
var mk:single;
begin
mk:=P[1];
For i:=2 to k do
if p[i]>mk then mk:=p[i];
Max:=mk;
end;
Function Min(var pp: mask1): single;
var mmk:single;
begin
mmk:=PP[1];
For i:=2 to k do
if pp[i] < mmk then mmk:=pp[i];
Min:=mmk;
end;
var Fg: maskdd;
fgr, AMIN,Amax,Fmaxx : real;
a1,t1: mas3;kf,k1: integer;
begin
if w=2 then
begin
Amin:=Min(aa);
if Amin <= 0 then
begin
for i:=1 to k do
aa[i]:=aa[i]+abs(Amin);
end
else begin
for i:=1 to k do
aa[i]:=aa[i];
end;
Fmaxx:=tt[k];
Amax := Max(aa);
end;
if w=1 then begin
Fmaxx:=1.05*fd;
Amax := Max(aa);
end;
Xc:=100;
Xb:=(form1.Image1.Height div 2);
Yc:=420;Yb:=50;
dlinaOsiX:=500;
dlinaOsiY:=400;
if Amax>0 then
ly:=dlinaOsiY/(1.1*Amax);
lx:=dlinaOsiX/Fmaxx*0.9;
form1.Image1.Canvas.moveTo(Xc,Yc);
form1.Image1.Canvas.LineTo(Xc+dlinaOsiX,Yc);
form1.Image1.Canvas.moveTo(Xc,Yc);
form1.Image1.Canvas.LineTo(Xc,Yc-dlinaOsiY);
form1.Image1.Canvas.TextOut(xc-20,yc-dlinaOsiY-10,'A ');
if w=2 then
form1.Image1.Canvas.TextOut(xc+dlinaOsiX-10,yc-14,'T,c')
else
form1.Image1.Canvas.TextOut(xc+dlinaOsiX-5,yc-14,'f,Гц');
{ось X}
for i:=0 to 10 do
begin
t1[i]:=(Fmaxx/10)*i;
form1.Image1.Canvas.moveTo(Xc+round(t1[i]*lx),Yc-2);
form1.Image1.Canvas.LineTo(Xc+round(t1[i]*lx),Yc+2);
if (w=2) then
str(t1[i]:2:2,sd)
else
str(t1[i]:2:0,sd);
form1.Image1.Canvas.TextOut(Xc+round(t1[i]*lx),Yc+6,sd);
end;
{ось Y}
for i:=0 to 10 do
begin
a1[i]:=(Amax/10)*(i);
form1.Image1.Canvas.moveTo(Xc-2,YC-round(a1[i]*ly));
form1.Image1.Canvas.LineTo(Xc+2,YC-round(a1[i]*ly));
str(a1[i]:2:3,sd1);
form1.Image1.Canvas.TextOut(400,YC-round(a1[i]*ly),sd1);
end;
if w=2 then
k1:=k;
if (w=1) or (w=3) then
k1:=round(fd*1.05/f[1]);
form1.Image1.Canvas.moveTo(Xc + round(tt[1]*lx),Yc-round(aa[1]*ly));
for i:=2 to k1 do
begin
form1.Image1.Canvas.pen.Color:=clGreen;
form1.Image1.Canvas.LineTo(Xc + round(tt[i]*lx),Yc-round(aa[i]*ly));
end;
End;
|