从玩家找到最近的矢量

本文关键字:最近 玩家 | 更新日期: 2023-09-27 18:04:14

我有一个向量列表和一个PlayerVector我只是想知道如何在我的列表中找到最接近我的PlayerVector的向量。

下面是我的变量:

List<Vector2> Positions;
Vector2 Player;

变量已经声明,我只需要一个简单的代码,将搜索最近的位置,我的球员。没有简单的方法吗?

从玩家找到最近的矢量

由于您不需要确切的距离(只是相对比较),因此可以跳过毕达哥拉斯距离公式中的平方根步骤:

Vector2? closest = null;
var closestDistance = float.MaxValue;
foreach (var position in Positions) {
    var distance = Vector2.DistanceSquared(position, Player);
    if (!closest.HasValue || distance < closestDistance) {
        closest = position;
        closestDistance = distance;
    }
}

// closest.Value now contains the closest vector to the player

创建一个名为distanceToPlayer的int,将其设置为0。

创建一个名为nearestObject的int,将其设置为0。

用for循环遍历所有对象。它比foreach循环略快,在这种情况下更有用。

在循环中:

获取与Vector2的距离。距离,并对照distanceToPlayer进行检查,如果小于,则将对象的索引号存储在nearestObject中,并将新距离存储在distanceToPlayer中。

循环完成后,您将获得以整像素为单位的距离,并存储列表中项目的索引。您可以使用Positions[index]访问条目

我是根据记忆写的,因为我现在无法访问XNA:

Vector2 nerrest = Positions.Select(vect => new { distance= vect.Distance(Player), vect})
    .OrderBy(x => x.distance)
    .First().vect;

小技巧:在这个解决方案中,您可能可以使用PLINQ在远程计算中获得一点加速。