给定一个简单的二维矢量(用点和方向表示),你如何找到到另一个点的距离,但只能在给定的方向上?
例如,假设我有分start: (1.0, 0.0)
和end: (2.0, 0.0)
。如果我沿x轴获得从开始到结束的距离,结果将为1,但是沿y轴检查时它为0。我需要一个适用于任何方向的方程式。为了我们的目的,我们会说方向只是弧度。
答案 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)
结果就是这样。