3d 如何围绕球体曲面旋转立方体

3d 如何围绕球体曲面旋转立方体,3d,rotation,geometry,java-3d,3d,Rotation,Geometry,Java 3d,我想在球体表面周围放置立方体,如: 我正在使用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); d

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

我正在使用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。但我的结果是:


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

最简单的解决方案是按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和glTranslate规范,它们如何修改当前矩阵并复制它们的行为。或者,您可以在这些操作之后使用glGetDoublevGL\u MODELVIEW\u matrix查询总账矩阵

这并没有完全说明如何旋转这样的立方体,请注意,你可以围绕[x,y,z]轴自由旋转立方体,这是你的位移向量。我不明白你的意思,但我需要立方体的面和球面是垂直的。谢谢你的回答,但这对我来说不起作用。我确实用你的解决方案的图像编辑了这个问题。请尝试用[0,0,-radius]进行翻译,我也会从一个角度设置为0.0开始,以检测另一个角度是否有问题。@Anonymous我很抱歉,但原始海报使用Java 3D,我不明白为什么你使用另一个API提供答案,尽管它没有错。