Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
Delphi 3 Professional
|
Re: Schnittpunkt Linie vs. Kreis
30. Apr 2009, 00:12
Da fand sich bei mir in AnwMath ein diesbezügliches Programm.
Delphi-Quellcode:
type
TPkt = record x, y: extended end;
// Kreis: M0 Mittelpunkt, r: Radius
// Gerade: P0 Punkt auf der Geraden, m: Steigung
// S1, S2: Schnittpunkte
// Der Funktioswert gibt mit 0..2 die Anzahl der Schnittpunkt zurück
function TForm1.Schnittpunkte(M0, P0: TPkt; r, m: extended;
var S1, S2: TPkt): integer;
var
n, a, d, p, q: extended;
begin
n:= P0.y - m*P0.x - M0.y;
a:= 1 + m*m;
p:= 2*(n*m - M0.x);
q:= M0.x*M0.x + n*n -r*r;
p:= p/a; q:= q/a; d:= p*p/4 - q;
if d>eps then begin // Diskriminante > 0, zwei Schnittpunkte
Result:= 2; d:= Sqrt(d); S1.x:= -p/2 - d; S2.x:= -p/2 + d;
S1.y:= P0.y + m*(S1.x-P0.x); S2.y:= P0.y + m*(S2.x-P0.x) end
else if d<-eps then Result:= 0 // Diskriminante < 0, kein Schnittpunk
else begin // Diskriminante = 0, Berührungspunkt
Result:= 1; S1.x:= -p/2; S1.y:= P0.y + m*(S1.x-P0.x);
S2.x:= S1.x; S2.y:= S1.y end;
end;
|
|
Zitat
|