unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, TeeFunci, Series, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
Edit4: TEdit;
Button1: TButton;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
Tpoint= record
x,y:smallint;
end;
var
Form1: TForm1;
a,b,c,d:integer;
o:Tpoint;
const
x0=600;
y0=200;
implementation
{$R *.dfm}
Function PaintXY(Const t: integer): real;
var x: real;
Begin
x:=t/30-10;
PaintXY :=-(A*x*x*x+B*x*x+C*x+D);
End;
procedure TForm1.Button1Click(Sender: TObject);
var i,x:integer;
begin
with Image1.Canvas do FillRect(Rect(0,0,Width,Height));
a:=strtoint(edit1.Text);
b:=strtoint(edit2.Text);
c:=strtoint(edit3.Text);
d:=strtoint(edit4.Text);
image1.Canvas.MoveTo(0,round(PaintXY(0)));
i:=0;
while i<604 do
begin
Form1.image1.Canvas.Pen.Width:=3;
Form1.image1.Canvas.Pen.Color:=clBlack;
Form1.image1.Canvas.LineTo(i,round(PaintXY(i)*10+o.y));
i:=i+5;
end;
end;
Procedure Kasat(Const l : integer);
Var
q,s : real;
i:integer ;
Begin
form1.Image1.Canvas.Pen.Color:=clred;
i:= 0;
s:=l/30-10;
Q := 3*A*s*s+2*B*s+C;
While i < 604 Do
Begin
form1.Image1.Canvas.LineTo(round(i),(round(PaintXY(i))*10-200)+q*((i/30-10)-s))));
i:= i +5;
End;
End;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
st : String;
begin
label6.Caption:=inttostr(x);
St := 'X= ' + IntToStr(X) + '; ' + 'Y= '+ IntToStr(Y) + ' Построить касательную в этой точке?';
if (Image1.Canvas.Pixels[x,y] = clBlack) and (MessageDLG(St,mtinformation,[mbNo,mbok],0) = mrOk)
Then
Begin
Kasat(Round(X));
End;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
o.x:=round (form1.Width/2);
o.y:=round(form1.Height/2);
end;
end.
касательная к графику., запарился уже. график строит касательную не хочет... |