надо построить график и касательную к функции вида A*x^3+Bx^2+C*x+D, где A,B,C и В задаются пользователем, а конкретно в TEdit'ы. причем точка касания задается произвольно по щелчку на графике. график норм строится а касательную как-то через одно место.
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;