计算到任意轴上的点的距离

时间:2016-10-24 22:03:09

标签: java math vector

给定一个简单的二维矢量(用点和方向表示),你如何找到到另一个点的距离,但只能在给定的方向上?

例如,假设我有分start: (1.0, 0.0)end: (2.0, 0.0)。如果我沿x轴获得从开始到结束的距离,结果将为1,但是沿y轴检查时它为0。我需要一个适用于任何方向的方程式。为了我们的目的,我们会说方向只是弧度。

2 个答案:

答案 0 :(得分:1)

将方向角转换为矢量(如果您的角度应以不同方式解释,则相应地进行调整):

dir = (cos(angle), sin(angle))

然后,将两个点投影到此向量上,并找到差异作为它们沿此向量的距离:

distance = dot(dir, end) - dot(dir, start)
         = dir.x * (end.x - start.x) + dir.y * (end.y - start.y)

给出你的例子:

start = (1, 0)
end = (2, 0)
dir = (1, 0)
=> distance = 1 * (2 - 1) + 0 * (0 - 0) = 1
dir = (0, 1)
=> distance = 0 * (2 - 1) + 1 * (0 - 0) = 0

为此,dir必须是单位向量。

答案 1 :(得分:0)

您需要dot product

假设您拥有的点的位置向量为(a,b,c)(p,q,r)

方向向量为(p-a, q-b, r-c)

现在假设方向向量是(x,y,z),你需要先前计算的距离分量。

计算我们需要距离和方向向量的点积。

可以计算的是Sum(x1*x2) = X1*X2 *Cos(A)

Sum(distanceX1 * directionX1) = |distance| * |direction| * Cos(A)

|vector| = magnitude of vector = sqrt(Sum(x1*x1))

因此点积为x*(p-a) + y*(q-b) + z*(r-c)

我们需要的距离是distance * Cos(A),所以我们必须将点积除以方向向量的大小。

那是( x*(p-a) + y*(q-b) + z*(r-c) ) / sqrt(x*x + y*y + z*z)

结果就是这样。