如何移动计算圆的位置?

时间:2013-05-08 19:28:40

标签: c++ math opengl

情况 我目前有一种正确计算周长的工作方法。圆周内的每个位置存储在结构阵列中。我的相机位置沿着圆圈移动,具体取决于阵列中的位置。数组的每个元素都保存3d空间内位置的x,y和z值。

问题: 圆的位置似乎位于x:0,y:0,z:0,半径为3但是我需要它在3d空间内的另一个位置(x:10,y:35,z:20) )半径为3。

我的结构:

typedef struct 
    {
        float x;
        float y;
        float z;
    } circle;
circle loop[600] = {0};

我计算圆圈的方法:

void calcCircle()
{
    for (int i = 0; i < 599 ; i++)
            {
                loop[i].x = radius * sin(i/100.0);
                loop[i].y = 10;
                loop[i].z = radius * cos(i/100.0);
            }

}

1 个答案:

答案 0 :(得分:3)

只需在计算中添加偏移量,例如以10,35,20 ...

为中心
const double PI = 3.1415926535;
void calcCircle()
{
    for (double i = 0; i < 2*PI ; i+=PI*2/600)
            {
                loop[i].x = 10 + radius * sin(i/2*PI);
                loop[i].y = 35;
                loop[i].z = 20 + radius * cos(i/2*PI);
            }

}

请注意,您的示例不会以0,0,0为中心,而是0,10,0 - 如果您仍然希望相机高于10,请在y值上再添加10。< / p>

此外,更常见的是将中心提供到轨道和相机的一些偏移,而不是预先计算 n 点。这样,相机可以平滑移动而不是固定点之间。就目前而言,轨道速度很可能与帧率有关,帧率可能因设备而异。

最后,我更改了sin / cos的缩放比例,以便在600步中描述一个完整的轨道。