Cuatro vectores, parte 3: transformaciones de Lorentz
En este desafío, ampliamos la clase FourVector que creamos en la primera y segunda entrega de la colección FourVector. Ahora agregaremos transformaciones de Lorentz, concretamente "Rotaciones puras" e "Impulsos puros". Para obtener detalles sobre esta operación, consulta la página de Wiki enlazada en Recursos.
Por lo tanto, agrega las siguientes funciones a la clase FourVector:
- Un método auxiliar
KroneckerDeltaque recibe dos enteros (por ejemplo,iyj) y devuelve1si i=j y0en caso contrario. - Un método auxiliar
LeviCivitaSymbolque recibe tres enteros (por ejemplo,i,jyk) y devuelve1si(i,j,k)es una permutación par de(1,2,3)(es decir,(i,j,k)es(1,2,3),(2,3,1)o(3,1,2)),-1si(i,j,k)es una permutación impar de(1,2,3)(es decir,(i,j,k)es(1,3,2),(2,1,3)o(3,2,1)) y0en caso contrario (es decir, si i=j, i=k o j=k). - Un método
PureRotationque recibe un vector 3D y un ángulo (en grados) como argumentos. Debe realizar una rotación pura (sin impulso), tal como se especifica aquí. En los casos de prueba, el vector 3D no siempre es un vector unitario, así que normalízalo. El valor de retorno es un Four Vector nuevo; es decir, el FV original no cambia. - Un método
PureBoostque recibe un vector 3D como argumento, el cual representa una 3-velocidad entre los dos marcos de referencia, tal como se especifica aquí. Debe realizar un impulso puro (sin rotación) mediante la 3-velocidad pasada como argumento. El valor de retorno es un Four Vector nuevo; es decir, el FV original no cambia. Usa un valor de299792458para la velocidad de la luz (en metros por segundo).
Ejemplos
u1 = FourVector([0, 1, 0, 0])
u1.KroneckerDelta(1, 1) ➞ 1
u1.KroneckerDelta(1, 2) ➞ 0
u1.LeviCivitaSymbol(1, 3, 2) ➞ -1
u1.LeviCivitaSymbol(1, 3, 1) ➞ 0
u1.PureRotation([0, 1, 0], 90) ➞ FourVector([0.0, 0.0, 0.0, -1.0])
c = 299792458.0
u1.PureBoost([c/100., 0, 0]) ➞ FourVector([-0.010000500037503126, 1.0000500037503126, 0.0, 0.0])Notas
Guarda tu clase FourVector para usarla más adelante; agregaremos nuevas funciones en próximos desafíos de esta serie.
Puedes suponer que los casos de prueba son válidos (por ejemplo, no habrá ningún impulso con v=[0,0,0]).