如何计算 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
因此,假设您有一个简单的 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