2016-05-06 630 views
1

這類問題與普通的'如何通過numpy找到兩條線的交點'有點不同。這裏是情況,我正在創建一個程序,查看邊坡的穩定性,並且我需要找出一個圓與一條線相交的地方。找到兩個numpy數組的交點座標點

我有兩個numpy的數組:

一個陣列給我一個高度剖面的法線(X,Y)的值在2D

另一陣列計算的座標(X,Y)的值即跨越所定義中心的圓周。

我需要以某種方式比較兩個在什麼近似點的圓的座標相交輪廓線?

這裏是一些數據的工作與:

circ_coords = np.array([ 
         [.71,.71], 
         [0.,1.] 
         ]) 

linear_profile = np.array([ 
          [0.,0.], 
          [1.,1.] 
         ]) 

我需要一個函數,將吐出說一個或多個座標值說,基於這些圓座標和您的線性分佈..兩相交會這裏。

def intersect(array1, array2): 
    # stuff 
    return computed_array 
+0

circ_coords的中心是什麼? – PseudoAj

+0

在這種情況下,它只是(0,0):circ_coords已經是我創建的一個函數,用於從定義的中心創建一個值數組 –

+0

您只想在numpy中做到這一點?因爲勻稱有一些很酷的功能http://toblerity.org/shapely/manual.html – PseudoAj

回答

1

Shapely有一些很酷的功能。根據this post,此代碼應工作:

from shapely.geometry import LineString 
from shapely.geometry import Point 

p = Point(0,0)//center 
c = p.buffer(0.71).boundary//radius 
l = LineString([(0.,0.), (1., 1.)])//line point 
i = c.intersection(l) 

顯然在這裏,我就是你要找的,也是陣列,檢查此post了。希望這可以幫助。

+0

是的,這個答案是完美的,正是我所期待的。謝謝 –

2

您可以用代數方法解決它。 (x1,y1)和(x2,y2)之間的線段上的點(x,y)的參數表示爲:其中x1,y1和x2,y2之間的線段上的點的參數表示爲:

x = tx1 +(1-t)x2和y = ty1 +(1-t) y2,

其中0≤t≤1。

如果將其替換爲圓的方程並求出t的二次方程,則可以測試0≤t01≤1,即線段與圓相交。 t01值可能比用來計算交點。