Как сделать кубик рубика в 3ds max

Обновлено: 06.07.2024

Если бы вы разрабатывали программное обеспечение для решения кубика Рубика, как бы вы представили куб?

В этом документе ACM описывается несколько альтернативных способов, которые он использовал для представления кубика рубика, и сравниваются их друг с другом. К сожалению, у меня нет учетной записи, чтобы получить полный текст, но описание гласит:

Представлены и сравнены семь альтернативных представлений кубика Рубика: массив из 3-х 3-х-3-х чисел; массив литералов размером 6 на 3 на 3; буквенная матрица 5 на 12; разреженная буквенная матрица; вектор из 54 элементов; 4-х мерный массив; и вложенный массив 3 на 3 на 3. Функции APL даны для ориентационных ходов и четвертьоборотов плюс несколько полезных инструментов для решения куба.

Кроме того, этот RubiksCube.Java файл содержит довольно чистое представление вместе с соответствующим кодом для поворота разделов (если вы ищете реальный код). Он использует массив ячеек и граней.

Одним из способов было бы сосредоточиться на внешнем виде.

Куб имеет шесть граней, и каждая грань представляет собой массив квадратов три на три. Так

Тогда каждый ход - это метод, который переставляет определенный набор цветных квадратов.

Оптимизация Eschew; сделать это объектно-ориентированным. Схема класса псевдокода, которую я использовал:

Объем используемой памяти настолько мал, а обработка настолько минимальна, что оптимизация совершенно не нужна, особенно когда вы жертвуете удобством использования кода.

Интересный способ представления куба используется программным обеспечением «Cube Explorer». Используя много умных математических выражений, этот метод может представлять куб, используя только 5 целых чисел. Автор объясняет математику своей программы на своем сайте . По мнению автора, представление подходит для реализации быстрых решателей.

Есть много способов сделать это. Некоторые способы более эффективно используют память, чем другие.

Я видел, как люди используют массив 3 x 3 x 3 кубоидных объектов, где кубоидный объект должен хранить информацию о цвете (и да, этот центральный объект никогда не используется). Я видел, как люди используют 6 массивов, каждый из которых представляет собой массив кубов 3 х 3. Я видел массив кубоидов 3 x 18. Есть много возможностей.

Вероятно, большее беспокойство вызывает то, как представить различные преобразования. Поворот одной грани физического куба (все движения куба - это, по сути, вращения одной грани) должен был бы быть представлен путем обмена множеством кубоидных объектов.

Ваш выбор должен иметь смысл для любого приложения, которое вы пишете. Может быть, вы только рендеринг куба. Может быть, что нет интерфейса. Возможно, вы решаете куб.

Я бы выбрал массив 3х18.

Есть 20 кубиков, которые имеют значение. Так что один из способов сделать это - это массив из 20 строк. Строки будут содержать 2 или 3 символа, обозначающие цвета. Любой отдельный ход затрагивает 7 кубиков. Так что вам просто нужен реппер для каждой из шести сторон.

Примечание. В этом решении не удается запомнить ориентацию наклейки с логотипом, которая находится на белом центре.

Кстати, я однажды помог кому-то сделать программный кубик Рубика, может быть, 15 лет назад, но я не могу вспомнить, как мы его представляли.

Вы можете представить куб в виде трех вертикальных круглых связанных списков, которые пересекаются с тремя горизонтальными связанными списками.

Всякий раз, когда вращается определенный ряд куба, вы просто поворачиваете соответствующие указатели.

Это будет выглядеть так:

Возможно, вам на самом деле не нужны 2 последних указателя.

Помните, что существует шесть взаимосвязанных круглых связанных списков. 3 вертикальных 3 горизонтальных.

Для каждого поворота вы просто просматриваете соответствующий круговой связанный список, последовательно сдвигая связи вращающегося круга, а также соединительные круги.

Нечто подобное, по крайней мере .

Другие хорошо рассмотрены, описывая физический куб, но касаясь состояния куба . Я бы попытался использовать массив векторных преобразований для описания изменений куба. Таким образом, вы можете сохранить историю кубика Рубика по мере внесения изменений. И мне интересно, если бы вы могли умножить векторы в матрицу преобразования, чтобы найти самое простое решение?

