# Calculating the x, y coordinate a set distance between two points

I'm trying to calculate the x and y coordinates that are a set distance between the coordinates of two pixels in an image.

For example, if I travel from my original location (x1=4, y1=3) to a new location (x2=4, y2=11), it is pretty straight-forward to calculate that these points are 8 pixels apart:

import math
x_dist = (x2 - x1)
y_dist = (y2 - y1)
distance = math.sqrt(x_dist * x_dist + y_dist * y_dist)


However, I'm having difficulty working out the coordinate that is 2 pixels along this path. I know that in this case the answer should be x=4, y=5, however I can't seem to work out how to do this. Most of the equations I've looked at on interpolation require you to know x or the y coordinate you're searching for, and finding the midpoint coordinate doesn't help much either.

EDIT Thank-you Arpan for your amazing help, this is how I've implemented your suggestion in Python. I've also calculated the midpoint to check that the answer was corect:

import math

def calc_distance(x1, y1, x2, y2):
x_dist = (x2 - x1)
y_dist = (y2 - y1)
return math.sqrt(x_dist * x_dist + y_dist * y_dist)

x1, y1, x2, y2 = 0, 3, 2, 11

distance = calc_distance(x1,y1,x2,y2)
first_point_dist = distance / 2

mid_x, mid_y = (x1 + x2) / 2, (y1 + y2) / 2

x_diff = x2 - x1
y_diff = y2 - y1
if x_diff == 0:
new_x = x1
if y_diff > 0:
new_y =  y1 + dist_to_point
else:
new_y =  y1 - dist_to_point
elif y_diff == 0:
new_y = y1
if x_diff > 0:
new_x = x1 + dist_to_point
else:
new_x = x1 - dist_to_point
else:
tan_angle = y_diff / x_diff
angle = math.atan(tan_angle)
new_x = round(x1 + first_point_dist * math.cos(angle))
new_y = round(y1 + first_point_dist * math.sin(angle))

print(new_x, new_y, mid_x, mid_y, distance)


Final Edit I just realised that the angle had to be in radians, NOT degrees, I was converting it to degrees but ending up with strange answers, that has been modified now and seems to be working well. Thanks for all the help!

Final Final Edit Forgot to check if the points on the same x or y axis were positive or negative.

• It would be better to calculate the square of the distance. That way, you wouldn't have to invoke the (computationally expensive) routine "sqrt". – John Joy Apr 21 '15 at 12:50
• I tried that with one of my other programs written in C++ and didn't notice that much of a difference in speed, but then I think the main bottleneck in the video was reading in and creating image matrices from 4K video. It might be worth trying again to see if I get a bit of a speed up. – Jack Simpson Apr 22 '15 at 1:16

Given your initial point $(x_0,y_0)$ and another point of the line $(x_1,y_1)$, you can write the slope of line as $$\tan\theta=\frac{y_1-y_0}{x_1-x_0}$$
For a point $(x,y)$ at a distance $r$ along the line from $(x_0,y_0)$, $$x=x_0+r\cos\theta,y=y_0+r\sin\theta$$ Where $\tan\theta$ is the slope as above.