三维空间中点的旋转

Pri*_*esh 1 algorithm math geometry rotation

我有一个与3D空间中的点旋转有关的问题.

假设我有一个带X,Y和Z坐标的点.

现在我想通过以下三种方式之一指定旋转来旋转它:

  1. 按用户定义的程度
  2. 通过用户定义的旋转轴
  3. 围绕(相对于)用户定义的点

我在这里找到了很好的链接,但它没有解决第3点.任何人都可以帮我解决这个问题吗?

Ada*_*dam 8

所有旋转都将围绕原点进行.所以你转换为原点,旋转,然后翻译回来.

T = translate from global coordinates to user-coordinates
R = rotate around the origin (like in your link)
(T^-1) = translate back
point X

X_rotated = (T^-1)*R*T*X 
Run Code Online (Sandbox Code Playgroud)

如果你有多个旋转点,那么将矩阵相乘:

A = (T^-1)*R*T
X_rotated = A*X
Run Code Online (Sandbox Code Playgroud)

  • @curd:有一种非常标准的数学技术,你可以用一个额外的维度增加向量和矩阵,然后可以将任何仿射变换(包括平移)表示为矩阵乘法.例如,请参阅http://en.wikipedia.org/wiki/Transformation_matrix. (6认同)
  • 翻译不是我的矩阵乘法,而是通过矢量减法.因此,如果*表示只是矩阵乘法,则不起作用.如果*表示某些变换的连接,那么它有一定意义,但你仍然不能只用旋转(=矩阵乘法)"乘以"(*)平移(=向量减法)并得到另一个矩阵作为结果. (3认同)
  • 你有什么实际的例子吗? (2认同)
  • @Martin DeMello:好的,多亏了这一点.因此,在使用4维的特殊形式中,翻译也可以很容易地表示为矩阵乘法.然而,这并不明显,答案中没有提到.或者让我这样说:任何熟悉这种形式主义的人都不需要问这个问题. (2认同)
  • @curd:是的,但是任何想要回答这个问题的人都应该从学习那种形式主义开始.它确实是你在研究这种几何操作时学到的第一件事. (2认同)