Hi, schreibe gerade an einem Programm das mir erlaubt verschiedene Ellipsenbahn mit Hilfe von Shapes darstellen zu lassen. Hänge jetzt jedoch an einem evtl. sehr kleinem Problem, doch ich find dafür einfach keine Lösung deswegen lass ich euch mal ran
. Das Programm läuft wie folgt ab:
- ich erstelle ein Shape und stelle die benötigten Werte ein damit daraus eine Ellipsenbahn berechnet werden kann -> alles klappt so wie ich es will
- ich erstelle das nächste Shape, und zack werden alle Ellipsenbahnen um ca. die Hälfte verkleinert, das geht immer weiter je mehr Bahnen berechnet werden müssen
Ich poste mal nur die stellen des Quelltextes wo der Wurm drin sein muss
Delphi-Quellcode:
var
Form1: TForm1;
Ellipsenbahn :TEllipsenbahn;
Ellipsenbahn2: TEllipsenbahn;
x,y,a,b: array of integer;
procedure TForm1.Timer1Timer(Sender: TObject);
var
anfang : Integer;
begin
for anfang := 0 to i do
begin
Ellipsenbahn.get_Werte(IntToStr(a[anfang]),intToStr(b[anfang]),IntToStr(x[anfang]),IntToStr(y[anfang]),FloatToStr(i));
Ellipsenbahn.berechne_bahn(x[anfang],y[anfang]);
with TShape(FindComponent(NamePrefix + IntToStr(Anfang))) do
begin
Left := x[Anfang];
Top := y[Anfang];
end;
end;
end;
In den jeweiligen Arrays sind halt die zuvor selbst eingetragenen Werte (Startposition und länge der Achsen)
Hier nochmal zwei Auszüge aus der Fachklasse, wobei diese eigentlich nicht für das Problem verantwortlichs ein sollte, oder ?
Delphi-Quellcode:
procedure TEllipsenBahn.get_Werte(a,b,x,y,i:string);
begin
a1 := a;
b1 := b;
xStart := x;
yStart := y;
multiplikator := i;
end;
procedure TEllipsenBahn.berechne_bahn(var ox,oy:Integer);
begin
TGradmass := TGradmass +1;
TBogenmass := (TGradmass/180) *(2* pi);
xStart := FloatToStr(ox);
yStart := FloatToStr(oy);
oy := round(StrToFloat(yStart) + StrToFloat(b1)*(cos(TBogenmass)/5)) ;
ox := round(StrToFloat(xStart) + StrToFloat(a1)*(sin(TBogenmass)/5)) ;
if TGradmass = 360 then TGradmass := 0;
end;