Показать сообщение отдельно
  #1  
Старый 27.11.2007, 15:25
nav nav вне форума
Прохожий
 
Регистрация: 27.11.2007
Сообщения: 30
Репутация: 10
По умолчанию помогите построить графики

Здравствуйте. Я инвалид, изучаю Delphi самостоятельно. Но следующая программа никак не идёт. Не могли бы вы помочь разобраться. Надо написать программу для построения графиков y=cos(wx) y=sin(wx); Delphi постоянно выдаёт информацию о том, что экранные координаты ix, iy неверны. Экранные координаты рассчитываю по формулам в книжке (x-x1)/(x2-x1)=(ix-ix1)/(ix2-ix1). С клавиатуры ввожу данные: количество точек_n=400, частота_w=4, x0=-6.28, xk=6.28, Ymin=-0.22, Ymax=1;
Код:
procedure TForm1.Button2Click(Sender: TObject);
var x,y,x0,xk,Ymax,Ymin,step,w:real;
     pw,ph,n,code,i,ix,iy:integer;
begin
 val(ntedit.text,n,code); val(wedit.text,w,code);
 val(x0edit.text,x0,code); val(xedit.text,xk,code);
 val(minedit.text,Ymin,code); val(maxedit.text,Ymax,code);
 pw:=paintbox1.Width; ph:=paintbox1.Height;
 with paintbox1.Canvas do
  begin
   refresh; pen.Width:=1; brush.Color:=clRED; pen.Color:=1;
   rectangle(0,0,pw,ph);
   case radiogroup1.ItemIndex of
    0: begin
         pen.Width:=2; pen.Color:=clYELLOW; pen.Style:=pssolid;
         iy:=round((cos(w*x0)-Ymin)/(ymax-ymin)*ph); step:=(xk-x0)/n;
         moveto(0,ph-iy-1); x:=x0;
         for i:=2 to n do
          begin
           x:=x+step; y:=cos(w*x);
           ix:=round((x-x0)/(xk-x0)*pw); iy:=round((ymax-ymin)*ph);
           lineto(ix,ph-iy-1)
          end;
         ix:=0;
        end;
    1: begin
        pen.Width:=3; pen.color:=clGREEN; pen.Style:=pssolid;
        iy:=round((sin(w*x0)-ymin)/(ymax-ymin)*ph); step:=(xk-x0)/n;
        moveto(0,round(ph-iy-1)); x:=x0;
         for i:=2 to n do
          begin
           x:=x+step; y:=sin(w*x);
           ix:=round((x-x0)/(xk-x0)*pw); iy:=round((ymax-ymin)*ph);
           lineto(ix,ph-iy-1)
          end;
         ix:=0;
       end
   end
   end
end;
.
Ответить с цитированием