0

在此处输入图像描述

我如何围绕橙色蓝色围绕绿色环绕绿色圆圈?

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

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);

这是我想要实现的目标(感谢@George Profenza 分享链接)

4

2 回答 2

1

尽可能基于当前对象的半径和角度进行所有计算,并将半径和角度与对象一起存储。

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

于 2013-11-15T00:30:07.200 回答
0

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

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

  1. 极坐标公式
  2. 手动乘以变换矩阵
  3. 只需使用 push/pop 矩阵调用(以及在需要的地方进行平移/旋转),它会在幕后为您执行矩阵乘法。

以防万一您想尝试极坐标公式:

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

其中角度是圆的当前旋转,半径是它与旋转中心的距离。

于 2013-11-14T23:20:37.103 回答