C# XNA从播放器中查找最近的向量

C# XNA从播放器中查找最近的向量,c#,vector,xna,C#,Vector,Xna,我有一个向量列表和一个PlayerVector,我只是想知道如何在列表中找到离PlayerVector最近的向量 以下是我的变量: List<Vector2> Positions; Vector2 Player; 列出位置; 矢量2播放器; 变量已经声明,我只需要一个简单的代码,搜索最接近我的球员的位置。有没有简单的方法?因为不需要精确的距离(只是相对比较),所以可以跳过毕达哥拉斯距离公式中的平方根步骤: Vector2? closest = null; var closestD

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

以下是我的变量:

List<Vector2> Positions;
Vector2 Player;
列出位置;
矢量2播放器;

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

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

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
Vector2?最近=空;
var closestDistance=float.MaxValue;
foreach(位置中的var位置){
var距离=矢量2.距离平方(位置,玩家);
如果(!nexist.HasValue | | distance
因为您不需要精确的距离(只是相对比较),所以可以跳过毕达哥拉斯距离公式中的平方根步骤:

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
Vector2?最近=空;
var closestDistance=float.MaxValue;
foreach(位置中的var位置){
var距离=矢量2.距离平方(位置,玩家);
如果(!nexist.HasValue | | distance
创建一个名为distanceToPlayer的int,将其设置为0

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

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

在循环中:

使用Vector2.distance获取距离,并对照distanceToPlayer进行检查,如果较小,则将对象的索引号存储在NeareSObject中,并将新距离存储在distanceToPlayer中


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

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

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

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

在循环中:

使用Vector2.distance获取距离,并对照distanceToPlayer进行检查,如果较小,则将对象的索引号存储在NeareSObject中,并将新距离存储在distanceToPlayer中


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

我正在从内存中写入它,因为我现在无法访问XNA:

Vector2 nerrest = Positions.Select(vect => new { distance= vect.Distance(Player), vect})
    .OrderBy(x => x.distance)
    .First().vect;
小提示:
在这个解决方案中,您可能可以使用PLINQ在距离计算上获得较小的加速。

我是从内存中编写的,因为我现在无法访问XNA:

Vector2 nerrest = Positions.Select(vect => new { distance= vect.Distance(Player), vect})
    .OrderBy(x => x.distance)
    .First().vect;
小提示:
在这个解决方案中,您可能可以使用PLINQ在距离计算上获得较小的加速。

Vector2.distance
()可能是一个很好的起点。
Vector2.distance
()可能是一个很好的起点。一个改进是在循环中获得平方距离,然后一旦获得最小距离,就将其平方根。这样你只需要做一次代价高昂的平方根运算(如果你需要的话)。一个改进是在循环中得到平方距离,然后一旦你有了最小距离,就把它平方根。这样,您只需执行一次代价高昂的平方根操作(如果您需要的话)。