Wie wärs mit Vektorrechnung? Hier mal eine Function die ich aufgrund eines Kollisionstest mal schrieb.
Vector ist eine Klasse die die Vektoroperationen beinhaltet.
Delphi-Quellcode:
TSphere=record
m :TVector;//Stützvektor, Kreismittelpunkt
a :TVector;//Geschwindigkeitsvektor
r :Single;//Kreisradius
end;
//..
function collision(k1,k2:TSphere):Single;
var a,b :TVector;
s,r,t:Single;
begin
with Vector do begin
a:=Sub(k1.m,k2.m);
b:=Sub(k1.a,k2.a);
r:=k1.r+k2.r;
t:=Skalar(b,b);
if t<>0 then begin
s:=sqr(Skalar(a,b)/t)-Skalar(a,a)/t+r*r/t;
if s>=0 then
s:=-Skalar(a,b)/t-sqrt(s)
else s:=0;
end else s:=0;
result:=s;
end;
end;
Der Rückgabewert der Funktion beinhaltet die Zeiteinheiten bis die Kreise kollidieren. Wenn sie nicht kollidieren s=0.