|
| 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
| |
|
|