Визуализация кубов из фильма Куб.
Техзадание:
✗ Генерация Куба (процент заполненности — входной параметр) и перемещение комнат в соответствии с фильмом
✗ Трехмерная визуализация
✗ Плавная анимация перемещений
✗ Число одновременно перемещающихся кубов задается пользователем. При отсутствии значения (или значении, которое невозможно соблюсти) используется максимум возможного.
Некоторые маленькие todo:
✗ Возможность задавать высоту canvas перетаскиванием мышкой
✓ Человеческий UI
Используется javascript и three.js.
Куб состоит из нагромождения кубических комнат. Максимальный размер Куба по каждому из измерений — 26 комнат. Комнаты могут не стоять друг на друге, но должны соприкасаться как минимум одной гранью в любой момент времени.
Каждая комната перемещается по замкнутому маршруту из трех позиций, заданных декартовыми координатами.
Маршрут каждой комнаты задан исходной координатой и вектором смещений, которые закодированы в её Номер.
Номер — три группы по три цифры (например, 826 390 175).
Исходная координата комнаты получается сложением цифр в каждой группе: (8+2+6, 3+9+0, 1+7+5) → (16, 12, 13).
Векторы смещений получаются путем вычитания цифр в каждой группе (второй из первой, третья из второй, первая из третьей):
826: 8-2=6 2-6=-4 6-8=-2
390: 3-9=-6 9-0=9 0-3=-3
175: 1-7=-6 7-5=2 5-1=4
Полученные векторы: (6,-6,-6), (-4,9,2), (-2,-3,4).
Координата получаются путем сложения исходной координаты с векторами.
Итоговый маршрут для комнаты-примера:
(16, 12, 13) + (6,-6,-6) = (22, 6, 7)
(22, 6, 7) + (-4, 9, 2) = (18, 15, 9)
(18, 15, 9) + (-2, -3, 4) = (16, 12, 13)
Также существует единственная комната (Мост), имеющая координату, равную 27.
