gpt4 book ai didi

c++ - 移动 vec3 的维度

转载 作者:行者123 更新时间:2023-11-30 02:57:57 27 4
gpt4 key购买 nike

问题

我想将三维 vector vec3 的维度 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。它被移动 2 到维度 2,即 z。所以 z 为 12。
  • 维度 1 是 y 并且包含 42。移动 2 导致维度 4 不存在,所以我们将它环绕起来,它的值变成维度 0 的值,即 x。
  • 维度 2 是 z,也环绕边缘,其值落在 y 中。

最佳答案

在您的情况下,您可以移动 2 次,第三次将是原来的。因此,与其为 2 个不同的类次创建一个通用函数,我建议从中创建两个更简单的函数。

vec3 shiftOnce(vec3 Vector)
{
return vec3(Vector.z, Vector.x, Vector.y);
}

vec3 shiftTwice(vec3 Vector)
{
return vec3(Vector.y, Vector.z, Vector.x);
}

这样会更快更容易阅读。我不喜欢代码重复,但在像这样的小情况下,它只是首选解决方案。

如果需要维度参数:

vec3 shift(int dimension, vec3 v)
{
if(dimension % 3 == 1) return vec3(v.z, v.x, v.y); // shift once
else if(dimension % 3 == 2) return vec3(v.y, v.z, v.x); // shift twice
else return v;
}

关于c++ - 移动 vec3 的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14090584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com