Rotation around a specific point (eg, rotate around 0,0,0)

こ雲淡風輕ζ 提交于 2019-11-30 19:05:20

问题


I've been searching a lot on this problem, but I couldn't really find an answer that would fit.
I need to rotate a cylinder around a given point (eg, 0,0,0), but the pivot of the cylinder is given by default. How do i change that?

I found this topic, and it's quite what I would want to do, but I don't know how to do it with java.

To explain better what I would like to do, I'll show 3 images.(v)

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

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

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

So, the first image shows my basic problem, the cylinder should be positioned with the end at the center of the sphere, let's say (0,0,0). The user gives two angles. The first one is for a rotX command, the second one for a rotZ one. The pivot of the cylinder is at its center, so, as image 3 shows, even if i translate the cylinder so its end is at the center of the sphere, when it rotates, the whole thing ruins.

Image 2 shows what the cylinder-sphere group should look like, regardless the given angles. The image is not obtained based on an algorithm, but based on calculus, and mouserotated.


回答1:


The general procedure for rotation about an arbitrary point P is:

  1. Translate by -P (so P is at (0, 0, 0))
  2. Rotate around the origin
  3. Translate by P (to bring the origin back to the original location of P)

The easiest way to do this is to represent everything in homogeneous coordinates and represent translations and rotations by matrices. Composing the above three transformations (translate-rotate-translate) is done by matrix multiplication. If the rotation is composed of two or more simpler rotations, then the rotation matrix itself is a product of the matrices for the simpler rotations.



来源:https://stackoverflow.com/questions/13143732/rotation-around-a-specific-point-eg-rotate-around-0-0-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!