Como posso girar uma matriz 3D?

Atualmente, se eu quiser comparar a pressão sob cada uma das patas de um cachorro, só compararei a pressão sob cada um dos dedos. Mas quero tentar comparar as pressões sob toda a pata.

Mas para fazer isso eu tenho que girá-los, para que os dedos se sobreponham (melhor). Como na maioria das vezes as patas esquerda e direita são ligeiramente giradas externamente, se você não pode simplesmente projetar uma em cima da outra. Portanto, eu quero girar as patas, para que todas estejam alinhadas da mesma maneira.

Atualmente, calculo o ângulo de rotação olhando os dois dedos do meio e o traseirousando a detecção de dedo então eu calculo o ângulo entre a linha amarela (eixo entre os dedos verde e vermelho) e a linha verde (eixo neutro).

Agora, quero girar a matriz giraria em torno do dedo traseiro, de modo que as linhas amarela e verde estejam alinhadas. Mas como eu faço isso?

Observe que, embora esta imagem seja apenas 2D (apenas os valores máximos de cada sensor), quero calcular isso em uma matriz 3D (10x10x50 em média). Também uma desvantagem do meu cálculo de ângulo é que é muito sensível à detecção do dedo do pé. Portanto, se alguém tem uma proposta matematicamente mais correta para calcular isso, sou todo ouvidos.

Eu vi um estudo com medidas de pressão em humanos, onde eles usaram o método do eixo inercial geométrico local, que pelo menos era muito confiável. Mas isso ainda não me ajuda a explicar como girar a matriz!

Se alguém sentir necessidade de experimentar, aqui está um arquivo comtodas as matrizes fatiadas que contêm os dados de pressão de cada pata. Para esclarecer: walk_sliced_data é um dicionário que contém ['ser_3', 'ser_2', 'sel_1', 'sel_2', 'ser_1', 'sel_3'], que são os nomes das medidas. Cada medida contém outro dicionário, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (exemplo de 'sel_1') que representa os impactos que foram extraídos.

questionAnswers(2)

yourAnswerToTheQuestion