Почему моя матрица вращения не работает, когда я изменяю угол гаммы? - PullRequest
0 голосов
/ 28 марта 2020

Я сейчас работаю над некоторыми молекулярными симуляциями, но не могу понять, почему одна часть моей матрицы вращения не работает должным образом. Вот мой код:

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)

Всякий раз, когда я пробую этот код и изменяю альфа-значение, первая матрица вращения x работает правильно, но она влияет на матрицу вращения z в некотором роде. Всякий раз, когда я изменяю значение гаммы, оно меняет его любопытным образом, и я не знаю, как решить эту проблему. Я надеюсь, что кто-то может мне помочь.

Ответы [ 3 ]

0 голосов
/ 28 марта 2020

Ну, я не понимаю. Я попробовал это:

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")

Я сделал это, чтобы проверить, что мой код что-то делает или нет. Список просто для итерации некоторых дробей числа Пи. Тем не менее, код ничего не делает.

Вывод:

0
1.0 

1.5707963267948966
1.0 

3.141592653589793
1.0 

4.71238898038469
1.0 

6.283185307179586
1.0 
0 голосов
/ 29 марта 2020

Ваш реальный код для поворотов верен, только если вы используете глобальные переменные, сбрасывает 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")
0 голосов
/ 28 марта 2020

Вы не показали никакого кода того, как вы применяете эти вращения. Возможно, убедитесь, что вы используете

np.matmul(rotation, vector) 

, в противном случае ваш код, похоже, работал на меня, когда я его запустил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...