Reputation: 5183
Doing some 3D stuff in wpf- want to use a simpler test to see if everything is working (before moving to curves).
The basic question is given two points x1,y1,z1 and x2,y2,z2 I have calculated the distance between the points. But how to find the coordinates of another point (x3,y3,z3) that lies on that line at some distance?
I.e. if my line is 100 long between -50,0,0 and 50,0,0 what are the coordinates of the point at 100 * 0.1 along the line?
I think this is a simple formula but I haven't found it yet....
Upvotes: 9
Views: 18253
Reputation: 9365
This has to do with math, but ok. Let P
and Q
be the two given points and X
the point you're looking for.
P + r(Q - P) = X
r indicates a factor.
if 0 < r < 1
: the point x will be on the line between the two points.
That's it!
EDIT:
To find a point at a given distance d from P(p1/p2/p3):
d² / euclidian_square_distance(P,Q) = r
Insert r in the equation mentioned above and you'll have your point! :)
P.S: Btw: P-Q = (Px - Qx, Py - Qy, Pz - Qz)
... i bet you alread knew it :)
Upvotes: 7
Reputation: 2840
a line joining the points in 3d is given by equation:
(x - x1)/(x2 - x1) = (y - y1)/(y2 - y1) = (z - z1)/(z2 - z1)
You have the values of x1,y1,z1,x2,y2,z2. This will give you an equation for the line.
another equation would be
((x-x1)^2+(y-y1)^2+(z-z1)^2)^(1/2)=distance
Solve the 2 equations to get the value of the points.
Upvotes: 0
Reputation: 8117
Let t
vary from 0 to 1. Use the following:
(x3, y3, z3) = (1-t)*(x1, y1, z1) + t*(x2, y2, z2)
When t=0 you get the first point. When t=1 you get the second.
This method is called linear interpolation.
Upvotes: 1
Reputation: 838836
For each p between 0 and 1 then this will give you a point on the line segment:
(x1, y1, z1) + p * ((x2, y2, z2) - (x1, y1, z1))
Upvotes: 15