2016-12-14 64 views
0

我有2點,(x0,y0)(x1,y1)形成一條線L.我找到了斜率M. 現在我想要在這兩個位於L之間的點之間找到3點,即在它們之間的精確距離內,這意味着所有點之間的距離相同。 如果我用「 - 」字符測量距離,它可以是這樣的: p1 --- p2 --- p3 --- p4 --- p5其中p1和p5是我的起點。尋找積分在2點之間的線段,在精確的線段,python

首先,我想過做這樣的事發現斜率:

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

這麼簡單,因爲它得到沒有問題:

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]) 

而且它也適用於水平或垂直線

+0

完美,完全是我一直在尋找的解決方案類型。謝謝!! – Sharonica

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爲常數)

+0

謝謝你,這個答案因子評分我對思維過程,但接受的答案居然是我一直在尋找魔術。 – Sharonica

+0

不客氣。我不擅長魔法! – marcoresk