1

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

问题: 圆的位置似乎位于半径为 3 的 x:0,y:0,z:0 但是我需要它位于 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);
            }

}
4

1 回答 1

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而是- 如果您仍然希望相机高于 10,请在您的值上0,10,0再增加 10 。y

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

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

于 2013-05-08T19:31:09.120 回答