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.