Finden Sie die kürzeste Entfernung zwischen einem Punkt und die Liniensegmente (nicht line)
Ich haben eine Menge der Liniensegmente (nicht Linien), (A1, B1)
, (A2, B2)
, (A3, B3)
, wo A
,B
sind die Endpunkte des Liniensegments. Jeder A
und B
hat (x,y)
Koordinaten.
FRAGE:
Ich muss wissen, die kürzeste Entfernung zwischen point O
und line segments
wie gezeigt, in der gezeigt Abbildung umgesetzt Zeile des codes. Der code, den ich wirklich nachvollziehen kann, ist entweder pseudo-code oder Python.
CODE: ich habe versucht, das problem zu lösen mit diesem code, leider funktioniert es nicht richtig.
def dist(A, B, O):
A_ = complex(*A)
B_ = complex(*B)
O_= complex(*O)
OA = O_ - A_
OB = O_ - B_
return min(OA, OB)
# coordinates are given
A1, B1 = [1, 8], [6,4]
A2, B2 = [3,1], [5,2]
A3, B3 = [2,3], [2, 1]
O = [2, 5]
A = [A1, A2, A3]
B = [B1, B2, B3]
print [ dist(i, j, O) for i, j in zip(A, B)]
Vielen Dank im Voraus.
- Bitte posten Sie, was Sie bisher ausprobiert haben.
- Ich habe einige codes, die ich ausprobiert habe um das problem zu lösen. Was würden Sie denken ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grundlegende Algorithmus: behaupten Sie, dass Sie Linien haben, so orientiert, dass
A
liegt Links vonB
.Finden nächsten Punkt als normal. Wenn der Punkt zwischen
A
undB
haben, sind Sie fertig. Wenn es Links vonA
, der nächste Punkt istA
. Wenn der Punkt rechts vonB
, der nächste Punkt istB
.Dann der Fall, wenn
A
,B
, undO
alle liegen auf der gleichen Linie kann oder kann nicht die Besondere Aufmerksamkeit erfordern. Werden Sie sicher, dass Sie ein paar tests dieser position.preferably Python
). Können Sie mir einen Aufzug?N
liegt zwischen zwei anderen PunktenA
undB
jede KoordinateN
liegt zwischen den entsprechenden KoordinatenA
undB
. Wenn der nächste Punkt nicht zwischenA
undB
sind, können Sie einfach berechnen (Quadrate) Entfernungen Formular PunktO
zuA
, dannB
, und wählen Sie die kürzeste ist.Die Erklärung ist in den docstring der Funktion:
Hier ist die Antwort. Dieser code gehört zu Malcolm Kesson, die Quelle ist hier. Sofern ich es vorher mit nur link selbst, und es war gelöscht durch moderator. Ich gehe davon aus, dass der Grund dafür ist nicht zu erbringen, den code (als Antwort).
Auf meiner Seite, ich habe festgestellt, dass die beiden anderen Antworten waren kaputt, vor allem, wenn Sie die Zeile rein vertikale oder horizontale. Hier ist, was ich Tat, um das problem richtig lösen.
Python-code:
Ein test-Fall:
Hinweis: ich nehme an, diese Funktion ist in einem
Segment
Klasse.Im Fall, dass Ihre Linie ist unendlich, nicht die Grenze
lerp
von 0 bis 1 nur, aber immer noch wenigstens zwei unterschiedlichea
undb
Punkte.Hatte ich dieses problem zu lösen, so dass aus Gründen der Verfügbarkeit poste ich meinen code hier. Ich habe einige oberflächliche überprüfung, aber nichts besonders ernstes. Deine Frage tatsächlich geholfen, mich zu identifizieren, ein bug in der mine, wo eine vertikale oder horizontale Linie segment hätte den code gebrochen und umgangen, wird der Schnittpunkt auf segment-Logik.