問題は、このかなり基本的な操作に関する最も堅牢で最速の実装についてです。
ベクトル (X,Y) を指定して、指定された長さ desiredLength の共線ベクトルを計算します。これには少なくとも 2 つの方法があります。
1。(X,Y) の長さを求め、それに応じて再スケーリングします。
double currentLength = sqrt(X*X + Y*Y);
if(currentLength == 0) { /* Aye, Caramba! */ }
double factor = desiredLength / currentLength;
X *= factor;
Y *= factor;
二。(X,Y) の方向を見つけ、その方向に desiredLength のベクトルを形成します。
if(X == 0 && Y == 0) { /* Aye, Caramba! */ }
double angle = atan2(Y, X);
X = desiredLength * cos(angle);
Y = desiredLength * sin(angle);
堅牢なアプリの開発、数値安定性の向上、実行の高速化などには、どの方法が望ましいでしょうか?