#java #al&orithm #rotation
#java #алгоритм #вращение
Вопрос:
Я пытаюсь реализовать симуляцию змеи Рубика, если у меня есть модель, сформированная из блока strin& 000000020000200000020000
24, каждый символ которого означает угол поворота для противоположного блока, если блок вращается, он вращает все блоки рядом с ним.
if 0 = no rotation
1 = 90
2 = 180
3 = 270
как проверить, формируется ли одна и та же фигура разными шагами 200002000000020000200000
Я реализую на Java.
Комментарии:
1. Что вы уже пробовали?
2. @bkis Я пытался в линейной алгебре сопоставить центральные точки для каждого блока, но это было неточно или, возможно, моя реализация была неправильной
Ответ №1:
Назовите snake1 и snake2 вашими двумя змеями.
Представьте, что snake1 и snake2 образуют одну и ту же фигуру. Подумайте о первом блоке snake1. Этот блок должен совпадать с одним из блоков из snake2, чтобы две фигуры совпали. С каким блоком snake2 выравнивается первый блок snake1?
Этот вопрос дает начало алгоритму. Если первый блок snake1 синий, то перебирайте все синие блоки snake2 один за другим и предположим, что первый блок snake1 совпадает с этим блоком snake2. Существует две ориентации, в которых может находиться первый блок snake1 по сравнению с этим блоком snake2; вам придется перебирать эти две возможные ориентации.
После того, как вы выбрали блок snake2 и ориентацию, вызовите (0,0,0)
позицию первого блока snake1 в пространстве и выполните цикл по всем блокам snake1 и сохраните их положение, записав blue
или black
в массив, представляющий все возможные позиции в трехмерном пространстве. Помечены все ячейки массива, которые не содержат блока empty
.
Проделайте то же самое во втором массиве для блоков snake2.
Две змеи представляют одну и ту же форму тогда и только тогда, когда два массива представляют одну и ту же форму.
PS: Поскольку блоки являются призмами, а не кубами, если ячейка в массиве представляет собой куб, то вам нужно быть немного более явным, чем просто blue
/ black
/ empty
в описании того, что содержит ячейка. Итак, вам нужно либо:
- найдите более умный способ представления пространства, чем простой 3D-массив; или
- найдите подходящие описания возможного содержимого ячейки (что-то вроде «наполовину черное, наполовину синее, в какой ориентации»).