问题
我想将三维向量的维度 x、y 和 z 移动vec3
一个数字 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。它移动 2 到维度 2,即 z。所以 z 为 12。
- 维度 1 是 y 并保持 42。移动 2 会导致维度 4 不存在,因此我们将其环绕,它的值变成维度 0 的值,即 x。
- 维度 2 是 z,也环绕边缘,其值落在 y 中。