Wo finde ich den Punkt P n, wo die Normale zu AB durch den Punkt P geht? Ich muss auch wissen, ob es keine Norm gibt, die den Punkt passiert (z. B. der Punkt Q).Finde den Punkt entlang der Linie, wo die Normale durch einen anderen Punkt verläuft.
Antwort
Wenn R
irgendein Punkt auf der normalen Linie, die durch P
Passing (verschieden von P
) ist, dann ist der Punkt, wo Pn
AB
und PR
schneiden.
Eine Möglichkeit Punkt zu erzeugen ist R
Segment AB
um 90 Grad zu drehen und dann zu übersetzen, so dass A
mit P
zusammenfällt. Die Übersetzte B
ist Ihr R
:
Rx = Px + (By - Ay)
Ry = Py - (Bx - Ax)
Sobald Sie Ihren Punkt haben R
, wird es ein einfaches line-line intersection problem, die Ihnen Ihre Pn
(die Formeln kann für einen speziellen Fall von senkrechten Linien vereinfacht werden).
Dann können Sie einfach überprüfen, ob Pn
zwischen A
und B
liegt oder nicht.
P.S. Beachten Sie, dass die Lösung, die in @ MBos Antwort bereitgestellt wird, direkter und effizienter ist (und wenn Sie die Formeln kombinieren und vereinfachen/optimieren, die für meine Antwort erforderlich sind, werden Sie schließlich zu demselben Ergebnis kommen). Was ich oben beschrieben könnte sinnvoll sein, wenn Sie bereits eine primitive Funktion, die den Schnittpunkt zweier Linien berechnet, sagen wir,
find_intersection(Ax, Ay, Bx, By, Cx, Cy, Dx, Dy)
// Intersect AB and CD
In diesem Fall finden Pn
wird eine einfache Einzeiler
Pn = find_intersection(Ax, Ay, Bx, By, Px, Py, Px + (By - Ay), Py - (Bx - Ax))
Aber wenn Sie nicht über solch primitive Funktionen verfügen und/oder dafür sorgen, dass Ihr Code effizienter wird, dann sollten Sie sich für eine direktere Sequenz von Berechnungen entscheiden, wie die in @ MBos Antwort.
Suche Vektoren
AB = (B.X-A.X, B.Y-A.Y)
AP = (P.X-A.X, P.Y-A.Y)
Projektion von P zu AB ist:
APn = AB * (AB.dot.AP)/(AB.dot.AB);
wo .dot. Skalar Produkt
In Koordinaten:
cf = ((B.X-A.X)*(P.X-A.X)+(B.Y-A.Y)*(P.Y-A.Y))/((B.X-A.X)^2+(B.Y-A.Y)^2)
if cf < 0 or cf > 1 then projection lies outside AB segment
Pn.X = A.X + (B.X-A.X) * cf
Pn.Y = A.Y + (B.Y-A.Y) * cf
- 1. Verschieben und rotieren Linie um einen Punkt
- 2. Drehen Sie einen Punkt um einen anderen Punkt in 2D
- 3. Punkt auf Linie - Segment Entfernung von einem Punkt
- 4. Einen Punkt auf einer Linie finden
- 5. Wie berechne ich den Punkt entlang einer Kurve?
- 6. Punkt um einen anderen Punkt in Grad drehen python
- 7. einen Start- und Endpunkt gegeben, und ein Abstand, einen Punkt entlang einer Linie
- 8. Finde den Punkt, an dem die Summe der Abstände zu anderen Punkten minimal ist
- 9. Find Punkt entlang der Linie eine bestimmte Entfernung von einem Polygon
- 10. Punkt in einer Linie basierend auf dem 3. Punkt tangential zu dieser Linie suchen
- 11. Wie finde ich eine Schildkröte, die einen bestimmten Punkt oder eine Linie überschreitet?
- 12. den nächsten Punkt finden
- 13. Punkt ([Punkt] [Leerzeichen] [Dateiname])
- 14. Ersetzen, (Komma) durch. (Punkt) und. (Punkt) durch, (Komma)
- 15. R zeichne (abline + lm) Linie-der-beste Anpassung durch einen beliebigen Punkt
- 16. findet in einer Liste einen Punkt, der am nächsten zu einem anderen Punkt ist
- 17. Java: Punkt um einen anderen um den angegebenen Grad drehen
- 18. OpenGL dreht eine Kamera um einen Punkt
- 19. Berechnen Sie den Punkt auf einer Linie, wenn die Steigung bekannt ist
- 20. Wie hole ich einen Punkt von einer Linie ab?
- 21. Wie finde ich den Punkt NSInvalidArgumentException von NSArray?
- 22. Zeichnen Sie die Linie von Label zu Punkt in R
- 23. Chart.js Linie, unterschiedliche Füllfarbe für den negativen Punkt
- 24. Android Polyline - Hinzufügen Punkt für Punkt
- 25. Finden Sie den dritten Punkt
- 26. Bietet SSL Punkt-zu-Punkt-Sicherheit?
- 27. Den nächsten Punkt zu einem bestimmten Punkt finden
- 28. einen Punkt ändern, UnboundNameException
- 29. Wie finde ich einen Punkt in einem sortierten Array?
- 30. Wie finde ich einen Punkt innerhalb eines Polygons mit Racket
Sie 2 Antworten haben, egal zu akzeptieren? – gsamaras