2009-12-31 74 views
2

我想找到给定3点的3D平面方程。在应用交叉产品后,我得到了正常的计算结果。但是一个平面的方程已知是另一个矢量的正常乘法,我被教导为P.OP。我将主要参考点替换为OP,并且我希望P处于(x,y,z)形式。所以,我可以得到类似e.g,3D矢量的平面方程

OP = (1, 2, 3) 

我想类似的东西:

(x-1) 
(y-2) 
(z-3) 

我可能知道如何? 下面是我的参考代码(注:plane_point_1_x(),plane_point_1_y(),plane_point_1_z()所要求的各点的用户输入的所有功能)。

""" 
I used Point P as my reference point so I will make use of it in this section 
""" 

vector_pop_x = int('x') - int(plane_point_1_x()) 
vector_pop_y = int('y') - int(plane_point_1_y()) 
vector_pop_z = int('z') - int(plane_point_1_z()) 

print vector_pop_x, vector_pop_y, vector_pop_z 

所有上述是我做的,但由于某种原因,它不起作用。我认为问题在于x,y,z部分。

+1

难道你不认为这不完全是编程相关?顺便说一句,'int(“x”)'不起作用,你想在那里做什么? – 2009-12-31 13:36:27

+1

@gs - 困惑为什么这是不合适的。询问算法以及如何实现它们在这里有着悠久的传统。 – 2009-12-31 14:13:45

回答

2

平面隐式公式:

所有点P =(X,Y,Z)满足

< ÑQP> = 0

其中

  • n是平面法线矢量,
  • Q是在飞机上某个点(任何将做)
  • QP是从QP
  • < 一个矢量b>是标量(点)产品运营商。

(请记住,QP可以计算为P - Q

2

的一个好方法是:

| x1 y1 z2 1 | 
| x2 y2 z2 1 | 
| x3 y3 z3 1 | = 0 
| x y z 1 | 

在垂直管道意味着矩阵的行列式,并且(x1 y1 z1),(x2 y2 z2)(x3 y3 z3)是您给出的要点。

+0

我该如何定义一个变量呢?我可能知道它在Python中如何工作?对不起,新手问题,因为我不是很了解它,它似乎并没有工作,也许我做错了或东西 – blur959 2010-01-01 06:50:24

+0

平面是满足这个方程的所有点'(x y z)'的集合。所以,如果你有三个参考点,插入它们,你可以用上面的方程测试任何其他点在飞机上。或者,如果你有这个点的'x'和'y'坐标,你可以为另一个解决。 – pavpanchekha 2010-01-02 15:48:58

2

的更详细的描述我希望这个答案已经存在。从http://www.had2know.com/academics/equation-plane-through-3-points.html

假设3点P1,P2,P3的编码 - 包括[X1,Y1,Z1]等

vector1 = [x2 - x1, y2 - y1, z2 - z1] 
vector2 = [x3 - x1, y3 - y1, z3 - z1] 
cross_product = [vector1[1] * vector2[2] - vector1[2] * vector2[1], -1 * vector1[0] * v2[2] - vector1[2] * vector2[0], vector1[0] * vector2[1] - vector1[1] * vector2[0]] 
d = cross_product[0] * x1 - cross_product[1] * y1 + cross_product[2] * z1 

a = cross_product[0] 
b = cross_product[1] 
c = cross_product[2] 
d = d 
+1

请注意:此答案包含算术错误。看到MasterAler的答案是正确的版本。 – Gabriel 2016-01-27 15:06:24

1

说您有三个已知点,每个具有(X,Y,Z )。例如:

p1 = (1, 2, 3) 
p2 = (4, 6, 9) 
p3 = (12, 11, 9) 

使他们成为更易于看作进一步处理符号:

x1, y1, z1 = p1 
x2, y2, z2 = p2 
x3, y3, z3 = p3 

从点确定两个向量:

v1 = [x3 - x1, y3 - y1, z3 - z1] 
v2 = [x2 - x1, y2 - y1, z2 - z1] 

确定的的cross product两个矢量:

cp = [v1[1] * v2[2] - v1[2] * v2[1], 
     v1[2] * v2[0] - v1[0] * v2[2], 
     v1[0] * v2[1] - v1[1] * v2[0]] 

A面可以用一个简单的等式 + 通过 + CZ = d进行说明。从叉积的三个系数是一个bÇ,和d可以通过用公知的点来解决,例如第一:

a, b, c = cp 
d = a * x1 + b * y1 + c * z1 

现在做一些有益的,如确定z的值为x = 4,y = 5。重新安排了简单的方程式,并求解ž

x = 4 
y = 5 
z = (d - a * x - b * y)/float(c) # z = 6.176470588235294 
3

如果我没有记错的话,一个很好的解决方案在这里包含输入错误

vector1 = [x2 - x1, y2 - y1, z2 - z1] 
vector2 = [x3 - x1, y3 - y1, z3 - z1] 

cross_product = [vector1[1] * vector2[2] - vector1[2] * vector2[1], -1 * (vector1[0] * vector2[2] - vector1[2] * vector2[0]), vector1[0] * vector2[1] - vector1[1] * vector2[0]] 

a = cross_product[0] 
b = cross_product[1] 
c = cross_product[2] 
d = - (cross_product[0] * x1 + cross_product[1] * y1 + cross_product[2] * z1) 

尝试以前(作者)版本,但不得不核实。随着夫妇更多的公式中的错误现在似乎是正确的。