Вернуть меньший вектор из списка - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно вернуть меньший вектор3 из списка векторов, что-то вроде:

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 голосов
/ 12 февраля 2019

Предполагая, что, сказав 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;
}
0 голосов
/ 12 февраля 2019

Используйте linq.

positions.OrderBy(v => v.sqrMagnitude).First();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...