Python 相对于z轴旋转球体集合
我将球体中心的坐标(x,y,z)存储在numpy数组中。我希望能够绕z轴旋转球体,但是我得到了奇怪的结果。我的代码进行旋转,但它似乎也在向上和向右移动。也许这是旋转的预期结果,但我认为不是。 这是我的密码:Python 相对于z轴旋转球体集合,python,image-rotation,rotational-matrices,Python,Image Rotation,Rotational Matrices,我将球体中心的坐标(x,y,z)存储在numpy数组中。我希望能够绕z轴旋转球体,但是我得到了奇怪的结果。我的代码进行旋转,但它似乎也在向上和向右移动。也许这是旋转的预期结果,但我认为不是。 这是我的密码: theta = math.pi/6 ct = math.cos(theta) st = math.sin(theta) z = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]]) self.atoms = np.array([[90,100, 1
theta = math.pi/6
ct = math.cos(theta)
st = math.sin(theta)
z = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]])
self.atoms = np.array([[90,100, 1], [140,100, 1]])
self.atoms = self.atoms.dot(z)
以下是图像在旋转之前的样子:
下面是它之后的样子:
您必须平移整个系统,使旋转中心成为系统的中心 仅当围绕原点旋转时,用于旋转的方程式才起作用 对于平移,您还可以与平移方向为最后一行的矩阵相乘 无论如何,整个变换是
p'=inv(T)*R*T*p
(其中p
是图形的每个点,p'
是最终结果中的位置,请参见示例),因为平移矩阵的逆矩阵只是对平移分量的符号求反
编辑(制定了一个示例——您可能需要转置所有内容——用列切换行):
从放置在以下位置的点开始:
atoms =
90 140
100 100
1 1
这在
然后应用旋转矩阵
R =
0.86603 -0.50000 0.00000
0.50000 0.86603 0.00000
0.00000 0.00000 1.00000
并得到一个结果
R * atoms =
27.9423 71.2436
131.6025 156.6025
1.0000 1.0000
这转化为(正如你所观察到的,红色点是新的)
问题是,通过做R*原子
我们围绕原点旋转。在下图中,两条蓝线之间的角度正好是pi/6
现在,我们想获得以下蓝色圆圈:
为此,我们需要几个步骤:
- 构建平移矩阵以转换点,使旋转中心为轴的中心:
(原子中心的负片是T = 1 0 -115 0 1 -100 0 0 1
和-115
)-100
- 平移点,使两个中心重叠(我们得到红色原子) (请注意,我们的新两点围绕原点对称)
- 旋转新点(我们得到绿色圆圈)
- 最后,把所有的东西都翻译回来
inv(T) * R * T * atoms = 93.3494 136.6506 87.5000 112.5000 1.0000 1.0000
点*平移*旋转*平移
。检查什么工作正常3x3
矩阵表示2D,使用4x4
表示3D。基本上,我们与必须平移整个系统,以使旋转的中心成为系统的中心 仅当围绕原点旋转时,用于旋转的方程式才起作用 对于平移,您还可以与平移方向为最后一行的矩阵相乘 无论如何,整个变换是
p'=inv(T)*R*T*p
(其中p
是图形的每个点,p'
是最终结果中的位置,请参见示例),因为平移矩阵的逆矩阵只是对平移分量的符号求反
编辑(制定了一个示例——您可能需要转置所有内容——用列切换行):
从放置在以下位置的点开始:
atoms =
90 140
100 100
1 1
这在
然后应用旋转矩阵
R =
0.86603 -0.50000 0.00000
0.50000 0.86603 0.00000
0.00000 0.00000 1.00000
并得到一个结果
R * atoms =
27.9423 71.2436
131.6025 156.6025
1.0000 1.0000
这转化为(正如你所观察到的,红色点是新的)
问题是,通过做R*原子
我们围绕原点旋转。在下图中,两条蓝线之间的角度正好是pi/6
现在,我们想获得以下蓝色圆圈:
为此,我们需要几个步骤:
- 构建平移矩阵以转换点,使旋转中心为轴的中心:
(原子中心的负片是T = 1 0 -115 0 1 -100 0 0 1
和-115
)-100
- 平移点,使两个中心重叠(我们得到红色原子) (请注意,我们的新两点围绕原点对称)
- 旋转新点(我们得到绿色圆圈)
- 最后,把所有的东西都翻译回来
inv(T) * R * T * atoms = 93.3494 136.6506 87.5000 112.5000 1.0000 1.0000
点*平移*旋转*平移
。检查什么工作正常3x3
矩阵表示2D,使用4x4
表示3D。基本上,我们与对不起,你把我弄丢了。现在可以理解为什么我的旋转也会导致后续的平移(我是围绕矩阵的中心而不是结构的中心旋转)。然而在那之后我迷路了。我将是b