0

私のC#プロジェクトには、Vector3配列があります。ここで、カメラの位置から最も近いVector3を見つけたいと思います。カメラの位置もVector3オブジェクトです。どうすればこれを行うことができますか?

ご協力ありがとうございました!

4

2 に答える 2

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

次に、上記のコードのように、座標の累乗から平方根を取得して距離を計算できます。

必要に応じて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;
    }
}

notepad ++で書いたので、うまくいくかどうかわかりません:)

于 2013-03-11T09:32:04.263 に答える
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;
    }
}
于 2013-03-11T09:26:29.637 に答える