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;