У меня есть 3d-массив, описывающий поликуб (представьте себе кусок 3d-тетриса). Как я могу рассчитать все 24 вращения?
Процедуры манипулирования массивом Numpy включают метод rot90, который дает 4 из 24, но я не знаю, как рассчитать остальное. Моя единственная идея - преобразовать трехмерный массив в двумерную матрицу координат, умножить на матрицу вращения и выполнить обратное преобразование. Но я бы предпочел работать напрямую с 3D-массивом.
Пример массива 2x2x2:
>>> from numpy import array
>>> polycube
array([[[1, 0],
[1, 0]],
[[1, 1],
[0, 0]]])
Пример массива 3х3х3:
array([[[1, 1, 0],
[1, 1, 0],
[0, 0, 0]],
[[0, 0, 0],
[1, 0, 0],
[1, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]])
Редактировать: я хочу только 24 сохраняющих ориентацию изометрии, а не все 48 поворотов и отражений (хотя было бы интересно узнать, как их сделать тоже). Если это помогает проверить, я считаю, что пример 3x3x3 не имеет вращательной симметрии и является киральным (поэтому 48 различны).
Мотивация: я пишу решатель для головоломки Soma cube -style.