Schnittpunkt von Vektor- und Dreiecksseite


7

Ich versuche, eine dreieckige Berührungsfläche für iOS zu erstellen, auf der der Benutzer einen Punkt innerhalb dieses Dreiecks ziehen kann. Anhand der Informationen auf dieser Seite können Sie leicht herausfinden, ob sich der gezogene Punkt innerhalb oder außerhalb des Dreiecks befindet. Ich möchte den Punkt jedoch an den Dreieckskanten abschneiden, wenn der Benutzer außerhalb des Dreiecks zieht.

Dies ist für Seite AB und Seite AC einfach , da ich nur die Vektoren u oder v auf Null setzen muss, wenn der Finger des Benutzers außerhalb dieser Kanten zieht. Ich bin mir jedoch nicht sicher, wie ich Punkt p auf Seite BC finden soll. Ich muss diesen Schnittpunkt finden, wenn der Benutzer seinen Finger außerhalb der Kante BC zieht .

Dreieck mit Punkt- und Vektorbezeichnungen


Nehmen Sie einfach die skalare Projektion des Vektors (B (u + v)) auf den Vektor (BC) mit dem Punktprodukt und dividieren Sie diese durch die quadratische Länge von BC.
Martijn Courteaux

Antworten:


2

Alle Punkte am Rand BC haben die Eigenschaft | u | + | v | = 1. Wenn Sie die Größe des längeren Vektors so reduzieren, dass diese Eigenschaft wahr ist, erhalten Sie Ihren Schnittpunkt. In Ihrem Bild würde dies bedeuten, die Größe von v um 0,245764829343853 zu reduzieren. Dies funktioniert nur, wenn Ihre Linie von A zum Finger BC kreuzt.


1
Um es näher zu erläutern: Wenn Sie u + v> 1 erkennen, skalieren Sie die (u, v) -Werte um 1 / (u + v); Dadurch wird der u + v-Vektor verkürzt, sodass er direkt am Rand landet.
Nathan Reed

1

Angenommen, Sie haben Koordinaten für A, B und C (die wir Axe, Ay usw. nennen) und D = u + v, dann ist der Schnittpunkt:

X = ((Bx - Cx) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ax - Dx))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy))

Y = ((By - Cy) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ay - Dy))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy))

Siehe auch Wikipedia-Artikel über Linien-Linien-Schnittpunkte .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.