在我的 C# 项目中,我有一个 Vector3 数组。现在我想从相机位置找到最近的 Vector3。相机的位置也是一个 Vector3 对象。我怎么能做到这一点?
谢谢您的帮助!
我认为您可以将向量彼此相减以获得向量的长度(幅度)
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));
然后,您可以像上面的代码一样从坐标的幂中获取 sqrt 来计算距离。
如果您愿意,可以使用扩展方法
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;
}
}
我不确定它是否有效,因为我是用记事本++写的:)
您可以在循环中使用 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;
}
}