如何计算 3D 中简单骰子的结果 space

How to calculate the outcome of a simple dice in 3D space

因此,假设您有一个简单的 3D 骰子,有 6 个面 space。 骰子由标准 HTML 元素制成,并转换为 3D 对象。起始位置始终相同,1 个朝上,2 个在左侧,3 个朝向您(视口)。

现在您可以使用变换来旋转骰子:rotateX、rotateY、rotateZ。出于明显的原因,您只能将骰子在每个方向上旋转 90 度(负方向也是如此)。现在我要用什么样的公式来计算最后的结果呢

小例子可以说:X = 3 (270deg), Y = 1 (90deg), Z = 2 (180deg) 将导致投掷 3.

你看到这里面有什么逻辑吗,因为我似乎没有完全理解它。

让我们将所有这些数字表示为一个对象:

 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