У меня есть программа, которая должна выводить матрицу вращения для поворота на произвольный угол вокруг произвольной оси.Я начинаю с пустого массива 3х3.Я просматриваю каждый элемент массива, используя вложенные циклы, и устанавливаю значение в соответствии с , этот удивительный метод .
Из sympy я использую KroneckerDelta и LeviCivita, из numpy я использую массив.
В своем коде я включил методы устранения неполадок, которые я использовал.Программа ведет себя точно так, как я ожидаю на каждом этапе, за исключением того, что кажется, что она просто не добавляет значения к компонентам.Еще более запутанно, это работает для theta = pi.
Может кто-нибудь заметить мою глупую ошибку?
from numpy import array, ndarray, outer, dot, cross, array_equal, identity
from numpy import concatenate, zeros
from numpy import sin, cos, tan, arcsin, arccos, arctan, exp
from numpy.linalg import norm, inv
from numpy import pi, sqrt, arange
from sympy import KroneckerDelta, LeviCivita
def RotationMatrix(axis, angle):
axis = axis / norm( axis )
R = array([[0,0,0],[0,0,0],[0,0,0]])
for i in range(0,3):
for j in range(0,3):
R[i,j] += int(cos(angle)) * int(KroneckerDelta(i,j))
R[i,j] += (1-cos(angle)) * axis[i] * axis[j]
for k in range(0,3):
#R[i,j] -= sin(angle) * axis[k] * LeviCivita(i,j,k)
print(KroneckerDelta(i,j),LeviCivita(i,j,k),i,j,axis[i],axis[j],cos(angle),sin(angle))
print(R)
return R