unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,Ugraphique,Uoutil, ExtCtrls; type TForm1 = class(TForm) pb1: TPaintBox; pb2: TPaintBox; procedure FormCreate(Sender: TObject); procedure pb1Paint(Sender: TObject); procedure pb2Paint(Sender: TObject); private { Déclarations privées } graphique:Tgraphique; macourbe:TTrajectoire; public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:integer; xFrm : XFORM; begin position:=poscreencenter; setlength(macourbe,201); for i:=0 to 200 do begin macourbe[i].x:=(i-100)/10; if i<>100 then macourbe[i].y:=sqr(sin(macourbe[i].x)/macourbe[i].x) else macourbe[i].y:=1; end; graphique:=Tgraphique.create(pb1.Width, pb1.Height,-10,10,-0.2,1.1); end; procedure TForm1.pb1Paint(Sender: TObject); begin with graphique do begin obturation(clblack); canvas.pen.color:=clcream; tracerepere; canvas.pen.Width:=1; canvas.pen.color:=clred; tracecourbe(macourbe); canvas.pen.Width:=2; canvas.pen.color:=clcream; vecteur(-3,0.5,-0.5,sqr(sin(0.5)/0.5)); font('arial',clcream,[fsbold],14); textout('sinus cardinal carré',-10,0.5); end; pb1.canvas.Draw(0,0,graphique); end; procedure TForm1.pb2Paint(Sender: TObject); var xFrm : XFORM; r : TRect; trajinfo : array of TPoint; i : integer; begin xFrm.eM11 := pb2.Width/20000000; xFrm.eM12 := 0; xFrm.eM21 := 0; xFrm.eM22 := -pb2.Height/1300000; xFrm.eDx := pb2.Width/2; xFrm.eDy := pb2.Height*1.1/1.3; // changement d'origine Y SetGraphicsMode(pb2.Canvas.Handle, GM_ADVANCED); SetWorldTransform(pb2.Canvas.Handle, xFrm); pb2.Canvas.Pen.Width := 1; // obturation pb2.Canvas.Brush.Color := clBlack; r.Left := -10000000; r.Top := -200000; r.Right := 10000000; r.Bottom := 1300000; pb2.Canvas.FillRect(r); // tracerepere pb2.Canvas.Pen.Color := clCream; pb2.Canvas.MoveTo(-1000000*10, 0); pb2.Canvas.LineTo(1000000*10, 0); pb2.Canvas.MoveTo(0, -200000); pb2.Canvas.LineTo(0, 1100000); pb2.Canvas.Pen.Color := clred; SetLength(trajinfo, high(macourbe)+1); for i :=0 to high(macourbe) do begin trajinfo[i].X := round(macourbe[i].x * 1000000); trajinfo[i].Y := round(macourbe[i].y * 1000000); end; Pb2.Canvas.polyline(trajinfo); end; end.