我有一个向量列表和一个PlayerVector我只想知道如何在我的列表中找到最接近我的PlayerVector的Vector。
以下是我的变数:
List<Vector2> Positions;
Vector2 Player;
变量已经声明了所有,我只需要一个简单的代码来搜索我的播放器最近的位置。是不是有一个简单的方法?
答案 0 :(得分:7)
由于您不需要精确的距离(只是相对比较),您可以跳过毕达哥拉斯距离公式中的平方根步骤:
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
答案 1 :(得分:2)
创建一个名为distanceToPlayer的int,将其设置为0。
创建一个名为nearestObject的int,将其设置为0。
使用for循环遍历所有对象。它比foreach循环略快,在这种情况下更有用。
在循环中:
使用Vector2.Distance获取距离,并根据distanceToPlayer进行检查,如果更少,则将对象的索引号存储在nearestObject中,并将新距离存储在distanceToPlayer中。
循环完成后,您将获得整个像素的距离,并存储列表中项目的索引。您可以使用Positions [index]访问该项目。
答案 2 :(得分:0)
我是从内存中写的,因为我现在无法访问XNA:
Vector2 nerrest = Positions.Select(vect => new { distance= vect.Distance(Player), vect})
.OrderBy(x => x.distance)
.First().vect;
小提示: 在这个解决方案中,你可能可以使用PLINQ在距离计算上获得很少的加速。