我目前将弧度转换为2D矢量的方法是:
//Pseudo Code
vector2D(cos(radian),sin(radian)); //x, y
反之亦然:
//Pseudo Code
radian = atan2(vector2D.y,vector2D.x);
然而,这样做似乎是非常不优化的,特别是每帧3000次,每次60 FPS。
有哪些优化的替代方式可以转换它们?
我曾试图谷歌,但无济于事,我决定问社区。 p>
答案 0 :(得分:1)
这个触发代码不太可能是你的程序的瓶颈。我运行了以下测试程序:
#include <iostream>
#include <chrono>
int main()
{
int const N = 3000;
int const FRAMES = 10000;
float xs[N], ys[N];
typedef std::chrono::high_resolution_clock Clock;
typedef std::chrono::time_point<Clock> Time;
Time start = Clock::now();
for (int frame = 0; frame < FRAMES; ++frame)
for (int i = 0; i < N; ++i)
{
float theta = atan2(ys[i], xs[i]);
theta += 0.01;
xs[i] = cos(theta);
ys[i] = sin(theta);
}
Time end = Clock::now();
std::chrono::duration<double> seconds = end - start;
double fps = FRAMES / seconds.count();
std::cout << fps << " fps\n";
}
使用MSVC 2013编译,Intel i7-4770上的32位版本模式:
3620.56 fps
编辑:换句话说,触发代码每帧占用CPU时间的1.6%,速度为60 FPS。这不是很多,但也不是什么。