2010-05-21 36 views
8

Einige 3D-Sachen in wpf- wollen einen einfacheren Test verwenden, um zu sehen, ob alles funktioniert (bevor man in Kurven übergeht).Koordinaten eines Punktes zwischen zwei Punkten finden?

Die grundlegende Frage ist zwei Punkte gegeben x1, y1, z1 und x2, y2, z2 Ich habe den Abstand zwischen den Punkten berechnet. Aber wie findet man die Koordinaten eines anderen Punktes (x3, y3, z3), der in einiger Entfernung auf dieser Linie liegt?

I.e. Wenn meine Linie 100 lang zwischen -50,0,0 und 50,0,0 ist, wie lauten die Koordinaten des Punktes bei 100 * 0,1 entlang der Linie?

Ich denke, das eine einfache Formel, aber ich habe es noch nicht gefunden ....

Antwort

12

Für jeden p zwischen 0 und 1, dann wird dies Ihnen auf dem Liniensegment einen Punkt geben:

(x1, y1, z1) + p * ((x2, y2, z2) - (x1, y1, z1)) 
+0

+1. Im Beispiel hat der Fragesteller einfach gegeben p = 0.1 und das lässt sich gut übersetzen. Gute Arbeit, es einfach zu halten. –

+1

Das war auch sehr nützlich! So, um für jeden meiner Punkte zu lösen, tat ich: x3 = x1 + p (x2-x1). Wiederholen Sie für y und z. – Nicros

6

Das hat mit Mathematik zu tun, aber ok. Lassen Sie P und Q die beiden angegebenen Punkte und X den Punkt, den Sie suchen.

P + r(Q - P) = X 

r gibt einen Faktor an.

wenn 0 < r < 1: der Punkt x wird auf der Linie zwischen den beiden Punkten sein.

Das war's!

EDIT:

Um einen Punkt in einem bestimmten Abstand d von P zu finden (P1/P2/P3):

d²/euclidian_square_distance(P,Q) = r 

Insert r in der Gleichung oben erwähnt, und Sie werden Ihre Punkte haben ! :)

PS: Btw: P-Q = (Px - Qx, Py - Qy, Pz - Qz) ... Ich wette, dass Sie es alread wussten :)

+0

Das war sehr hilfreich! – Nicros

+0

@Simon Sollte die Gleichung nicht X = P + r (Q-P) sein, erhalten wir jetzt, wenn wir r = 1 setzen, 2P-Q, was nicht korrekt ist. – kkk

+0

@kkk Vielen Dank. Siehe Bearbeiten – Simon

1

Lassen t von 0 bis 1. Verwenden Sie variieren die folgenden:

(x3, y3, z3) = (1-t)*(x1, y1, z1) + t*(x2, y2, z2)

Wenn t = 0 Sie den ersten Punkt. Wenn t = 1, erhalten Sie die zweite.

Diese Methode heißt linear interpolation.

+0

Können Sie anhand Ihrer Antwort beschreiben, wie Sie zwischengeordnete Koordinatenpunkte finden. –

0

eine Linie, die die Punkte in 3d Verbinden wird durch die Gleichung gegeben:

(x - x1)/(x2 - x1) = (y - y1)/(y2 - y1) = (z - z1)/(z2 - z1)

Sie haben die Werte von x1, y1, z1, x2, y2, z2. Dadurch erhalten Sie eine Gleichung für die Linie.

würde eine andere Gleichung

seine

((x-x1)^2 + (y-y1)^2 + (z-z1)^2)^(1/2) = Abstand

Lösen Sie die 2 Gleichungen, um den Wert der Punkte zu erhalten.

Verwandte Themen