2012-07-04 2 views
1

Если я знаю центр (x, y, z) дуги и диаметра, а также начальную и конечную точку, как я могу генерировать значения между началом и концом?Как создать дугу в numpy?

+0

Вы имеете в виду «сферу» или «круг»? 'ar' или' arc'? – nye17

+0

Жаль, что я имею в виду дугу. –

+0

центр - это начало сферы или просто середина дуги? – nye17

ответ

4

Похоже, что ваша «дуга» представляет собой круговое приближение к кривой между двумя известными точками. Я предполагаю это от слова «диаметр» (что вдвое больше радиуса) в вашем посте. Для этого вы parameterize the circle(t) -> (x,y), где t - 0..2pi. Учитывая, центр, две конечные точки и радиус можно аппроксимировать часть кривой так:

from numpy import cos,sin,arccos 
import numpy as np 

def parametric_circle(t,xc,yc,R): 
    x = xc + R*cos(t) 
    y = yc + R*sin(t) 
    return x,y 

def inv_parametric_circle(x,xc,R): 
    t = arccos((x-xc)/R) 
    return t 

N = 30 
R = 3 
xc = 1.0 
yc = 3.0 

start_point = (xc + R*cos(.3), yc + R*sin(.3)) 
end_point = (xc + R*cos(2.2), yc + R*sin(2.2)) 


start_t = inv_parametric_circle(start_point[0], xc, R) 
end_t = inv_parametric_circle(end_point[0], xc, R) 

arc_T = np.linspace(start_t, end_t, N) 

from pylab import * 
X,Y = parametric_circle(arc_T, xc, yc, R) 
plot(X,Y) 
scatter(X,Y) 
scatter([xc],[yc],color='r',s=100) 
axis('equal') 
show() 

enter image description here

Этот пример является только в 2D, но она легко адаптируется так как кривая будет всегда лежат вдоль плоскости между двумя точками и центром.

Смежные вопросы