MathUtils.euclideanModulo 的用途是什么?它与常规模数有何不同?

What is the purpose of MathUtils.euclideanModulo, and how is it different from a regular modulo?

我对threejs中mathuils的euclideanModulo方法有点疑惑。 我已经知道模符号的作用,但是 euclideanModulo 看起来很不一样。

( ( n % m ) + m ) % m

我试着查找欧几里德的语义,但它只说了这个:

relating to or denoting the system of geometry based on the work of Euclid and corresponding to the geometry of ordinary experience.

谁能解释一下?我在任何地方都找不到进一步的解释?

使用负数时会出现 well-documented Javascript 模数错误。您可以将 x % 4 视为数字轮:

  • 当 x 从 0 变为正数时,您的结果是:0, 1, 2, 3, 0, 1, 2, ...
  • 当x从0变为负数时,结果为:0, 3, 2, 1, 0, 3, 2, ...

但在 JavaScript 中,当您执行 -5 % 4 时,您会得到 -1,这不是正确答案。它甚至不在可能的答案列表中。怎么可能有负余数?!答案应该是3。这是正确答案与错误 Javascript 答案的列表:

1 % 4 = 1   // JS gives you 1
0 % 4 = 0   // JS gives you 0
-1 % 4 = 3  // JS gives you -1
-2 % 4 = 2  // JS gives you -2
-3 % 4 = 1  // JS gives you -3
-4 % 4 = 0  // JS gives you -0
-5 % 4 = 3  // JS gives you -1

为了让您的生活更轻松,Three.js 为您提供了一个实用程序来获得正确答案以规避此 JavaScript 错误。 THREE.MathUtils.euclideanModulo(-5, 4) 给你正确答案 3.