gpt4 book ai didi

c++ - 如何移动计算出的圆的位置?

转载 作者:行者123 更新时间:2023-11-30 02:55:28 24 4
gpt4 key购买 nike

情况我目前有一个可以正确计算周长的工作方法。圆周内的每个位置都存储在一个结构数组中。我的相机位置根据阵列内的位置沿着圆圈移动。数组的每个元素都包含 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);
}

}

最佳答案

只需在您的计算中添加一个偏移量,例如以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 以上,将额外的 10 添加到您的 y 值。

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

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

关于c++ - 如何移动计算出的圆的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com