Java Vector3d和矢量逻辑

时间:2012-03-29 06:29:47

标签: java vector 3d intersection point

首先,当应用于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?

谢谢!

2 个答案:

答案 0 :(得分:0)

据我所知,Vector3D的意思是从原点开始的[x,y,z]。如果你想在3D空间中存储一个矢量(称为Ray),你应该存储两个Vector3D:
1.向量的起点和终点
2.向量的起源和方向。

答案 1 :(得分:0)

矢量不是一条线;它是一个幅度方向的实体。它没有的是位置

您可以将矢量表示为任意两点之间的线段:幅度是点之间的距离,方向由线的方向给出。每当线的距离和方向相同时,您就得到相同的向量。

由于矢量没有位置,我们可以任意选择其中一个点作为原点。这样,三重“x,y,z”唯一地表示具有从点(0,0,0)到点(x,y,z)的线的方向的向量。但是你也可以通过选择点(5,4,2)和(5 + x,4 + y,2 + z)或彼此相同距离和方向的任何其他两个点来获得相同的矢量。