我想找到一个给出3分的3D平面方程。应用十字产品后,我得到了正常的计算结果。但是已知平面的方程是正常乘以另一个向量,我被教导为P.OP.我将主参考点替换为OP,我希望P为(x,y,z)形式。所以我可以得到类似的东西,
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部分。
答案 0 :(得分:5)
如果我没有弄错的话,这里的一个好解决方案包含错误类型
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)
尝试了之前(作者)的版本,但不得不检查它。公式中有几个更多的缺点现在看来是正确的。
答案 1 :(得分:4)
一个好方法是:
| 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)
是您的给定点。
答案 2 :(得分:3)
平面隐式Eqn:
所有点 P =(x,y,z)满足
< n , QP > = 0
,其中
(请记住 QP 可以计算为 P - Q )
答案 3 :(得分: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
答案 4 :(得分:2)
假设您有三个已知点,每个点都有(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]]
可以使用简单的等式 ax + 通过 + cz = d 来描述平面。交叉积中的三个系数是 a , b 和 c ,而 d 可以通过替换a来解决已知点,例如第一个:
a, b, c = cp
d = a * x1 + b * y1 + c * z1
现在做一些有用的事情,比如确定 x = 4, y = 5时的 z 值。重新排列简单的等式,并求解 z :
x = 4
y = 5
z = (d - a * x - b * y) / float(c) # z = 6.176470588235294