2012-10-19 60 views
2

我遇到問題,請讓我知道我的解決方案是否正確。我有一個已知的點,在位置A(x1,y1,z1)和原點O(0,0,0),我想找到點B(x2,y2,z2)的座標,即位於線OA上,並且距離OB是OA的1.2倍。在給定距離處沿線查找3D點

所以,我的想法是獲得由點O和A. OA的方向是(-x1,-Y1,-Z1)形成的直線的方程,所以該線的方程爲:

x = -x1 * t;

y = -y1 * t;

z = -z1 * t;距離OA是sqrt((x1-0)^ 2 +(y1-0)^ 2 +(z1-0)^ 2)。已知

距離OB是sqrt((x2-0)^ 2 +(y2-0)^ 2 +(z2-0)^ 2)。 UNKNOWN

我可以替換距離OB中線方程確定的x,y,z點,結果應該比距離OA大1.2倍。因此,sqrt((-x1 * t-0)^ 2 +(-y1 * t-0)^ 2 +(-z1 * t-0)^ 2)= 1.2 * dist(OA)。

我從這裏找到t,求解二次方程,並通過替換線的方程中的t來獲得點的座標。

這是正確的嗎?

謝謝你的時間。

編輯: 這是我的代碼:

rangeRatio = 1.114; 

norm = sqrt((P2(1) - P1(1))^2 + (P2(2) - P1(2))^2 + (P2(3) - P1(3))^2); 

P3(1) = P1(1) + ((P2(1,1) - P1(1)) /norm) * rangeRatio; 
P3(2) = P1(2) + ((P2(1,2) - P1(2)) /norm) * rangeRatio; 
P3(3) = P1(3) + ((P2(1,3) - P1(3)) /norm) * rangeRatio; 

我試着也常模= 1,和我得到的結果稍有不同,但仍然不總是共線。

謝謝

+0

哇,你已經過度複雜的問題。 – ja72

回答

3

它甚至更容易;你可以將a,b和c乘以1.2。這給出一條線是原始線的大小的1.2倍。

+0

你的意思是'x','y'和'z'而不是a,b,c? – ja72

+0

嗯,當然。或者,換句話說,'x2 = 1.2 * x1','y2 = 1.2 * y1'和'z2 = 1.2 * z1' – bartlaarhoven

+0

你能解釋一下嗎? – DCuser

相關問題