Как перестановка из 48 граней, которые могут двигаться. Основные вращения также являются перестановками, и перестановки могут быть составлены, они образуют группу.

В программе такая перестановка будет представлена ​​массивом из 48 элементов, содержащих числа от 0 до 47. Цвета, соответствующие числам, являются фиксированными, поэтому визуальное представление может быть вычислено из перестановки и наоборот.

Я реализовал программу Rubik's Cube, которая визуализирует куб с использованием OpenGL, и у него есть встроенный решатель. Решатель должен генерировать миллионы ходов и сравнивать каждое состояние куба миллионы раз, поэтому основная структура должна быть быстрой. Я попробовал следующие структуры:

  • Трехмерный массив символов, 6x3x3. Цвет лица индексируется как куб [SIDE] [ROW] [COL]. Это было интуитивно понятно, но медленно.
  • Единый массив из 54 символов. Это было улучшение скорости, и ряд и шаг были вычислены вручную (тривиально).
  • 6 64-битных целых чисел. Этот метод, по сути, представляет собой битборд, и он был самым быстрым из всех.

Каждая сторона куба состоит из 9 стикеров, но центр неподвижен, поэтому нужно хранить только 8 стикеров. И есть 6 цветов, поэтому каждый цвет помещается в байте. Учитывая эти определения цвета:

Лицо может выглядеть так, хранящееся в одном 64-разрядном целом числе:

Который декодируется как:

Преимущество использования этой структуры заключается в том, что побитовые операторы rolq и rorq можно использовать для перемещения лица. Роллинг на 16 бит приводит к повороту на 90 градусов; прокатка на 32 бита дает поворот на 180 градусов. Соседние части должны быть сохранены вручную, т.е. после поворота верхней грани также необходимо переместить верхний слой передней, левой, задней и правой граней. Поворот лица таким способом действительно быстр. Например, прокат

Расшифровывается, что выглядит так:

Другое преимущество состоит в том, что сравнение состояний куба в некоторых случаях может быть выполнено с использованием некоторых умных битовых масок и стандартных целочисленных сравнений. Это может быть довольно большим ускорением для решателя.

Примечание: мой решатель не самый быстрый. Он похож на алгоритм Thistlethwaite, но моя цель состояла в том, чтобы решить куб по-человечески, а не решить его за наименьшее количество возможных ходов. Мой ответ касается базовых структур данных, а не решения куба.

Чтобы не моделировать кубик рубика самим, вы можете скачать его с нашего сайта. Теперь произведем импорт в 3ds max: File > Import. В этой модели 27 объектов Boxes. Так что связывать или группировать их не стоит.

Сейчас проведем эксперимент - выделите столбец или ряд объектов (боксов) в 3D модели кубика. Нажмите на Auto Key. Затем вращайте выделенные объекты. Вы увидите, что они вращаются не так, как нам нужно. Ну чтож, давайте исправлять ситуация - мы должны сменить опорную точку (Pivot Point) каждого объекта (оси вращения). Нажимаем crtl+z (отмена действия) и выключаем Auto Key.

Анимируем знаменитый кубик рубика в 3ds max

Теперь давайте выделим и скроем некоторые объекты так, чтобы можно было увидеть бокс, находящийся внутри (см. рис.). Выберите этот бокс и запишите его координаты. Сейчас можно вернуть отображение боксов (unhide).

Анимируем знаменитый кубик рубика в 3ds max

Выделяем все 27 объектов, переходим в командную панель. Щёлкаем на вкладку Hierarchy (Иерархия). Затем Affect Pivot Only (Воздействовать только на опорную точку). И жмём F12. В этом окне водим ранее записанные координаты X, Y и Z. Каждый раз при вводе координат нажимаем Enter. Теперь все объекты имеют опорные точки, располагающиеся в одном и том же месте. Выключаем Affect Pivot Only.

Анимируем знаменитый кубик рубика в 3ds max

