Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.01.2012, 09:16
pika pika вне форума
Прохожий
 
Регистрация: 09.11.2010
Сообщения: 4
Репутация: 10
Вопрос Построить график функции с помощью TCanvas

Помогите разобраться с некоторыми моментами в коде
Код:
unit graph_unit;

interface

uses
  SysUtils, Graphics, Forms, Classes,
  Controls, StdCtrls, Buttons, ExtCtrls,
  Windows;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    BitBtn1: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

  var
  Form1: TForm1;
implementation
{$R *.dfm}
const k  = 100;  XN = 60; YN = 20; NX = 10; NY = 10;

var a,b,dx,dy,ymax,ymin : Real;
    x,y                 : Array[1..K] of Real;
    xe,ye               : Array[1..K] of Integer;
    lx,ly,xk,yk         : Integer;
    st                  : String;

procedure Line(x1,y1,x2,y2:Integer);                      
Begin
   with Form1.Image1.Canvas do
   begin
     MoveTo(x1,y1);
     LineTo(x2,y2);
   end;
End;

function getY(x:real):real;
begin
  result:=sin(x)*sin(x)-cos(x)*cos(x);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var i:Integer;
begin
   with Form1.Image1.Canvas do
   begin
     Pen.Color:=clWhite;                                   
     Rectangle(0,0,Image1.ClientWidth,Image1.ClientHeight);
     Pen.Color:=clBlack;
     Font.Color:=clBlack;
   end;
   xk:=Image1.ClientWidth-25;
   yk:=Image1.ClientHeight-50;
   try
     a:=StrToFloat(edit1.Text);
     b:=StrToFloat(edit2.Text);
   except
     MessageBox(0,'Неверный ввод!','Ошибка!',MB_ICONSTOP);
     exit;
   end;
   dx:=(b-a)/(K-1);
   ymax:=getY(a);              
   ymin:=ymax;
   for i := 1 to K do                                      
   Begin                                                  
     x[i]:=a+dx*(i-1);
     y[i]:=getY(x[i]);                  
     if ymax<y[i] then ymax:=y[i];
     if ymin>y[i] then ymin:=y[i];
   End;

   if abs(ymax-ymin)<1E-3 then
   begin
     ymax:=ymax+1;
     ymin:=ymin-1;
   end;

   for i:=1 to K do                                  
   begin
     xe[i]:=XN+round((x[i]-a)*(XK-XN)/(b-a));
     ye[i]:=YN+round((ymax-y[i])*(YK-YN)/(ymax-ymin))
   end;

   lx:=(XK-XN) div NX;
   dx:=(b-a)/NX;
   for i:=1 to (NX+1) do                                  
   begin
        line(XN+lx*(i-1),YN,XN+lx*(i-1),YK);
       str((a+dx*(i-1)):5:2,st);
     form1.Image1.Canvas.TextOut(XN-20+lx*(i-1),YK+10,st);
   end;
   ly:=(YK-YN) div NY;
   dy:=(ymax-ymin)/NY;
   for i:=1 to NY+1 do                                      
   begin
     line(XN,YN+ly*(i-1),XK,YN+ly*(i-1));
     str((ymax-DY*(i-1)):5:2,st);
     form1.Image1.Canvas.TextOut(XN-50,YN-4+ly*(i-1),st);
   end;
    with Form1.Image1.Canvas do
   begin
     Pen.Color:=clBlue;
     Pen.Width:=2;
     for i:=1 to K-1 do                                    
          line(xe[i],ye[i],xe[i+1],ye[i+1]);
     Pen.Color:=clWhite;
     Pen.Width:=100;
   end;

  end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Form1.Close;
end;
Админ: Учимся оформлять код правильно!

А именно этот момент
xe[i]:=XN+round((x[i]-a)*(XK-XN)/(b-a));
ye[i]:=YN+round((ymax-y[i])*(YK-YN)/(ymax-ymin))

почему именно так и для чего это нужно в дальнейшем??

Последний раз редактировалось Admin, 23.01.2012 в 09:58.
Ответить с цитированием
  #2  
Старый 23.01.2012, 15:47
g101k g101k вне форума
Прохожий
 
Регистрация: 17.10.2011
Сообщения: 6
Репутация: 10
По умолчанию

Cудя по всему тут высчитывается отклонение от предыдущей точки и округляется
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter