许多向量,找到最接近4的对象

时间:2015-04-12 13:46:59

标签: c# unity3d

我有Vector3数组:

public Vector3[] positions;

我将此对象的对象和位置存储在Vector3变量中。

我有第二个Vector3数组:

public Vector3[] four;

我需要从数组位置找到4个最接近对象的向量,并将它们放入数组 4

我正在考虑如何做几个小时,但我真的不知道怎么做。请给我一些想法(请用C#)。

1 个答案:

答案 0 :(得分:3)

这应该有效。它计算myObject和所有位置之间的所有距离,并将它们与位置索引一起存储。

然后根据距离对此结果进行排序。

最后它获取前4个结果并使用存储的索引来获得正确的位置。

using UnityEngine;
using System.Collections.Generic;

public class Distance
{
   public float distance;
   public int index;

   public Distance( float distance, int index )
   {
      this.distance = distance;
      this.index = index;
   }
}

class MyGame
{
   Vector3[] positions;
   Vector3 myObject;
   Vector3[] four = new Vector3[4];

   List<Distance> distanceList = new List<Distance>();

   void Foo()
   {
      for( int i = 0; i < positions.Length; i++ )
      {
         // get all the distances
         float distance = Vector3.Distance( positions[i], myObject );
         // store the distance with the index of the position
         distanceList.Add( new Distance( distance, i ) );
      }

      // sort the distances
      distanceList.Sort( delegate (Distance t1, Distance t2) { return (t1.distance.CompareTo(t2.distance)); } );

      for( int i = 0; i < 4; i++ )
      {
         // get the first four sorted distances
         int idx = distanceList[i].index;
         // use the stored index
         four[i] = positions[idx];
      }
   }
}