两点之间的等距点?
Equidistant points between two points?
我想知道两点之间的等距点。
例如:
p1 = (1,1)
p2 = (5,5)
我期待的答案是:
def getEquidistantPoints(p1, p2, HowManyParts):
#some code
return (array with points)
在此示例中,使用 p1
和 p2
:
A = getEquidistantPoints(p1,p2,4)
A = [(1,1),(2,2),(3,3),(4,4),(5,5)]
永远是一条直线。
HowManyParts
在这种情况下是被划分的整个距离
类似于 numpy.linspace()
但在二维空间中。
纯Python
解决方案使用linear
interpolation
:
首先创建一个linear interpolation
函数:
def lerp(v0, v1, i):
return v0 + i * (v1 - v0)
然后将其用于 interpolate
在 x
和 y
坐标之间:
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)]
并根据您的价值观进行测试:
>>> 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)]
由于连接两点的线的线性,您可以简单地对每个维度独立使用numpy.linspace
:
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))
例如:
>>> 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)]
最简单的方法是使用可迭代对象(元组、列表等)。指定 start
和 end
参数 numpy.linspace
:
p1 = (1,1)
p2 = (5,5)
HowManyParts = 4
A = np.linspace(p1, p2, HowManyParts+1)
print(A)
输出:
array([[1., 1.],
[2., 2.],
[3., 3.],
[4., 4.],
[5., 5.]])
您也可以使用复数:
p1 = 1+1j
p2 = 5+5j
HowManyParts = 4
A = np.linspace(p1, p2, HowManyParts+1)
A = np.stack((A.real,A.imag), axis=1)
print(A)
输出:
array([[1., 1.],
[2., 2.],
[3., 3.],
[4., 4.],
[5., 5.]])
我想知道两点之间的等距点。 例如:
p1 = (1,1)
p2 = (5,5)
我期待的答案是:
def getEquidistantPoints(p1, p2, HowManyParts):
#some code
return (array with points)
在此示例中,使用 p1
和 p2
:
A = getEquidistantPoints(p1,p2,4)
A = [(1,1),(2,2),(3,3),(4,4),(5,5)]
永远是一条直线。
HowManyParts
在这种情况下是被划分的整个距离
类似于 numpy.linspace()
但在二维空间中。
纯Python
解决方案使用linear
interpolation
:
首先创建一个linear interpolation
函数:
def lerp(v0, v1, i):
return v0 + i * (v1 - v0)
然后将其用于 interpolate
在 x
和 y
坐标之间:
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)]
并根据您的价值观进行测试:
>>> 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)]
由于连接两点的线的线性,您可以简单地对每个维度独立使用numpy.linspace
:
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))
例如:
>>> 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)]
最简单的方法是使用可迭代对象(元组、列表等)。指定 start
和 end
参数 numpy.linspace
:
p1 = (1,1)
p2 = (5,5)
HowManyParts = 4
A = np.linspace(p1, p2, HowManyParts+1)
print(A)
输出:
array([[1., 1.],
[2., 2.],
[3., 3.],
[4., 4.],
[5., 5.]])
您也可以使用复数:
p1 = 1+1j
p2 = 5+5j
HowManyParts = 4
A = np.linspace(p1, p2, HowManyParts+1)
A = np.stack((A.real,A.imag), axis=1)
print(A)
输出:
array([[1., 1.],
[2., 2.],
[3., 3.],
[4., 4.],
[5., 5.]])