点到平面计算的距离给出错误的结果

时间:2018-12-20 19:30:05

标签: python numpy matrix algebra

当我开始使用实际坐标时,我在计算从点到平面的距离时遇到了麻烦。我可以得到一个使用虚拟坐标的示例,使用的数字介于-10和10之间。将问题应用于实际的UTM坐标后,我就开始得到奇怪的答案。

#  Using dummy coordinates
p1 = np.array([1.15, 0.62, -1.01])
p2 = np.array([1.74, 0.86, -0.88])
p3 = np.array([0.91, 0.79, -1.84])
tp =  np.array([1.17, 0.94, -1.52])

u = p2 - p1
v = p3 - p1
# vector normal to plane
n = np.cross(u, v)
n /= np.linalg.norm(n)

p_ = tp - p0
dist_to_plane = np.dot(p_, n)
print(dist_to_plane)

#  Using real-world coordinates
p1 = np.array([503562, 2811504, 1771], dtype='float64')
p2 = np.array([504122, 2810766, 1820], dtype='float64')
p3 = np.array([504325, 2811311, 1042], dtype='float64')
tp = np.array([503618, 2811286, 1808], dtype='float64')

u = p2 - p1
v = p3 - p1
# vector normal to plane
n = np.cross(u, v)
n /= np.linalg.norm(n)

p_ = tp - p0
dist_to_plane = np.dot(p_, n)
print(dist_to_plane) 

使用伪坐标,我得到dist = 0.115,根据目视检查,我认为这是正确的。

使用现实世界的坐标,我得出dist = 1820961.09,这绝对是不正确的。距离应在100左右。

1 个答案:

答案 0 :(得分:0)

首先,p0是未定义的(如Craig Meier所述)。

第二,您不需要它。参见图片here。您需要减去代码中的点P,即p_ = tp - p1

第三,切记取结果的绝对值(如Quang Hoang所述)。