更改伽玛角时,为什么旋转矩阵不起作用?

时间:2020-03-28 16:03:18

标签: python numpy

im目前正在进行一些分子模拟,但无法弄清楚为什么旋转矩阵的一部分无法正常工作。 这是我的代码:

import numpy as np
import math as math

alpha   = 0
beta    = 0
gamma   = 0

R_x_a = np.array([[1, 0, 0],[0, np.cos(alpha), -np.sin(alpha)],[0, np.sin(alpha), np.cos(alpha)]])
R_y_b = np.array([[np.cos(beta), 0, np.sin(beta)], [0, 1, 0], [-np.sin(beta), 0, np.cos(beta)]])
R_z_g = np.array([[np.cos(gamma), -np.sin(gamma), 0],[np.sin(gamma), np.cos(gamma), 0],[0, 0, 1]])


#Rot_matrix = np.dot(R_x_a, R_y_b, R_z_g)

print(R_x_a)
print(R_y_b)
print(R_z_g)

每当我尝试此代码并更改alpha值时,第一个x旋转矩阵都可以正常工作,但是它会以某种方式影响z旋转矩阵。 每当我更改伽玛值时,它都会以某种奇怪的方式更改它,而我不知道如何解决此问题。 我希望有人能帮助我。

3 个答案:

答案 0 :(得分:0)

您没有显示有关如何应用这些旋转的任何代码。可能要确保您正在使用

np.matmul(rotation, vector) 

否则,当我运行它时,您的代码似乎对我有用。

答案 1 :(得分:0)

嗯,我不明白。 我尝试过:

import numpy as np
import math as math
pi = np.pi


steps = [0, pi/2, pi, 3*pi/2, 2*pi]
def rotation_matrix(alpha, beta, gamma):
    global R_x_a
    global R_y_b
    global R_z_g
    R_x_a = np.array([[1, 0, 0],[0, np.cos(alpha), -np.sin(alpha)],[0, np.sin(alpha), np.cos(alpha)]])

    R_y_b = np.array([[np.cos(beta), 0, np.sin(beta)], [0, 1, 0], [-np.sin(beta), 0, np.cos(beta)]])

    R_z_g = np.array([[np.cos(gamma), -np.sin(gamma), 0],[np.sin(gamma), np.cos(gamma), 0],[0, 0, 1]])

    Rot_matrix = np.matmul(R_z_g, R_y_b, R_x_a)



for i in steps:
    print(i)
    rotation_matrix(i, 0, 0)
    print(R_x_a[2,2], "\n")

我这样做是为了尝试我的代码是否正在做某事。 该列表仅用于迭代pi的某些部分。 尽管如此,代码仍然无能为力。

输出:

0
1.0 

1.5707963267948966
1.0 

3.141592653589793
1.0 

4.71238898038469
1.0 

6.283185307179586
1.0 

答案 2 :(得分:0)

您旋转的实际代码是正确的,只是您每次使用此全局变量时都会将R_x_a重置为函数运行后计算它的第一个结果。

import numpy as np
pi = np.pi


steps = [0, pi/2, pi, 3*pi/2, 2*pi]
def rotation_matrix(alpha):
    return np.array([[1, 0, 0],[0, np.cos(alpha), -np.sin(alpha)],[0, np.sin(alpha), np.cos(alpha)]])


for i in steps:
    print(i)
    R_x_a = rotation_matrix(i)
    print(R_x_a[2,2], "\n")
相关问题