Quatro vetores, parte 3: transformações de Lorentz
Neste desafio, estendemos a classe FourVector que criamos na primeira e na segunda parte da coleção FourVector. Agora adicionaremos transformações de Lorentz, especificamente "Rotações puras" e "Boosts puros". Para obter detalhes sobre essa operação, consulte a página da Wiki vinculada em Recursos.
Portanto, adicione os seguintes recursos à classe FourVector:
- Um método auxiliar
KroneckerDeltaque recebe dois inteiros (por exemplo,iej) e retorna1se i=j e0caso contrário. - Um método auxiliar
LeviCivitaSymbolque recebe três inteiros (por exemplo,i,jek) e retorna1se(i,j,k)for uma permutação par de(1,2,3)(ou seja,(i,j,k)for(1,2,3),(2,3,1)ou(3,1,2)),-1se(i,j,k)for uma permutação ímpar de(1,2,3)(ou seja,(i,j,k)for(1,3,2),(2,1,3)ou(3,2,1)) e0caso contrário (ou seja, se i=j, i=k ou j=k). - Um método
PureRotationque recebe um vetor 3D e um ângulo (em graus) como argumentos. Ele deve realizar uma rotação pura (sem boost), conforme especificado aqui. Nos casos de teste, o vetor 3D nem sempre é um vetor unitário, portanto normalize-o. O valor de retorno é um novo Four Vector, ou seja, o FV original não é alterado. - Um método
PureBoostque recebe um vetor 3D como argumento, representando uma 3-velocidade entre os dois referenciais, conforme especificado aqui. Ele deve realizar um boost puro (sem rotação) usando a 3-velocidade passada como argumento. O valor de retorno é um novo Four Vector, ou seja, o FV original não é alterado. Use um valor de299792458para a velocidade da luz (em metros por segundo).
Exemplos
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
Salve sua classe FourVector para uso posterior; adicionaremos novos recursos nos próximos desafios desta série.
Você pode presumir casos de teste válidos (por exemplo, nenhum boost com v=[0,0,0]).