Как рассчитать исход простой кости в 3D пространстве - PullRequest
0 голосов
/ 20 марта 2019

Итак, представьте, что у вас есть простая игра в кости с 6 лицами в трехмерном пространстве.Игра в кости была сделана из стандартных элементов HTML и преобразована в трехмерный объект.Начальная позиция всегда одна и та же: 1 вверх, 2 на левой стороне и 3 в направлении вас (область просмотра).

Теперь вы можете вращать кости с помощью transform: rotateX, rotateY, rotateZ.По очевидным причинам вы можете вращать кости только с шагом 90 градусов в каждом направлении (также отрицательно).Теперь какую формулу я должен использовать для вычисления окончательного результата.

Небольшой пример, скажем: X = 3 (270 градусов), Y = 1 (90 градусов), Z = 2 (180 градусов) приведет кбросая 3.

Вы видите какую-либо логику, связанную с этим, потому что я, кажется, не до конца ее понимаю.

1 Ответ

0 голосов
/ 20 марта 2019

Давайте представим все эти числа в виде объекта:

 const faces = { top: 1, left: 2, front: 3, bottom: 4, right: 5, back: 6 };

Теперь, если вы поверните его вправо, например, вы можете поменять местами соответствующие лица:

const rotateToLeft = prev => ({
  top: prev.top,
  left: prev.front,
  front: prev.right,
  bottom: prev.bottom,
  right: prev.back,
  back: prev.left
});

Теперь вы можете сделать это с каждым направлением, а затем просто вращать кости, пока вам нужно получить результат:

 let result = faces;

 for(let turn = 0; turn < 4 + Math.floor((X % 360) / 90); turn++)
   result = rotateToLeft(result);

 // repeat for y and z
...