/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
cos og sin
Fra : Harald


Dato : 06-05-04 21:24

Hej

Jeg har en form med en TPaintBox på, størrelsen er 100x100, jeg vil nu vha.
LineTo tegne nogle linier fra centrum (50,50) og så i en fin vifte der
følger en cirkel bue fra 270 grader til 90 grader.
Der skal benyttes noget cos og sin beregning her vil jeg tro, men hvordan?

Bruger Delphi 7 pro

Mvh
HK



 
 
Klaus Petersen (07-05-2004)
Kommentar
Fra : Klaus Petersen


Dato : 07-05-04 16:06


> Jeg har en form med en TPaintBox på, størrelsen er 100x100, jeg vil nu
vha.
> LineTo tegne nogle linier fra centrum (50,50) og så i en fin vifte der
> følger en cirkel bue fra 270 grader til 90 grader.
> Der skal benyttes noget cos og sin beregning her vil jeg tro, men hvordan?

et punkt (p) i cirklen med radius (r) og radian (ra) i forhold til centrum:

p (x,y) = cos ( ra ) * r, sin ( ra ) * r

grader til radian:

radian = grader * ( pi / 180 )

- - - -

Måske noget i denne her stil:

procedure TForm1.Tegn_Vifte ( pb : TPaintbox; start : real; slut : real;
interval : real );
var
startradian : real;
slutradian : real;
intervalradian : real;
frame : integer;
framecount : integer;
current : real;
onedegree : real;
dx,dy, cx, cy : integer;
radius : real;
begin;
pb.Canvas.Rectangle( 0, 0, pb.Width, pb.Height );
onedegree := pi / 180;
startradian := onedegree * start;
slutradian := onedegree * slut;

cx := pb.Width div 2;
cy := pb.Height div 2;
// radius := sqrt ( cx*cx + cy*cy );
radius := cx;

frame := 0;
framecount := round ( (slut - start) / interval );
intervalradian := (slutradian - startradian) / framecount;

while ( frame <= framecount ) do begin;
current := startradian + (intervalradian*frame);
pb.Canvas.MoveTo( cx, cy );
dx := cx + round (cos (current)*radius);
dy := cy + round (sin (current)*radius);

pb.Canvas.LineTo( dx, dy );

inc (frame);
end;

end;



Harald (07-05-2004)
Kommentar
Fra : Harald


Dato : 07-05-04 17:25

"Klaus Petersen" <spectual2@getTOnet.dk> skrev i en meddelelse
news:KBNmc.2638$_73.2553@news.get2net.dk...
>
> > Jeg har en form med en TPaintBox på, størrelsen er 100x100, jeg vil nu
> vha.
> > LineTo tegne nogle linier fra centrum (50,50) og så i en fin vifte der
> > følger en cirkel bue fra 270 grader til 90 grader.
> > Der skal benyttes noget cos og sin beregning her vil jeg tro, men
hvordan?
>
> et punkt (p) i cirklen med radius (r) og radian (ra) i forhold til
centrum:
>
> p (x,y) = cos ( ra ) * r, sin ( ra ) * r
>
> grader til radian:
>
> radian = grader * ( pi / 180 )
>
> - - - -
>
> Måske noget i denne her stil:
>
> procedure TForm1.Tegn_Vifte ( pb : TPaintbox; start : real; slut : real;
> interval : real );
> var
> startradian : real;
> slutradian : real;
> intervalradian : real;
> frame : integer;
> framecount : integer;
> current : real;
> onedegree : real;
> dx,dy, cx, cy : integer;
> radius : real;
> begin;
> pb.Canvas.Rectangle( 0, 0, pb.Width, pb.Height );
> onedegree := pi / 180;
> startradian := onedegree * start;
> slutradian := onedegree * slut;
>
> cx := pb.Width div 2;
> cy := pb.Height div 2;
> // radius := sqrt ( cx*cx + cy*cy );
> radius := cx;
>
> frame := 0;
> framecount := round ( (slut - start) / interval );
> intervalradian := (slutradian - startradian) / framecount;
>
> while ( frame <= framecount ) do begin;
> current := startradian + (intervalradian*frame);
> pb.Canvas.MoveTo( cx, cy );
> dx := cx + round (cos (current)*radius);
> dy := cy + round (sin (current)*radius);
>
> pb.Canvas.LineTo( dx, dy );
>
> inc (frame);
> end;
>
> end;

Tak for det.

/HK



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste