找到位于两点之间直线上的点,在准确的段中,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])

它也适用于水平或垂直线