轨道物体周围的轨道物体

时间:2013-11-14 22:53:43

标签: c++ opengl math rotation coordinates

enter image description here

如何进入轨道绿色围绕橙色蓝色围绕绿色

我发现很多解决方案在静态点周围旋转都很好(在这种情况下是橙色圆圈),但没有找到任何适用于静态点和移动点的好数学方程式。

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分享链接)

2 个答案:

答案 0 :(得分:1)

尽可能将所有计算基于当前对象的半径和角度,并将半径和角度存储在对象中。

特别是,不要在每次迭代中根据x / y坐标计算半径:如果基础对象在步骤之间移动,则计算的半径将稍微偏离,误差将累积。

答案 1 :(得分:0)

您应该能够使用opengl使用glPushMatrix()glPopMatrix()调用来嵌套坐标空间。 Here是一个基本示例(按鼠标查看坐标空间)。 语法不是c ++,但很容易看出我的意思。

您可以通过多种方式执行此操作:

  1. 极坐标公式
  2. 手动乘以转换矩阵
  3. 只需使用push / pop矩阵调用(以及需要时的translate / rotate),在幕后为你进行矩阵乘法。
  4. 以防您想尝试极坐标公式:

    x = cos(angle) * radius
    y = sin(angle) * radius
    

    其中angle是圆的当前旋转,半径是距离旋转中心的距离。