質問
vec3
3次元ベクトルの次元x、y、zをnだけシフトしたい。
vec3 shift(int n, vec3 vector);
アルゴリズムを改善して最高のパフォーマンスを実現し、ロジックを簡素化するにはどうすればよいですか? このタスクには一般的なアプローチがあると思いますね。
アルゴリズム
vec3 shift(int Dimension, vec3 Vector)
{
float in[3] = { Vector.x, Vector.y, Vector.z };
float out[3];
for(int i = 0; i < 3; ++i)
{
int n = i + Dimension;
while(n > Dimension - 1) n -= Dimension;
out[i] = in[n];
}
return vec3(out[0], out[1], out[2]);
}
例
たとえばshift(2, vec3(12, 42, 30))
、私に与える必要がありますvec3(42, 30, 12)
。
- 次元 0 は x で、値 12 を保持します。これは、z である次元 2 に 2 だけシフトされます。したがって、z は 12 です。
- 次元 1 は y であり、42 を保持します。2 だけシフトすると、存在しない次元 4 になるため、ラップアラウンドし、その値は次元 0 の値 x になります。
- 次元 2 は z であり、またエッジをラップし、その値は y になります。