I am trying to know equidistant points between two points. For example:
p1 = (1,1)
p2 = (5,5)
The answer that I am expecting is:
def getEquidistantPoints(p1, p2, HowManyParts):
#some code
return (array with points)
In this example, with p1, and p2:
A = getEquidistantPoints(p1,p2,4)
A = [(1,1),(2,2),(3,3),(4,4),(5,5)]
Always will be a straight line.
HowManyParts in this case is the whole distance that is divided
something like numpy.linspace() but in two dimensions.
Thanks to linearity of the line connecting two points, you can simply use numpy.linspace for each dimension independently:
import numpy
def getEquidistantPoints(p1, p2, parts):
return zip(numpy.linspace(p1[0], p2[0], parts+1),
numpy.linspace(p1[1], p2[1], parts+1))
For example:
>>> list(getEquidistantPoints((1,1), (5,5), 4))
>>> [(1.0, 1.0), (2.0, 2.0), (3.0, 3.0), (4.0, 4.0), (5.0, 5.0)]
A pure Python solution using linear interpolation:
First create a linear interpolation function:
def lerp(v0, v1, i):
return v0 + i * (v1 - v0)
and then just use this to interpolate between the x and y coordinates:
def getEquidistantPoints(p1, p2, n):
return [(lerp(p1[0],p2[0],1./n*i), lerp(p1[1],p2[1],1./n*i)) for i in range(n+1)]
and a test with your values:
>>> getEquidistantPoints((1,1), (5,5), 4)
[(1.0, 1.0), (2.0, 2.0), (3.0, 3.0), (4.0, 4.0), (5.0, 5.0)]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With