![]() |
Re: Schnittpunkt Linie vs. Kreis
Zitat:
|
Re: Schnittpunkt Linie vs. Kreis
Oder man hat mal was in Mathe von Analytik gehört und löst das Problem über Vektoren.
k: [vx-vm]²=r² g: vx=vn+s*va mit vm.. Ortsvektor des Kreismittelpunktes vn.. Stützvektor der Geraden va.. Richtungsvektor der Geraden 1. Gleichsetzten der beiden Gleichungen 2. Umformen nach s (ensteht quadratische Gleichung, maximal 2 Werte oder auch keine Lösung falls Wurzelwert<0) 3. Einsetzen von s in g bringt die Ortsvektoren der Punkte |
Re: Schnittpunkt Linie vs. Kreis
Zitat:
Zitat:
|
Re: Schnittpunkt Linie vs. Kreis
Jep, Analytik ist Chemie. :mrgreen:
(Der Ansatz über Vektoren führt aber im Endeffekt auch zum gleichen Ergebnis) (Und wenn mans ganz genau nimmt, sind reelle Zahlen auch Vektoren, von daher ist der ursprüngliche Ansatz auch über Vektoren :lol: ) |
Re: Schnittpunkt Linie vs. Kreis
1. Analytik war bei uns immer kurzform von Analytische Geometrie.
2. Entweder die Form k: [vx-vm]²=r² oder die k: |vx-vm|=r. Deine wäre falsch |
Re: Schnittpunkt Linie vs. Kreis
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
m:= 1e99 würde zwar das Problem lösen, ist aber nicht eingebbar. Gerade mit Punkt und Steigung war zwar das Einfachste, ist aber ein Fehlgriff. Ich habe das Programm abgeändert auf Gerade durch zwei Punkte. |
Re: Schnittpunkt Linie vs. Kreis
Naja, bei einer senkrechten Gerade/Strecke ist der Fall doch trivial.
Es sei eine Strecke/Gerade [P1P2]/P1P2 gegeben durch die Punkte P1(x1|y1), P2(x2,y2) und ein Kreis k(M,r) mit dem Mittelpunkt M(xm,ym). Es gelte x1=x2.
Delphi-Quellcode:
Die Schnittpunkte werden in result zurückgegeben.
dx := x1-xm;
disc := r*r-dx*dx; if disc > 0 then begin setlength(result, 2); result[0].X := x1; result[0].Y := ym + sqrt(disc); result[1].X := x1; result[2].Y := ym - sqrt(disc); end else if disc = 0 then begin setlength(result, 1); result[0].X := x1; result[0].Y := ym; end; (Bei einer Strecke muss man noch überprüfen, ob die gefundenen Schnittpunkte auch wirklich zwischen P1 und P2 liegen, da reicht die Überprüfung ((resultY <= y1) and (resultY >=y2)) or ((resultY >= <1) and (resultY <= y2)) ) Ich habe bisher alle Probleme dieser Art (z.B. Billardsimulation, Dreiecksaufgabe beim BWINF) so gelöst (Betrachtung als Funktion für x1!=x2, ansonsten Sonderfallbehandlung als senkrechte Gerade) und es funktioniert prima. |
AW: Re: Schnittpunkt Linie vs. Kreis
Ich grab mal diesen uralten Beitrag für eine Korrektur aus, da das einer der führenden Treffer in der Suche ist bei passenden Stichworten.
Zitat:
Ja, das funktioniert allerdings nicht ganz. Hab jetzt doch selbst gerechnet und möchte das hier eben anmerken: Das Problem liegt in diesen Zeilen:
Delphi-Quellcode:
|V| soll wohl die quadrierte euklidische Norm sein, also V.x*V.x + V.y*V.y
p := U*V;
q := U^2 - r^2; d := p^2 - q; d := sqrt(d / |V|); Das ist elegant geschrieben, denn die Terme tauchen in der Rechnung wirklich als Nenner bei sowohl p als auch q auf. So wie es hier geschrieben ist wird |V| aber nicht mit quadriert bei der Berechnung von "p*p - q". Außerdem müsste auch die Berechnung von x1 bzw. x2 dadurch falsch sein, wenn |V|!=1.
Delphi-Quellcode:
Auf diese Lösung komme ich und das wirft auch ganz andere (und erwartete) Ergebnisse in meinem Programm.
p := U*V / |V|;
q := (U^2 - r^2) / |V|; d := p^2 - q; d := sqrt(d); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz