Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi einen Kreis zu Fuß zeichen (https://www.delphipraxis.net/29720-einen-kreis-zu-fuss-zeichen.html)

Christian18 13. Sep 2004 20:36


einen Kreis zu Fuß zeichen
 
Hallo,

ich möchte gerne einen Kreis zu Fuß zeichnen. Ich weiß aber nicht wie das geht. Ich glaube irgendwie mit sin und cos oder so. kann mir jemend einen Tip geben??? Achso der Kreis soll mir Canvas gezeichnet werden und es soll nicht mit ellipse gemacht werden.

Mit freundlichen Grüßen

Christian18

alcaeus 13. Sep 2004 20:41

Re: einen Kreis zu Fuß zeichen
 
Hi Christian,

du musst in einer Schleife den Winkel durchgehn und darin die Koordinaten ausrechnen:

Delphi-Quellcode:
function DegToRad(Deg: Real): Real;
begin
  return Deg*Pi/180;
end;

function ZeichneKreis(r: Real);
var
  i: Integer;
  x, y: Real;
begin
  for i := 0 to 359 do
  begin
    x := r*cos(DegToRad(i));
    y := r*sin(DegToRad(i));
//Pixel setzen
  end;
end;
Ich weiß jetzt auf die Schnelle aber nicht wie die Funktion heißt, um ein Pixel setzen zu können :oops:

Greetz
alcaeus

Matze 13. Sep 2004 20:42

Re: einen Kreis zu Fuß zeichen
 
Zitat:

Zitat von alcaeus
Ich weiß jetzt auf die Schnelle aber nicht wie die Funktion heißt, um ein Pixel setzen zu können :oops:

Evtl meinst du

Delphi-Quellcode:
Canvas.Pixels[x, y] := clBlack;
;)

alcaeus 13. Sep 2004 20:45

Re: einen Kreis zu Fuß zeichen
 
Hi Matthias,

um genau zu sein wäre es
Delphi-Quellcode:
Canvas.Pixels[Trunc(x), Trunc(y)] := clBlack;
da x und y als Real deklariert sind. :zwinker:

Greetz
alcaeus

JasonDX 13. Sep 2004 20:46

Re: einen Kreis zu Fuß zeichen
 
vielleicht solltest du aber keine punkte zeichnen, sonder die punkte mit linien verbinden. Wenn der Kreis sonst zu groß wird kanns dir passieren, dass der kreis nicht richtig verbunden is!

alcaeus 13. Sep 2004 20:49

Re: einen Kreis zu Fuß zeichen
 
Hi Christian,

Chimaira hat Recht, das hab ich in meinem Code nicht berücksichtigt.
Hier eine Version die funktionieren (müsste)

Delphi-Quellcode:
function DegToRad(Deg: Real): Real;
begin
  return Deg*Pi/180;
end;

function ZeichneKreis(mx, my: Integer; r: Real);
var
  i: Integer;
  x, y: Real;
begin
  MoveTo(mx+r, my);
  for i := 1 to 359 do
  begin
    x := r*cos(DegToRad(i));
    y := r*sin(DegToRad(i));
    LineTo(mx+x,my-y);
  end;
  LineTo(mx+r, my);
end;
Greetz
alcaeus

Matze 13. Sep 2004 20:56

Re: einen Kreis zu Fuß zeichen
 
@Alc: Fehlt da nicht das MoveTo in der Schleife, so kommt's mir etwas spanisch vor. ;)

Edit: Und vor das MoveTo / LineTo gehört evtl irgend ein Canvas. :roll:

JasonDX 13. Sep 2004 20:59

Re: einen Kreis zu Fuß zeichen
 
LineTo macht das selbe wie MoveTo, nur dass die Linie noch dazugezeichnet wird. Passt schon so!

[Edit]: Das könnt man einfach mit einem
Delphi-Quellcode:
with canvas do begin
am anfang und einem end am ende der proc lösen


@Alcaeus: :coder: better :mrgreen: :zwinker: :cheers:
@supermuckl: wär das beste, aber das komplizierteste...
[/Edit]

Nikolas 13. Sep 2004 21:01

Re: einen Kreis zu Fuß zeichen
 
warum willst du denn ein MoveTo in der Schleife? Als erstes gehst du an den Startpunkt und dann zeichnest du ohne Abzusetzen die Kreislinie.

supermuckl 13. Sep 2004 21:02

Re: einen Kreis zu Fuß zeichen
 
ähm leute
anstatt da linien von winkel zu winkel zu zeichnen ( wird bei großen kreisen nich grad schön aussehen )
könntet ihr auch die halben winkel ( kommastellen oder auch winkelminuten genannt ) berechnen und somit einen echten kreis zeichnen via pixel setzen

ihr müsstet halt noch bisschen ausbaldovern wie ihr rausrechnen könnt wieviele kommastellen ihr minimal braucht um die auflösung für einen bestimmten radius raus zu rechnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz