找到位于两点之间直线上的点,在准确的段中,python
finding points that reside on a line between 2 points, in accurate segments, python
我有 2 个点,(x0,y0) (x1,y1) 形成一条直线 L。我找到了斜率 M。
现在我想在位于 L 上的这 2 个点之间找到 3 个点,即它们之间的精确距离,这意味着所有点之间的距离相同。
如果我用“-”字符测量距离,它可能是这样的:
p1---p2---p3---p4---p5 其中 p1 和 p5 是我的起点。
首先我想通过做这样的事情来找到斜率:
def findSlope(p1, p2):
if (p1[0] - p2[0] != 0):
return (p1[1] - p2[1])/p1[0] - p2[0]
else:
return 0
这很容易,但获得实际分数对我来说并不容易。
我考虑过做这样的事情:
def findThreePoints(p1,p2):
slope = findSlope(p1,p2)
c = p1[1] - slope*p1[0]
x1 = (p1[0] + p2[0])/4
x2 = (p1[0] + p2[0])/2
x3 = (3*(p1[0] + p2[0]))/4
y1 = slope*x1 + c
y2 = slope*x2 + c
y3 = slope*x3 + c
虽然这种方法可行,但编码不是很好 style/efficiency,因为如果我希望函数给出超过 3 个点,我将需要更长的时间。
是否有任何内置方法可以使用 Numpy 执行此操作,或者只是一种更有效的方法,不会使我的代码看起来像是仅为特定目的而编写的?
如果直线方程是
y = m*x + q
为什么不使用 FOR 循环?
类似于:
import numpy
#define n in the code or by input
n = 100
#define the x and y arrays with numpy.array
x = numpy.zeros(n)
y = numpy.zeros(n)
#define the start, stop values in your code or by input
start = 1
stop = 10
#define the step, depending by n
step = (stop - start)/n #if you want n points
i = 0
for a in numpy.arange (start, stop, step):
x[i] = a
y[i] = m*a + q
i = i + 1 #there are better ways to do this
当然这对垂直线不起作用,但是为这些线找点是没有问题的(x是常数)
越简单越好:
import numpy as np
#create the points
number_of_points=3
xs=np.linspace(x0,x1,number_of_points+2)
ys=np.linspace(y0,y1,number_of_points+2)
#print them
for i in range(len(xs)):
print (xs[i],ys[i])
它也适用于水平或垂直线
我有 2 个点,(x0,y0) (x1,y1) 形成一条直线 L。我找到了斜率 M。 现在我想在位于 L 上的这 2 个点之间找到 3 个点,即它们之间的精确距离,这意味着所有点之间的距离相同。 如果我用“-”字符测量距离,它可能是这样的: p1---p2---p3---p4---p5 其中 p1 和 p5 是我的起点。
首先我想通过做这样的事情来找到斜率:
def findSlope(p1, p2):
if (p1[0] - p2[0] != 0):
return (p1[1] - p2[1])/p1[0] - p2[0]
else:
return 0
这很容易,但获得实际分数对我来说并不容易。 我考虑过做这样的事情:
def findThreePoints(p1,p2):
slope = findSlope(p1,p2)
c = p1[1] - slope*p1[0]
x1 = (p1[0] + p2[0])/4
x2 = (p1[0] + p2[0])/2
x3 = (3*(p1[0] + p2[0]))/4
y1 = slope*x1 + c
y2 = slope*x2 + c
y3 = slope*x3 + c
虽然这种方法可行,但编码不是很好 style/efficiency,因为如果我希望函数给出超过 3 个点,我将需要更长的时间。
是否有任何内置方法可以使用 Numpy 执行此操作,或者只是一种更有效的方法,不会使我的代码看起来像是仅为特定目的而编写的?
如果直线方程是
y = m*x + q
为什么不使用 FOR 循环? 类似于:
import numpy
#define n in the code or by input
n = 100
#define the x and y arrays with numpy.array
x = numpy.zeros(n)
y = numpy.zeros(n)
#define the start, stop values in your code or by input
start = 1
stop = 10
#define the step, depending by n
step = (stop - start)/n #if you want n points
i = 0
for a in numpy.arange (start, stop, step):
x[i] = a
y[i] = m*a + q
i = i + 1 #there are better ways to do this
当然这对垂直线不起作用,但是为这些线找点是没有问题的(x是常数)
越简单越好:
import numpy as np
#create the points
number_of_points=3
xs=np.linspace(x0,x1,number_of_points+2)
ys=np.linspace(y0,y1,number_of_points+2)
#print them
for i in range(len(xs)):
print (xs[i],ys[i])
它也适用于水平或垂直线