Let's say you have two points, $(x_0, y_0)$ and $(x_1, y_1)$.
The gradient of the line between them is:
$$m = (y_1 - y_0)/(x_1 - x_0)$$
And therefore the equation of the line between them is:
$$y = m (x - x_0) + y_0$$
Now, since I want another point along this line, but a distance $d$ away from $(x_0, y_0)$, I will get an equation of a circle with radius $d$ with a center $(x_0, y_0)$ then find the point of intersection between the circle equation and the line equation.
Circle Equation w/ radius $d$:
$$(x - x_0)^2 + (y - y_0)^2 = d^2$$
Now, if I replace $y$ in the circle equation with $m(x - x_0) + y_0$ I get:
$$(x - x_0)^2 + m^2(x - x_0)^2 = d^2$$
I factor is out and simplify it and I get:
$$x = x_0 \pm d/ \sqrt{1 + m^2}$$
However, upon testing this equation out it seems that it does not work! Is there an obvious error that I have made in my theoretical side or have I just been fluffing up my calculations?
$\endgroup$ 76 Answers
$\begingroup$Another way, using vectors:
Let $\mathbf v = (x_1,y_1)-(x_0,y_0)$. Normalize this to $\mathbf u = \frac{\mathbf v}{||\mathbf v||}$.
The point along your line at a distance $d$ from $(x_0,y_0)$ is then $(x_0,y_0)+d\mathbf u$, if you want it in the direction of $(x_1,y_1)$, or $(x_0,y_0)-d\mathbf u$, if you want it in the opposite direction. One advantage of doing the calculation this way is that you won't run into a problem with division by zero in the case that $x_0 = x_1$.
$\endgroup$ 11 $\begingroup$Let me explain the answer in a simple way.
Start point - $(x_0, y_0)$
End point - $(x_1, y_1)$
We need to find a point $(x_t, y_t)$ at a distance $d_t$ from start point towards end point.
The distance between Start and End point is given by $d = \sqrt{(x_1-x_0)^2+(y_1-y_0)^2}$
Let the ratio of distances, $t=d_t/d$
Then the point $(x_t, y_t) =(((1-t)x_0+tx_1), ((1-t)y_0+ty_1))$
When $0<t<1$, the point is on the line.
When $t<0$, the point is outside the line near to $(x_0,y_0)$.
When $t>1$, the point is outside the line near to $(x_1,y_1)$.
$\endgroup$ 9 $\begingroup$You can very easily find it with trigonometry!!
Let's say Xa and Xb are the two points of your line, and D is the distance between them. And you are looking to find Xc which is D2 away from Xa (as the diagram bellow):
You can easily find D:
The formulas that you can find Xa, Xb, Xc, D and D2 are:
But SINa-b and SINa-c share the same the same corner, so they are equal:
Since you know the distance (D2) between Xa and Xc that you are looking for, you can easily solve the following:
In conclusion by solving the formula for D and the last one you are done. (You need one for the Y as well, just replace in the last one, X with Y )
Hope it helps!!
$\endgroup$ 5 $\begingroup$The easy way in rectangular coordinate systems is to use the vector formula
P = d(B - A) + A
where
A is the starting point (x0, y0) of the line segment
B is the end point (x1, y1)
d is the distance from starting point A to the desired collinear point
P is the desired collinear point
I think you need to check $x_0 > x_1$ when you try to calculate $x$ (last equation in your calculation) then you determine it will be $(+)$ or $(-)$ in your equation.
$\endgroup$ 1 $\begingroup$There is an other way to solve this problem.
The function $\rho:\mathbb R \to \mathbb R^2$ defined by
$$\rho(t) = (1-t)(x_0,y_0) + t(x_1,y_1)$$
describes the line through the points $(x_0,y_0)$ and $(x_1,y_1)$ with $\rho(0) = (x_0, y_0)$ and $\rho(1)=(x_1,y_1)$. If you let $$D = \sqrt{(x_1-x_0)^2 + (y_1-y_0)^2},$$ then it is fairly easy to show that
$$|\rho(t) - \rho(s)| = D|t-s|$$
So, if you want to find the points a distance of $d$ from $(x_0,y_0)$, then you need to solve $$d = |\rho(t) - \rho(0)| = D|t-0|$$
You get $ t = \pm \dfrac dD$. Hence the points are
$$\rho\left( \pm \dfrac dD \right) = \left\{ \begin{array}{c} \left( 1-\dfrac dD \right)(x_0,y_0) + \dfrac dD (x_1,y_1) \\ \left( 1+\dfrac dD \right)(x_0,y_0) - \dfrac dD (x_1,y_1) \end{array} \right.$$
$\endgroup$