CAD システム用のプラグインを作成しています。残念ながら、このシステムには不適切な API があります。そこで、Vector3d クラスの拡張機能を作成しました。ここにあります(C#コード):
/// <summary>
/// Normalizes the vector by dividing it’s all coordinates with the vector's norm.
/// </summary>
/// <param name="v">
/// This vector.
/// </param>
/// <returns>
/// Returns vector's norm.
/// </returns>
public static double Normalize(this Vector3d v)
{
var norm = v.Norm();
var invNorm = 1.0 / norm;
v.X *= invNorm;
v.Y *= invNorm;
v.Z *= invNorm;
return norm;
}
しかし、問題があります。このメソッドを実行すると、ベクトルの座標が変更されます。ただし、メソッドが実行されると、ベクトルの座標は元の値になります。
他の拡張方法では問題ありません。