1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| procedure TForm1.angleChange(Sender: TObject);
var a : real;
begin
a:=pi/180*angle.Position;
image1.Picture:=nil;
Nom_procedure(image1.Canvas,image1.width div 4,image1.Height div 4, image1.width div 10, image1.Height div 10,a);
end;
Procedure TForm1.Nom_procedure(caneva :Tcanvas; OrigineX, OrigineY, Largeur, hauteur : integer; Angle : real);
Var rx, ry, dx, dy : real;
x0, y0 : integer;
function lepoint(x, y : integer) : Tpoint; // calcul des coordonées du point après rotation
var R, acos : real;
Begin
x:=trunc((x-dx)*rx)+OrigineX;
y:=trunc((y-dy)*ry)+OrigineY;
R:=sqrt(sqr(x-x0)+sqr(y-y0));
acos:=arccos((x-x0) / R);
x:=X0+trunc(R*cos(acos+angle));
if y>y0 then
y:=y0+trunc(R*sin((-1*acos)+angle))
else
y:=y0-trunc(R*sin(acos+angle));
image1.Canvas.Brush.Style:=bsclear;
image1.Canvas.Ellipse(trunc(x0-R),trunc(y0-r),trunc(x0+r),trunc(y0+r));
image1.Canvas.Brush.Style:=bssolid;
result:=point(x, y);
end;
Begin
x0:=155;
y0:=84;
with caneva do
begin
rx:=1;// proportion de la forme par rapport à sa taille d'origine
ry:=1;// proportion de la forme par rapport à sa taille d'origine
Dx:=0;// coordonnées du début du traçage sur la canvas
Dy:=0;
x0:=trunc((x0-dx)*rx)+OrigineX; // centre de rotation, coordonées recalculées
y0:=trunc((y0-dy)*ry)+OrigineY; //
//-=-=-=-=-=-=-=-=-=-=-
pen.Color:=clblue;
Polygon([lepoint(137,16),lepoint(133,119),lepoint(237,115)]);
pen.Color:=clred;
moveto(origineX,OrigineY);
lineto(x0,y0);
pen.Color:=clblack;
moveto(origineX,OrigineY);
lineto(trunc((137-dx)*rx)+OrigineX,trunc((16-dy)*ry)+OrigineY);
moveto(origineX,OrigineY);
lineto(trunc((133-dx)*rx)+OrigineX,trunc((119-dy)*ry)+OrigineY);
moveto(origineX,OrigineY);
lineto(trunc((237-dx)*rx)+OrigineX,trunc((115-dy)*ry)+OrigineY);
end;
end; |
Partager