Line-Segment-Kreis-Schnittpunkt
Ich versuche, den Punkt zu ermitteln, an dem ein Liniensegment schneiden Sie einen Kreis. Zum Beispiel wird bei einem beliebigen Punkt zwischen P0 und P3 (Und auch vorausgesetzt, dass Sie wissen, den radius), was ist die einfachste Methode, um zu bestimmen, P3?
InformationsquelleAutor dtuckernet | 2011-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie ein system von Gleichungen. Der Kreis ist definiert durch:
x^2 + y^2 = r^2
. Die Linie ist definiert durchy = y0 + [(y1 - y0) /(x1 - x0)]·(x - x0)
. Ersatz der zweiten in die erste erhalten Siex^2 + (y0 + [(y1 - y0) /(x1 - x0)]·(x - x0))^2 = r^2
. Lösen Sie diese und Sie erhalten von 0-2 Werte für x ein. Stecken Sie Sie zurück in jede Gleichung, um Ihre Werte für y.Der Abstand zwischen jedem Punkt und P1. Berechnen Sie das Quadrat der Entfernung von (x3-x1)^2 + (y3-y1)^2, je nachdem, welcher der kleinste ist, die näher an P1.
InformationsquelleAutor Shea Levy
In der Regel,
In pseudocode,
Diese Methode ist gut, aber die Umstrukturierung, die es zu nutzen rsqrt & normalen, statt atan2+cos+sin & Winkel, war das ticket für die Leistung für mich. Hoffe es hilft jemandem! 🙂
dies ist richtig, wenn p0 ist der Mittelpunkt des Kreises, wie die Zeichnung oben zeigt, aber die Frage scheint nicht zu sein, dass über
InformationsquelleAutor Greg Hewgill
Aus der Mitte des Kreises, und der radius können Sie schreiben die Gleichung beschreibt den Kreis.
Von die zwei Punkte P0 und P1 schreiben Sie die Gleichung beschreibt die Linie.
Also du hast 2 Gleichungen in 2 unbekannten, die Sie lösen durch substitution.
Wird die Gleichung für den Kreis:
Die Gleichung der Zeile ist:
Einstecken der 2. Gleichung in die erste ergibt sich:
Ebenso können Sie feststellen, dass
Den Punkt (x,y) ist der Schnittpunkt zwischen der Linie und dem Kreis, (x,y) ist Ihre Antwort.
InformationsquelleAutor Himadri Choudhury
Gehen für diesen code..sparen sich die Zeit
das gerade gibt einen booleschen Wert zurück, der sagt, WENN es eine Kreuzung, spielt es keine Rückkehr der Kreuzung selbst
InformationsquelleAutor Tofeeq
MATLAB-CODE
Funktion [ flag] = circleLineSegmentIntersection2(Ax, Ay, Bx, By, Cx, Cy, R)
Ende
InformationsquelleAutor Dinesh Dash