如何在3D空间中计算简单骰子的结果

时间:2019-03-20 16:08:34

标签: javascript math 3d formula dice

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

现在,您可以使用transform旋转骰子了:rotateX,rotateY,rotateZ。出于显而易见的原因,您只能将骰子每个方向旋转90度(以及负数)。现在,我必须使用哪种公式来计算最终结果。

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

您是否看到其中涉及的任何逻辑,因为我似乎不太了解它。

1 个答案:

答案 0 :(得分:0)

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

 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