Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kreisbahn um Objekt (https://www.delphipraxis.net/4930-kreisbahn-um-objekt.html)

Delphi-lerner 17. Mai 2003 09:18


Kreisbahn um Objekt
 
Guten morgen....

ich hab mal wieder ein Problem:

Ich möchte eine Kreisbahn darstellen. Diese Kreisbahn soll in einer Procedure stehen und um ein Objekt liegen...(die Sonne).

Ich hatte schon mal angefangen nur irgendwie fehlt mir etwas, damit es auch eine Kreisbahn wird:


Delphi-Quellcode:
procedure erdbahn(x,y: integer);
var i: integer;
    wi: real;
begin
  for i:=1 to 180 do
  begin
    wi:=pi/180;
    x:=round(i*cos(wi));
    y:=round(i*sin(wi));
   form1.Canvas.Pixels[x,y]:=clgreen;
  end;
end;
Delphi stellt immer ein Strich dar und keine Kreisbahn. X soll den Wert 240 und Y 120 sein. Das sind die einzigen Vorgaben.

Danke im Voraus für eure Hilfe.

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

Christian S. 17. Mai 2003 09:38

1. Irgendwie fehlt in den Formeln ein Radius, oder?
2. wi ist immer das Gleiche (daher wohl auch der Strich) und außerdem noch in Grad. sin und cos erwarten einen rad-Wert.

MfG,
Peter

Delphi-lerner 17. Mai 2003 09:51

und was müsste ich da jetzt verändern??

Christian S. 17. Mai 2003 09:57

So sollte es gehen:
Delphi-Quellcode:
procedure erdbahn(x0,y0,r: integer);
var grad,x,y: integer;
    phi: real;
begin
  for grad:=0 to 359 do
  begin
    phi:=180/Pi*grad;
    x:=round(r*cos(phi))+x0;
    y:=round(r*sin(phi))+y0;
    form1.Canvas.Pixels[x,y]:=clgreen;
  end;
end;
x0 und y0 sind dabei der Mittelpunkt der Kreisbahn und r der Radius. Der Rest sollte klar sein.

MfG,
Peter

//Edit: Du könntest vielleicht noch einen Parameter "Canvas" einführen, bei dem Du angibst, wo Du zeichen möchtest. Dann wäre es nicht auf Form1.Canvas beschränkt.

Delphi-lerner 17. Mai 2003 10:11

danke für die hilfe....jedoch soll es in form1 gezeichnet werden

Christian S. 17. Mai 2003 10:20

Mir ist noch was eingefallen: Du solltest Dir überlegen, ob Du "grad" nicht als Realwert deklarierst und in einer while-Schleife in kleineren Schritten erhöhst. Eine Genauigkeit von 1° (wie sie ja jetzt da steht) wird bei größeren Kreisen keine durchgezogene Linie mehr ergeben!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.

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