我需要从向量列表中返回较小的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));
但是我知道这是不可能的,那么,如何实现呢?
答案 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;
}