找到最接近点的矢量

时间:2016-01-22 21:19:53

标签: vector distance point

如何按距离点对矢量进行排序? 例如,我有三个向量:A,B,C和点

Example image with point and vectors

排序结果必须是这样的:(A,C,B)

1 个答案:

答案 0 :(得分:2)

好的,这不仅仅是一个数学问题,而是让我在这里解释一下。看看这张图片:

Line segment definition for distances

让我们通过矢量 A 为起点定义线段,为运行通过该线段的矢量 a 定义,该线段以箭头结束。同样对于其他段B和C分别有效。点 P 作为坐标,也是矢量。

现在让我们把线性代数作为我们的朋友,然后以编程方式有效。 : - )

在细分 a 的示例中,您可以分别与另一个一起执行此操作:

  1. 使用 a AP (从A到P的矢量)的点积,您可以在 a <上获得投影 projA / strong>其中 P 最接近的位置。
  2. 如果您设置 A +(projA)* na (na是规范化的 a 向量),您将获得向量中最接近的点 a P
  3. 设置 dA = A + projA * na - P ,并根据其长度得到最近的比较距离。
  4. 尝试存储并比较 dA dB dC 的平方距离,而不是保存距离,并进行比较。它将节省您计算可能变得非常昂贵的平方根。

    这是一些伪代码:

    vector3 AP = P-A;
    vector3 projA = a.dot(AP);
    vector3 nA = a.normalized();
    dA = A + projA*na - P;
    
    dA2 = dA.x*dA.x + dA.y*dA.y + dA.z*dA.z;
    
    -> Compare and sort them by that value
    

    希望它有所帮助...