2009-12-31 89 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) 

嘗試以前(作者)版本,但不得不覈實。隨着夫婦更多的公式中的錯誤現在似乎是正確的。