如何围绕球体表面旋转立方体

时间:2014-11-17 11:15:19

标签: 3d rotation geometry java-3d

我想在球体表面上放置立方体,如:

cube arround sphere

我正在使用Java3D。我的球体表面有一个点:

    double s = (random.nextInt(360));
    double t = (random.nextInt(360));
    double radius = 180;
    double x = radius * Math.cos(s) * Math.sin(t);
    double y = radius * Math.sin(s) * Math.sin(t);
    double z = radius * Math.cos(t);

我需要在这一点上放置立方体的中心并翻译和旋转立方体,如图所示。 我怎样才能做到这一点?

我尝试用不同的轴旋转s和t。但是有我的结果:

enter image description here

enter image description here

我需要立方体的面和球体表面像第一张图像一样垂直。

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是按照3个调用的顺序进行:

// having s,t,radius
// transform cube
GL11.glRotatef(s, 0, 0, 1);
GL11.glRotatef(t, 1, 0, 0);
GL11.glTranslatef(0, 0, radius);

如果你需要计算这样的矩阵供你的程序使用,你可以按照glRotate& amp; glTranslate规范如何修改当前矩阵并复制它们的行为。或者,您可以使用glGetDoublev(GL_MODELVIEW_MATRIX)在这些操作之后查询GL矩阵;