私の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));
次に、上記のコードのように、座標の累乗から平方根を取得して距離を計算できます。
必要に応じて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 ++で書いたので、うまくいくかどうかわかりません:)
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;
}
}