2016-12-01 118 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