找到位于2点之间的线上的点,精确的段,python

时间:2016-12-14 08:31:15

标签: python line points

我有2个点,(x0,y0)(x1,y1)形成一条直线L.我找到了斜率M. 现在我想找到位于L上的这两个点之间的3个点,即它们之间的准确距离,意味着所有点之间的距离相同。 如果我用" - "来测量距离。 char,它可以是这样的: 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

虽然这种方法有效,但编码风格/效率并不是很好,因为如果我希望函数提供超过3个点,我需要更长的时间。

是否有任何内置方法可以使用Numpy执行此操作,或者只是采用更有效的方法解决此问题,这不会使我的代码看起来只是出于某种目的而编写的?

2 个答案:

答案 0 :(得分:4)

尽可能简单:

biggestVar = 'E'

它也适用于水平或垂直线

答案 1 :(得分:1)

如果一行的等式是

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是常数)