2012-03-29 50 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.起源和的方向的终点向量。