优化弧度到2D矢量,反之亦然

时间:2014-03-07 16:26:19

标签: math vector

我目前将弧度转换为2D矢量的方法是:

//Pseudo Code
vector2D(cos(radian),sin(radian)); //x, y

反之亦然:

//Pseudo Code
radian = atan2(vector2D.y,vector2D.x);

然而,这样做似乎是非常不优化的,特别是每帧3000次,每次60 FPS。

有哪些优化的替代方式可以转换它们?

我曾试图谷歌,但无济于事,我决定问社区。

1 个答案:

答案 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。这不是很多,但也不是什么。