情况 我目前有一种正确计算周长的工作方法。圆周内的每个位置存储在结构阵列中。我的相机位置沿着圆圈移动,具体取决于阵列中的位置。数组的每个元素都保存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);
}
}
答案 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步中描述一个完整的轨道。