2012-03-29 87 views
0

首先,我在應用於Vector3d時遇到了數學矢量的概念。我理解一個向量就像一條線,除了它有一個方向屬性。Java Vector3d和矢量邏輯

現在,Vector3d只在其構造函數中接受3個參數(x,y,z)。我認爲這是因爲矢量最初被假定爲從原點開始並穿過指定點。如果Vector3d中包含的唯一屬性是x,y,z,我們怎麼能有一個不與原點相交的向量?

例如,我想程序,計算球體上的兩點之間的距離的函數:

//Returns the shortest distance between two points on a sphere 
public static double getGreatCircleDistance(Point3d p1, Point3d p2){ 
    Vector3d v1 = getVector(viewSphereOrigin, p1); 
    Vector3d v2 = getVector(viewSphereOrigin, p2); 
    v1.normalize(); 
    v2.normalize(); 
    return Math.acos(v1.dot(v2)*(viewSphereDiameter/2)); 
} 

//Returns a vector through two given Points in 3d space 
public static Vector3d getVector(Point3d start, Point3d terminal){ 
    return new Vector3d(terminal.x-start.x, terminal.y-start.y, terminal.z-start.z); 
} 

我不但是明白getVector()如何返回穿過兩個向量給點。我研究瞭如何獲取連接兩個點的矢量:

http://emweb.unl.edu/math/mathweb/vectors/vectors.html#vec6

但是從根本上我還是不明白這一點。有人可以爲我清除Vector3d背後的邏輯嗎?它可以如何在3D空間中表示任意矢量,但它只包含x,y,z?

謝謝!

+0

你有一個小錯誤:應該是'Math.acos(v1.dot(v2))*(viewSphereDiameter/2)' – Joni 2012-03-29 07:04:55

+0

噢,謝謝Joni! – user1170679 2012-03-29 07:16:25

回答

0

一個向量不是一條線;它是一個數量級方向的實體。它沒有的是位置

您可以將矢量表示爲任意兩點之間的線段:大小是點之間的距離,方向由線的方向給出。每次線的距離和方向都相同時,您將獲得相同的矢量。

由於矢量沒有位置,我們可以任意選擇一個點作爲原點。這樣一個三重«x,y,z»唯一地表示一個具有從點(0,0,0)到點(x,y,z)的直線方向的向量。但是通過選取點(5,4,2)和(5 + x,4 + y,2 + z)或任何其他兩個彼此距離和方向相同的點,也可以得到相同的矢量。

+0

啊謝謝你!所以對於這個問題,我們不需要位置,因爲我們需要的矢量是找到角度。所以在這種情況下,矢量工作。那麼確定地說矢量不應該用於計算三維空間中的交點是否安全? – user1170679 2012-03-29 06:57:05

+0

矢量可用於處理積分。由於矢量基本上是一個「位移」,因此您可以將矢量添加到點以獲取另一個點。您不能以相同的方式添加兩個點。 – Joni 2012-03-29 07:03:21

0

正如我所知的Vector3D意味着一個[x,y,z]從原點開始。如果你想存儲在三維空間中(稱爲雷)載體,可以儲存兩個Vector3D:
1的出發點和矢量 OR
2.起源和的方向的終點向量。