Создание анимации уубика рубика мы начнём с последнего кадра (состояние сложенного Кубика Рубика). Выделяем все объекты. Перемещаем слайдер анимации в кадр 80. Нажимаем Set Key и щёлкаем по кнопке Set Keys (Установить ключи) (квадратная кнопка с изображением ключа). Вы получите ключевой кадр в кадре 80. Set Key, в противоположность Auto Key, используется в случаях, когда нам надо создать анимацию вручную по ключам. Теперь у нас есть Кубик Рубика в сложенном состоянии в кадрах от 80 до 100.

Анимируем знаменитый кубик рубика в 3ds max

Сейчас нам надо выделить боксы в одном столбце или ряду, а потом активировать инструменты Select And Rotate (Выделить и вращать) и 3D Angle Snap (3D угловая привязка). Затем перемещаем слайдер в кадр 60, разворачиваем выделенные боксы на 90 градусов по часовой или против часовой стрелке и выделяем все боксы. Потом жмём на кнопку Set Keys.

Повторяем эту операцию для кадров 40, 20 и 0. Помните: после вращения ряда или столбца, нужно выделить все боксы и щёлкнуть кнопку Set Keys. После создания ключевых кадров, выключите Set Key.

Воспрос знатокам в 3D-печати. Возникла идея-сюрприз для любимой девушки. Стандартный кубик Рубика, но на гранях кусочки фотографий, когда кубик собирается, кусочки на каждой грани собираются в большие фотографии на каждой грани (как с цветами в обычном кубике). После того как кубик правильно сложен, есть возможность добраться до центральной (статической) ячейки, например, выдавливаются все 3 центральных маленьких кубика, а в среднем по задумке будет лежать маленький подарок.

Возможно ли это сделать с помощью 3D-печати и, хотя приблизительно, во сколько такой подарок обойдется.

image

Головоломки-сюрпризы — отличный подарок, с которым не будет скучно, да к тому же ещё и овеянный дыханием времён. Это необязательно должен быть именно кубик Рубика:
Не очень понял ваш комментарий. Вы советуете отказаться от задумки с кубиком Рубиком в пользу каких-то других головоломок? А каких других, где их посмотреть? Магазины подарков или головоломок могут оказаться вполне подходящим для этого местом. Можно поискать раритет и по антикварным магазинам, но даже если там вдруг обнаружится шкатулка Лемаршана, цена наверняка будет весьма кусачей.
Другой вариант — найти в советских изданиях соответствующей тематики чертежи головоломки без механики и сделать из них модель для 3D-принтера. шкатулка Лемаршана — это такой фингербокс, или это реальная головоломка, использованная в фильме? Конкретно шкатулка Лемаршана — бутафория, сделанная по мотивам вполне реальных головоломок, которые разные кулибины с давинчами изобретали и иногда даже мастерили для богатых покупателей и властных покровителей.

tmin10

Насчет 3D-печати не подскажу, но в типографии вам могут напечатать ваши фотографии на глянцевой самоклеящейся бумаге, аналогичной той, которую наклеивают на кубики-рубики. Можно каждой наклейке написать маленькие цифры/буквы. Если правильно сложить, то получится некий код/пароль, который нужно куда-то ввести и получить инфу о том где лежит подарок. Нечто подобное уже делал, и с надписями, и с шифрами и с поиском, но все равно, спасибо. Тут прям в голове засела эта тема с кубиком, хочется попробовать именно ее. Напечатать-то можно многое, но сначала вам нужно разработать конструкцию этого кубика. Практически во всех (если не во всех) механизмах кубиков центральные элементы держат все остальные, и если их снять — кубик просто развалится.

Кстати, фото я бы всё таки использовать не стал. В кубике цвета нужны для лёгкости ориентирования, какая деталь откуда. Возможно, будут приемлемы обработанные изображения или рисунки с ограниченным набором тонов, приближенных к основному цвету грани.

И если будете делать механизм — учтите, что центральные элементы могут находиться в любом из 4х положений, и кубик будет выглядеть собранным.

А уж для печати всего этого — понадобиться принтер высокого разрешения. Иначе — мелкие детали либо не пропечатаются вообще, либо будут сильно повреждены при обработке (вам же ужны гладкие поверхности для хорошего скольжения и надёжной приклейки рисунков?)

Читайте также: