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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 18:45   #1
Sasuke-cun
 
Регистрация: 02.12.2009
Сообщений: 9
По умолчанию График

Написал програмку для рисования графика A(EXP в степени (t/2)+EXP в степени (-t/2)), с маштобированием графика, смещением и поворотом но он не рисуется компилируется но когда нажимаешь построить он не строит

Код:
]procedure TForm1.DrawFunction;
var
  xo,yo,i:integer;
  t,r,al,yr,yold,xr,xold:real;
begin
  ListBox1.Clear;
   Form1.Canvas.Rectangle(15,15,Graph.ClientWidth+17,Graph.ClientHeight+17);
   A:=StrToIntDef(Edit1.Text,60);
  xo:=Graph.ClientWidth div 2;
  yo:=Graph.ClientHeight div 2;
  t:=0.001;
  Graph.Canvas.MoveTo(xo+round((x0)*m),
                       yo-round((y0)*m));
                     Graph.Canvas.Pen.Color:=clBlack;
   Graph.Canvas.Pen.Width:=2;
  xold:=x0;
  yold:=y0;
  ymin:=yold;
  ymax:=yold;
  xmax:=xold;
  xmin:=xold;
  while(t<2*Pi+0.001) do
  begin
    xr:=x0;
    yr:=y0;
    Graph.Canvas.LineTo(xo+round(xr*m),yo-round(yr*m));
    t:=t+0.001;
    if (xr*xold)<0 then
    begin
      ListBox1.AddItem('x=0   y='+FloatToStrF(yr, ffFixed, 6, 3)+'   t='+FloatToStrF(t, ffFixed, 6, 3),Form1);
      
    end;

    if (yr*yold)<0 then
    begin
      ListBox1.AddItem('y=0   x='+FloatToStrF(xr, ffFixed, 6, 3)+'   t='+FloatToStrF(t, ffFixed, 6, 3),Form1);
    end;

    if xr>xmax then xmax:=xr;
    if yr>ymax then ymax:=yr;
    if xr<xmin then xmin:=xr;
    if yr<ymin then ymin:=yr;

    xold:=xr;
    yold:=yr;
  end;
  DrawSetkaText;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DrawFunction;
end;

procedure TForm1.FormKey1Press(Sender: TObject; var Key1: Char);
var r:real;
begin
  if(Key1='+')or(Key1='-')or(Key1='<')or(Key1='>')or(Key1='q')or
    (Key1='w')or(Key1='a')or(Key1='s')or(Key1='d') then
  begin
    if Key1 = '+' then
      m:=m+0.01*StrToIntDef(Edit6.Text,10);
    if Key1 = '-' then
      if (m-0.01*StrToIntDef(Edit6.Text,10)>0) then
        m:=m-0.01*StrToIntDef(Edit6.Text,10);
    if Key1 = 'q' then
      Close();
    if Key1 = 'a' then x0:=x0-StrToIntDef(edit8.Text,1);
    if Key1 = 'd' then x0:=x0+StrToIntDef(edit8.Text,1);
    if Key1 = 's' then y0:=y0-StrToIntDef(edit8.Text,1);
    if Key1 = 'w' then y0:=y0+StrToIntDef(edit8.Text,1);
    if Key1 = '<' then fi:=fi+StrToIntDef(edit9.Text,1)*Pi/180;
    if Key1 = '>' then fi:=fi-StrToIntDef(edit9.Text,1)*Pi/180;
    DrawFunction;
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(help);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.KeyPreview:=true;
  Form1.DoubleBuffered:=true;
  m:=1;
  x0:=0;
  y0:=0;
  fi:=0;
  help:='+     увеличить масштаб'+#13+#10+
        '-     увеличить масштаб'+#13+#10+
        '<     повернуть по часовой стрелке'+#13+#10+
        '>     повернуть против часовой стрелки'+#13+#10+
        'w     сдвинуть вврех'+#13+#10+
        's     сдвинуть вниз'+#13+#10+
        'a     сдвинуть влево'+#13+#10+
        'd     сдвинуть вправо'+#13+#10+
        'q     выход';
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Form1.Canvas.Brush.Color:=clWhite;
  Form1.Canvas.Rectangle(15,15,Graph.ClientWidth+17,Graph.ClientHeight+17);
  DrawFunction;
end;

function TForm1.x(t:real):real;
begin
  x:=A*(exp(t/2)+exp(-t/2));
end;

procedure TForm1.DrawSetkaText;
var i,delta,n,xo,yo:integer;
begin
  Graph.Canvas.Font.Size:=10;
  xo:=Graph.Width div 2;
  yo:=Graph.Height div 2;
  delta:=StrToIntDef(edit2.Text,100);
  if delta<20 then
  begin
    ShowMessage('Минимальный размер сетки равен 20');
    delta:=50;
    edit2.Text:='50';
  end;
  n:=round(xo/delta)+1;
  Graph.Canvas.Pen.Width:=1;
  Graph.Canvas.Pen.Color:=clgreen;
  for i:=-n to n do
  begin
    Graph.Canvas.MoveTo(xo+delta*i,Graph.Height);
    Graph.Canvas.LineTo(xo+delta*i,0);
    Graph.Canvas.MoveTo(Graph.Width,yo+delta*i);
    Graph.Canvas.LineTo(0,yo+delta*i);
    Graph.Canvas.TextOut(xo+delta*i,Graph.Height div 2,IntToStr(round(delta*i/m)));
    Graph.Canvas.TextOut(Graph.Width div 2,yo+delta*i,IntToStr(round(-delta*i/m)));
  end;

end;
procedure TForm1.FormResize(Sender: TObject);
begin
  DrawFunction;
end;

end.

Последний раз редактировалось Sasuke-cun; 12.12.2009 в 20:27.
Sasuke-cun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
График! NIKEtos Microsoft Office Excel 3 04.11.2009 13:49
График Simon..14 Общие вопросы C/C++ 1 02.02.2009 19:55
График zzzzz Общие вопросы Delphi 1 16.10.2008 10:46
График Droid Общие вопросы Delphi 6 25.05.2008 23:40
График xsexrexga Общие вопросы Delphi 1 27.01.2007 21:26