2013-07-22 39 views
0

如果我有三維線上點的x,y座標,並且我需要使用python來獲得這個z座標,我該怎麼做?我有三維線條的起點(x1,y1,z1)和終點(x2,y2,z2),所以有什麼建議嗎?在3d中使用python在一條線上的一個點的z座標

+1

如果'x1 == x2'和'y1 == y2'如何處理? – 6502

+4

這是更多的數學問題,這裏有一個關於堆棧交換的不同論壇。 http://math.stackexchange.com – nio

回答

3

您可以輕鬆地設置該線路的參數方程:

x = x1 + (x2 - x1)*t 
y = y1 + (y2 - y1)*t 
z = z1 + (z2 - z1)*t 

所以給出一個(X,Y),解決這個方程t

x = x1 + (x2 - x1)*t 

所以

t = (x - x1)/(x2 - x1) 

t = (y - y1)/(y2 - y1) 

現在你知道t,你可以找到z

z = z1 + (z2 - z1)*t 

所以在Python這將是:

def computeZ(p1,p2,x,y): 
    x1,y1,z1 = p1 
    x2,y2,z2 = p2 

    if x2 - x1 != 0: 
     t = (x - x1)/(x2 - x1) 
    elif: 
     t = (y - y1)/(y2 - y1) 
    else: 
     print "no unique z value exists" 
     return 0 

    return z1 + (z2 - z1)*t 
1

你只需要知道X或Y值,不都。該公式,如果你有一個X值,將是:

((A - x1)*(z2 - z1)/(x2 - x1)) + z1 

利用這一點,你可以在你的兩個初始點插頭和一個X,並獲得新的點,像這樣:

def get_points(p1, p2, x): 
    x1, y1, z1 = p1 
    x2, y2, z2 = p2 

    new_z = ((x - x1)*(z2 - z1)/(x2 - x1)) + z1 
    new_y = ((x - x1)*(y2 - y1)/(x2 - x1)) + y1 

    new_p = (x, new_y, new_z) 
    return new_p 
+0

當x2 - x1爲零時會發生什麼? – jh314

+0

當我意識到我忘記了這條線是否與主軸平行時,你已經得到了答案,所以我決定離開我的現場,讓你的選擇正確 – scohe001

相關問題