Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Koordinatentransformation? (https://www.delphipraxis.net/71839-koordinatentransformation.html)

Jamez 21. Jun 2006 18:14


Koordinatentransformation?
 
Hallo!
Ich bin erst seit wenigen Tagen mit Delphi vertraut, und habe nun bei der Entwicklung eines Programmes ein Problem. Im Prinzip geht es darum, dass ich einen Kanonenschuss graphisch darstellen soll. die Oberfläche habe ich gestaltet und ich bekomme auch werte raus, wenn ich winkel und geschwindigkeit in edits eingebe. nun weiss ich aber nicht, wie ich die zwei werte in eine paintbox übertragen bekomme.es muss also, wenn ich auf berechnen klicke, die wert und zusätzlich eine kurv herauskommen???

Jarmen_Kell 21. Jun 2006 19:00

Re: Koordinatentransformation?
 
Nun, die Funktion wirst du ja sicherlich haben.

Also speicherst du dir einen x-Wert und lässt dir den dazugehörigen y-Wert ausrechnen. Beide speicherst du als TPoint zum Beispiel. Dann führst du
Box.Canvas.MoveTo(ObigeKoordinaten.X,PBox.Height-y);
aus. Daraufhin muss nur die nächste Koordinate berechnet werden (also x um einen möglichst kleinen Wert erhöht (z.B. 1px)) und dann
PBox.Canvas.LineTo(NeuesX,PBox.Height-NeuesY);


Nun musst du den LineTo-Befehl nur noch für alle weiteren Werte bis PBox.Width ausführen. Zu beachten ist, dass das Koordinatensystem eines Canvas _oben_ beginnt!

Deshalb nicht einfach den y-Wert nehmen ;)

Jamez 21. Jun 2006 19:06

Re: Koordinatentransformation?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, math, ExtCtrls;

type
TKanonenschusssimulator = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label3: TLabel;
Label4: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Button2: TButton;
Button3: TButton;
PaintBox1: TPaintBox;
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure oncreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Kanonenschusssimulator: TKanonenschusssimulator;

implementation

{$R *.dfm}

procedure TKanonenschusssimulator.Button1Click(Sender: TObject);
var v,P,g,x,y: double;
begin
// Eingabe von v und P
v:=StrToFloat (Edit1.Text);
P:=DegToRad(StrToFloat (Edit2.Text));
// Setzen der Werte von g und t
g:=9.81;
// Berechnung von x und y
y :=sqr(v*sin(P))/(2*g);
x :=sqr(v)*sin(2*P)/g;
// Ausgabe von x und y
Edit3.Text:=FloatToStrf(x,ffFixed,10,2);
Edit4.Text:=FloatToStrf(y,ffFixed,10,2);
end;

procedure TKanonenschusssimulator.Button3Click(Sender: TObject);
begin
close
end;

procedure TKanonenschusssimulator.Button2Click(Sender: TObject);
begin
edit1.text:='0';
edit2.text:='0';
edit3.text:='0';
edit4.text:='0';

end;

procedure TKanonenschusssimulator.oncreate(Sender: TObject);
begin
with Paintbox1.Canvas do
begin
Brush.Color:=clWhite;
Rectangle(0,0,Width,Height);
Pen.Width:=2; Pen.Color:=clBlack;
end;
end;
end



also das ist das was ich bis jetzt habe. ich weiss echt net richtig weiter. muss ich den befehl unter der paintbox weiter bearbeiten oder unter dem button, der die grafik aufrufen soll?
und wie mach ich denn die achsen in die paintbox?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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