如何进入轨道绿色圈围绕橙色和蓝色围绕绿色?
我发现很多解决方案在静态点周围旋转都很好(在这种情况下是橙色圆圈),但没有找到任何适用于静态点和移动点的好数学方程式。
angle += sunRot;
if(angle > 360.0f)
{
angle = 0.0f;
}
float radian = glm::radians(angle);
float radius = glm::distance(position, rotCenter);
float x = rotCenter.x + (radius * cosf(radian));
float z = rotCenter.z + (radius * sinf(radian));
glm::vec3 newPos = glm::vec3(x, 0, z);
setPosition(newPos);
Here is我想要实现的目标(感谢@George Profenza分享链接)
答案 0 :(得分:1)
尽可能将所有计算基于当前对象的半径和角度,并将半径和角度存储在对象中。
特别是,不要在每次迭代中根据x / y坐标计算半径:如果基础对象在步骤之间移动,则计算的半径将稍微偏离,误差将累积。
答案 1 :(得分:0)
您应该能够使用opengl使用glPushMatrix()
,glPopMatrix()
调用来嵌套坐标空间。 Here是一个基本示例(按鼠标查看坐标空间)。
语法不是c ++,但很容易看出我的意思。
您可以通过多种方式执行此操作:
以防您想尝试极坐标公式:
x = cos(angle) * radius
y = sin(angle) * radius
其中angle是圆的当前旋转,半径是距离旋转中心的距离。