如何从默认位置找到最近的Vector?

时间:2013-03-11 09:19:57

标签: c# vector directx

在我的C#项目中,我有一个Vector3数组。现在我想从相机位置找到最近的Vector3。相机的位置也是Vector3对象。我怎么能这样做?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我认为你可以相互减去矢量来得到矢量的长度(幅度)

Vector3 v1 = new Vector3(1,2,3);
Vector3 v2 = new Vector3(1,1,1);

Vector3 difference= new Vector3(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z)

float distance = Math.Sqrt(
   Math.Pow(difference.x, 2f) +
   Math.Pow(difference.y, 2f) +
   Math.Pow(difference.z, 2f));

然后你就可以用坐标的力量来计算距离,如上面的代码那样。

如果您愿意,可以使用扩展方法

public static class Extensions
{
    public static double Distance(this Vector3 source, Vector3 target)
    {
        var difference = new Vector3(source.X - target.X, source.Y - target.Y, source.Z - target.Z);

        var distance = Math.Sqrt(
                Math.Pow(difference.X, 2f) +
                Math.Pow(difference.Y, 2f) +
                Math.Pow(difference.Z, 2f)
            );

        return distance;
    }
}

我不确定它是否有效,因为我是用记事本++编写的:)

答案 1 :(得分:0)

您可以在循环中使用Vector3.Distance(camera,otherObject),将最低距离的对象保存在临时变量中,即

long closestDistance = -1;
Vector3 closestVector = null;

for(Vector3 otherVector : myCollection)
{
    long thisDistance = Vector3.Distance(camera, otherVector);

    if (thisDistance < closestDistance || closestDistance == -1)
    {
       closestDistance = thisDistance;
       closestVector = otherVector;
    }
}