从List <vector3>返回较小的向量

时间:2019-02-11 21:06:29

标签: c# unity3d

我需要从向量列表中返回较小的vector3,例如:

var positions = new List<Vector3>();

positions.Add(new Vector3(135, 125, 13));
positions.Add(new Vector3(55, 12, 13));
positions.Add(new Vector3(1353, 346, 13));
positions.Add(new Vector3(1442, 979, 134));

private Vector3 SmallerPosition(List<Vector3> positions)
{
    positions.Sort();
    return positions[0];
}

Debug.Log(SmallerPosition(positions));

但是我知道这是不可能的,那么,如何实现呢?

2 个答案:

答案 0 :(得分:4)

使用linq。

positions.OrderBy(v => v.sqrMagnitude).First();

答案 1 :(得分:2)

假设您说smaller vector的意思是缩小magnitude。在这种情况下,比较sqrMagnitude就足够了,并且可以使我们获得更好的性能,因为我们不会让Math.Sqrt进行繁重的工作来计算幅度。

使用LINQ可以很好地工作,但是如果您出于性能考虑,请手动进行迭代而不是进行排序。

private Vector3 SmallerPosition(List<Vector3> positions)
{

    var minVector = positions[0];
    var minSqrMagnitude = minVector.sqrMagnitude;
    for(int i = 1; i < positions.Count; i++)
    {
        var sqrMag = positions[i].sqrMagnitude;
        if (sqrMag < minSqrMagnitude) 
        {    
            minVector = positions[i];
            minSqrMagnitude = sqrMag;
        }
    }

    return minVector;
}