xD
Du willst ja die Schnittpunkte ausrechnen oder ? Ich zeig dir nur, wie es mathematisch möglich ist.
Wie weit du das in delphi implementierst ist dir überlassen
MfG
Weiter gehts:
Code:
k: (x-Mx)²+(y-My)² = r²
f(x) = y = kx + d
Konkretes Beispiel:
Mittelpunkt = ( 5 | 6 )
Radius = 5
f(x) = 2x + 3
--:
(x-5)²+(y-6)² = 25
x²-10x+25 + y²-12y+36 = 25
x²-10x + y²-12y = -36
--------------------------
x²-10x + y²-12y = -36
(2x+3)² -> 4x²+12x+9
-12*(2x+3) -> -24x-36
x²-10x + 4x²+12x+9 -24x-36 = -36
x²-10x -12x + 4x² + 9 =
0
5x² - 22x + 9 = 0 | / 5
x² - 4,4x + 1,8 = 0
( Quadratisch Gleichung auflösen: -p/2 +- SQRT( (-p/2)² - q ) | p = -4.4 q = 1.8 )
x1,2 = 2,2 +- SQRT( 4,84 - 1.8 )
x1 = 2.2 + 1,74 -> 3.94
x2 = 2.2 - 1,74 -> 0.46
Punkt1( 3.94 | y )
Punkt1( 0.46 | y )
y = 2x + 3 ->
Punkt1 y = 2*3.94 + 3 = 10.88
Punkt2 y = 2*0.46 + 3 = 3.92
Schnittpunkte
Punkt1( 3.94 | 10.88 )
Punkt2( 0.46 | 3.92 )
Graph (Kreis + F) im Anhang :)
EDIT:
Wohoo .. ich dacht mir du brauchst Hilfe - bin auf den Thread hier durch die Startseite gestoßen und habe nur deinen ersten Satz gelesen -> wusste damit nicht, dass es ein Vorschlag für die Code-Lib ist :S )
EDIT2:
Delphi-Quellcode:
type
TPointF = record
X, Y: Single;
end;
T2Points = Array[0..1] of TPointF;
...
function Intersection_Circle_Line( cRadius, cMX, cMY: Single; lKX: Single;
const lD: Single = 0.0 ): T2Points;
{
CIRCLE:
cRadius = Radius of the circle
cMX / cMY = Center Coordinates
LINE:
lKX = INCREASE
lD = Intersection with y-axis
}
var
xX, X,
C, T: Single;
begin
xX := 1 + lKX * lKX;
X := -cMX*2 + lKX*lD*2 + (-cMY*2)*lKX;
C := cMX*cMX + lD*lD + (-cMY*2)*lD + cMY*cMY - cRadius*cRadius;
if xX > 1 then
begin
X := X / xX;
C := C / xX;
end;
if (X*X/4) < C then
Exit;
t := SQRT( X*X/4 - C );;
Result[0].X := -X/2 + t;
Result[0].Y := lKX * Result[0].X + lD;
Result[1].X := -X/2 - t;
Result[1].Y := lKX * Result[1].X + lD;
end;
Mir war langweilig