cs_fadoro
Messages postés3Date d'inscriptionjeudi 28 avril 2005StatutMembreDernière intervention29 avril 2005
-
28 avril 2005 à 04:09
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 2012
-
28 avril 2005 à 22:08
Bonjour alors je m'explique
Je cherche à tracer des polygones sur un paintbox avec delphi
c'est ok por les polygones quelconques grace à une liste de points, et lineto
mais je n'arrive pas à faire des polygones réguliers.J'ai pensé à faire une méthode
regulier pour l'objet polygone mais cela n'a pas l'air de fonctionner
voici le programme dans mon unité polygone :
procedure tpolygone.affichage(canvas:tcanvas);
var
point0,point1:tpoint;
i :integer;
begin
point0:=tpoint(liste.Items[0]);
canvas.MoveTo(point0.abs,point0.ord);
for i:=1 to liste.count-1 do
begin
point1:=tpoint(liste.Items[i]);
canvas.LineTo(point1.abs,point1.ord);
end;
canvas.lineTo(point0.abs,point0.ord);
end;
procedure tpolygone.regulier(O:tpoint;l:tlist;r1,r2:integer);
var i,x,y:integer;
ptd,pta:tpoint;
begin
r1 et r2 sont les rayons horizontal et vertical du polygone regulier
for i:=0 to l.Count-1 do
begin
ptd:=tpoint(l.Items[i]);
x:=trunc(O.abs+r1*cos(i*360div(l.Count-1)));
y:=trunc(O.ord+r2*sin(i*360div(l.Count-1)));
pta:=tpoint.create(x,y);
l.Items[i]:=pta;
end;
end;
destructor tpolygone.destroy ;
begin
liste.Free ;
inherited ;
end;
procedure tpolygone.affichage(canvas:tcanvas);
var
i :integer;
begin
with canvas do
begin
MoveTo(TPoint(liste[0]).abs,TPoint(liste[0]).ord);
for i:=0 to liste.count-1 do
begin
LineTo(TPoint(liste[i]).abs,TPoint(liste[i]).ord);
end;
LineTo(TPoint(liste[0]).abs,TPoint(liste[0]).ord);
end ;
end;
procedure tpolygone.regulier(O:tpoint;r1,r2,Sommets:integer);
var i,x,y:integer;
pta:tpoint;
begin
for i:=0 to Sommets-1 do
begin
// ATTENTION cos et sin utilisent des radians !!
x:=O.abs+trunc(r1*cos((i*360.0/sommets)*(PI/180)));
y:=O.ord+trunc(r1*sin((i*360.0/sommets)*(PI/180)));
pta:=tpoint.create(x,y);
Liste.Add(pta);
end;
end;
end.
Exemple d'appel :
procedure TForm1.Button2Click(Sender: TObject);
var
O : TPoint ;
a : TPolygone ;
begin
a := TPolygone.create ;
O := TPoint.Create( PaintBox1.Width div 2, PaintBox1.Height div 2) ;
A.regulier(O,40,30,5);
A.Affichage(PaintBox1.Canvas);
a.Free ;
O.Free;
end;