2016-01-22 165 views
0

如何通过距离点的距离对向量进行排序? 例如我有三个矢量:A,B,C和点寻找距离最近的向量点

Example image with point and vectors

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

+0

你的意思是位置矢量w.r.t.起源? – 11thdimension

+0

我没有更完整地描述它。我需要按照关卡的层次对其进行分类。在这张图片http://i.imgur.com/WHi9sja.png上的结果是(B,A)意味着B是第一级,而A是第二级Wrt点 – user2890234

+0

你的问题看起来更像是你呼叫的线段的距离向量。但是矢量每个维度只有一个坐标。你可以按照长度排列向量。 –

回答

2

好的,这是更多的是数学问题,但是让我在这里解释一下。看看这张照片:

Line segment definition for distances

让我们通过矢量一个的起点和通过该线段其一端在箭头结束运行载体定义线段。对于其他分部B和C分别同样有效。点P作为坐标也是一个向量。

现在让我们让线性代数成为我们的朋友,然而却是编程高效的。 :-)

在一个可以做到这一点段的实例,并与其他分别为:

  1. 与来自一个AP(矢量的点积为P )你得到的投影projA on a其中P是最接近的。
  2. 如果设置A +(projA)* NA(NA是标准化的一个矢量),你得到的最近点的向量P
  3. 让我们设置dA = A + projA * na - P以及它的长度,您可以得到最近的比较距离。

而是节约的距离,尽量保存和比较平方距离达分贝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 

希望它可以帮助有点...