Java 围绕特定点旋转(例如,围绕0,0,0旋转)

Java 围绕特定点旋转(例如,围绕0,0,0旋转),java,rotation,java-3d,Java,Rotation,Java 3d,我一直在寻找这个问题的答案,但我真的找不到合适的答案。 我需要围绕给定点(例如,0,0,0)旋转圆柱体,但默认情况下圆柱体的轴是给定的。我该如何改变这一点 我找到了这个主题,这正是我想要做的,但我不知道如何用java实现它 为了更好地解释我想做什么,我将展示3幅图片 imageshack.us/photo/my-images/259/aintgood.jpg imageshack.us/photo/my-images/840/whatineed.jpg imageshack.us/photo/m

我一直在寻找这个问题的答案,但我真的找不到合适的答案。
我需要围绕给定点(例如,0,0,0)旋转圆柱体,但默认情况下圆柱体的轴是给定的。我该如何改变这一点

我找到了这个主题,这正是我想要做的,但我不知道如何用java实现它

为了更好地解释我想做什么,我将展示3幅图片

imageshack.us/photo/my-images/259/aintgood.jpg

imageshack.us/photo/my-images/840/whatineed.jpg

imageshack.us/photo/my-images/705/nogoodn.jpg

第一幅图显示了我的基本问题,圆柱体的末端应该位于球体的中心,比如说(0,0,0)。用户给出两个角度。第一个用于rotX命令,第二个用于rotZ命令。圆柱体的枢轴位于其中心,因此,如图3所示,即使我平移圆柱体使其末端位于球体的中心,当它旋转时,整个物体都会毁坏

图2显示了圆柱体-球体组的外观,无论给定角度如何。
图像不是基于算法获得的,而是基于微积分和鼠标移动的。

围绕任意点p旋转的一般步骤是:

  • 通过-P进行翻译(因此P位于(0,0,0))
  • 围绕原点旋转
  • 按P平移(将原点恢复到P的原始位置)

  • 实现这一点的最简单方法是表示矩阵中的所有内容,并用矩阵表示平移和旋转。上述三种变换(平移-旋转-平移)的合成是通过矩阵乘法完成的。如果旋转由两个或多个简单旋转组成,那么旋转矩阵本身就是简单旋转矩阵的乘积。

    谢谢,这非常有用。事实上,在我的例子中,我需要的只是先平移,然后旋转,而不是相反的顺序。我现在希望用齐次坐标表示可以帮助我解决下一个问题,我需要找到一个公式来确定相反的点(另一端的圆心),这样我就可以绑定两个球体。非常感谢您的帮助,如果您对此有任何想法,我将非常感谢您的一条新建议。@BujancaMihai-您可以应用相同的想法:要找到球体上点的相反点,请变换所有内容,使球体的中心位于原点,对该点求反,然后将所有内容变换回原点。希望这有帮助。注意:记住投票和/或接受有帮助的答案和/或回答你的问题。:)如果我只想在圆柱体的方向上有一个新的球体,同样的想法确实有效。但是,给出一个简单的例子来说明问题。如果原始球体位于(0,0,0),圆柱体的长度为2f,我可以将圆柱体平移到(1,0,0),然后旋转它,很好,圆柱体的一端位于球体的中心。但是,如果我有一个新的球体,它应该约束在圆柱体的另一端,我需要确定一个公式。例如,对于rotX 45度,我的新球体位于(sin 45,cos 45,0)。但对于其他角度,点会发生变化。