围绕另一个旋转对象

时间:2014-05-22 09:47:07

标签: java android math 3d rotation

今天我的问题是我希望一个物体转向另一个物体。就像地球绕太阳转。我用Java编程。

我将相机作为参考点(太阳),以及需要转动此参考点(地球)的物体。

我知道:

  • 两个对象之间的距离: d
  • 相机的位置: pCam
  • 对象的位置: pObj
  • 我需要旋转的角度: a

我希望在距离 d 的参考位置 pCam 周围旋转 a 角度后找到对象的新位置

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

好的,我解决了我的问题,

我使用此功能以一个角度(以度为单位)旋转另一个点:

public SimpleVector rotateAround(SimpleVector center, SimpleVector point, float angle) {
    SimpleVector newPos = new SimpleVector(point.x - center.x, 0, point.z - center.z);

    newPos.x = (float) (newPos.x * Math.cos(angle) - newPos.z * Math.sin(angle));
    newPos.z = (float) (newPos.x * Math.sin(angle) + newPos.z * Math.cos(angle));

    newPos.x += center.x;
    newPos.z += center.z;

    return newPos;
}

为了记住对象的位置,我使用这段代码:

SimpleVector diff = this.getPosition().calcSub(ref);
SimpleVector s = rotateAround(center, ref, (float) angle);
s.x += diff.x;
// Rotation only on a plane (2 axis)
s.y = this.getPosition().y;
s.z += diff.z;
this.positioningObject(s);