2013-03-11 44 views

回答

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)); 

然后你可以通过像上面的代码那样从坐标的幂乘上sqrt来计算距离。

的extensionmethod,如果你想

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; 
    } 
} 

我不知道,如果它的作品,因为我在记事本++ :)

0

你可以在一个循环中使用Vector3.Distance(相机,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; 
    } 
} 
+0

写我的Vector3对象不提供的功能距离.. – Maxim 2013-03-11 09:50:17

+0

也可以为此创建一个扩展方法。如果它不在那里 – 2014-03-03 16:50:15