同形点平面距离

2024-04-26 21:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算点(x_1,y_1,z_1)到SymPy中平面ax+by+cz+d=0的点平面距离,但我发现结果不正确。下面是我使用的代码

from sympy import *

a, b, c, d = symbols('a b c d')
x1, y1, z1 = symbols('x_1 y_1 z_1')

p1 = Point(x1, y1, z1)
plane1 = Plane(Point(0, 0, -d/c), normal_vector=(a, b, c))

plane1.distance(p1)

正确答案应该是

但SymPy给我的是frac{ax{u1+by{u1+cz{u1+d}{sqrt{a^2+b^2}}。你知道吗


Tags: 代码距离byczax平面pointx1
1条回答
网友
1楼 · 发布于 2024-04-26 21:26:10

对我来说这看起来像个虫子。Here是sympy计算距离的方式(方法distance(self, o)):

self = plane1
o = p1

x, y, z = map(Dummy, 'xyz')
k = self.equation(x, y, z)
a, b, c = [k.coeff(i) for i in (x, y, z)]
d = k.xreplace({x: o.args[0], y: o.args[1], z: o.args[2]})
t = abs(d/sqrt(a**2 + b**2 + c**2))

如果我们检查ka, b, c,我们会发现方程的系数不正确:

print(k)
print(a, b, c)

# output:
_x*a + _y*b + c*(_z + d/c)
a b 0

c是零,这解释了您的结果。这可以通过简化方程式来解决:

k = simplify(self.equation(x, y, z))

在这种情况下,距离t与您预期的一样:

print(t)
# output
Abs((a*x_1 + b*y_1 + c*z_1 + d)/sqrt(a**2 + b**2 + c**2)) 

更新:这在当前SymPy主机中已修复。参见相应的issue。你知道吗

相关问题 更多 >