2016-12-01 124 views
1

我想計算三維空間中圓弧與點之間的距離。我所發現的是一個圓,一個點link(這是可以錯的,或者我犯了一個錯誤,因爲我得到錯誤的值)之間的距離:三維中點與圓弧之間的距離

P = np.array([1,0,1]) 
center = np.array([0,0,0]) 
radius = 1 
n2 = np.array([0,0,1]) 

Delta = P-center 
dist_tmp = np.sqrt((n2*Delta)**2 + (np.abs(np.cross(n2, Delta))-radius)**2) 
dist = np.linalg.norm(dist_tmp) 

我在xy平面有一個圓原點在xyz = 0和半徑= 1處。感興趣的點位於圓圈上方的距離1處。從代碼距離的結果是1.73 ..而不是1.

  1. 什麼是正確的點圓距離方程?
  2. 如何將它擴展到點弧距?
+0

你怎麼知道你「得到錯誤的價值」?即請告訴我們您使用的數據,您得到的結果以及您的預期結果。請參見[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。不要忘記告訴我們'P'和'中心'和'半徑'的數據類型。 –

+0

對不起,我的壞。示例/測試輸入如下所示。我在x-y平面中有一個圓,起點在x-y-z = 0,半徑= 1。感興趣的點位於圓上方的距離1處。 __進口numpy的作爲NP __ P = np.array([1,0,1])__ 中心= np.array([0,0,0])__ 半徑= 1 __ N2 = NP。數組([0,0,1])__ 從中我會期望從1的圓的距離 - 結果是1.73。 – user56574

+0

感謝您提供第一個問題所需的附加信息。我已經給出了答案。對於你的第二個問題,圓弧是如何定義的?顯然它是圈子的一部分,但你如何陳述哪個部分? –

回答

2

您的代碼有幾處錯誤。這是你的第一個問題的答案。

首先,您嘗試實現n2Delta的點積作爲n2*Delta,但這不是2 np數組的乘法操作。改爲使用np.dot()。接下來,您嘗試採用np.abs的矢量的「絕對值」(幅度),但後者僅適用於實數和複數。獲得矢量幅度的一種方法是np.linalg.norm()。改變這些會給你正確的答案,而且你不需要計算變量dist。因此,使用

Delta = P-center 
dist = np.sqrt(np.dot(n2, Delta)**2 + (np.linalg.norm(np.cross(n2, Delta))- radius)**2) 

,它爲dist1.0正確的答案。

+0

非常感謝,確實效果很好。 – user56574