Ok , ich hab nun meinen Physik-Lehrer gefragt und der hat mir folgende Lösung (siehe Anhang) gegeben, die ich so in Code umgesetzt habe :
Delphi-Quellcode:
type T2dvector = record
x,y : real;
end;
implementation
function Tchaos.MakeVector(X,Y : real) : T2dVector;
begin
result.x := x;
result.y := y;
end;
function Tchaos.Magnitude(Vector : T2dVector) : real;
begin
result := sqrt(Vector.X * Vector.X+
Vector.Y * Vector.Y);
end;
function Tchaos.DotProduct(VectorA,VectorB : T2dVector) : real;
begin
result := VectorA.X*VectorB.X+
VectorA.Y*VectorB.Y
end;
...
var
i,i2,i3 :integer;
vbuf,v1,v2 : T2dvector;
alpha,beta,gamma,delta,lengthv : real;
...
vbuf := makevector((chspr[i].x-chspr[i2].x),(chspr[i].y-chspr[i2].y) ) ;
alpha := dotproduct(chspr[i].v,vbuf);
beta := degtorad( 90-radtodeg(alpha));
gamma := arctan(chspr[i].v.x/chspr[i].v.y);
delta := beta + gamma;
lengthv := sin(alpha)*magnitude(chspr[i].v);
v1 := makevector((sin(delta)/lengthv),(cos(delta)/lengthv));
alpha := dotproduct(chspr[i2].v,vbuf);
beta := degtorad( 90-radtodeg(alpha));
gamma := arctan(chspr[i2].v.x/chspr[i2].v.y);
delta := beta + gamma;
lengthv := sin(alpha)*magnitude(chspr[i2].v);
v2 := makevector((sin(delta)/lengthv),(cos(delta)/lengthv));
chspr[i].v := v1;
chspr[i2].v := v2;
...
Nur leider geht das schon wieder nicht
Ich bin aber ziemlich sicher das der Fehler etwas damit zu tun hat das Delphi alles im Bogenmaß ausrechnet, aber ich komm nicht drauf wo der genau liegt.