2016-12-14 14 views
0

У меня есть 2 точки (x0, y0) (x1, y1), которые образуют линию L. Я нашел наклон M. Теперь я хочу найти 3 точки между этими двумя точками, которые находятся на L, то есть между ними на точной дистанции, что означает такое же расстояние между всеми точками. Если я измеряю расстояние с помощью символа «-», это может быть примерно так: p1 --- p2 --- p3 --- p4 --- p5 где p1 и p5 являются моими отправными точками.точки нахождения, находящиеся на линии между двумя точками, в точном сегменте, 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 

почему бы не использовать для цикла? Что-то вроде:

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 

Конечно, это не работает для вертикальных линий, но нет никаких проблем в поиске точек для этих линий (х постоянна)

+0

Спасибо, это ответ учил меня о процессе мышления, но принятый ответ на самом деле магия Я искал , – Sharonica

+0

Добро пожаловать. Я не так хорош в магии! – marcoresk