MathUtil.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import Double from '../../../../java/lang/Double'
  2. export default class MathUtil {
  3. static log10(x) {
  4. const ln = Math.log(x)
  5. if (Double.isInfinite(ln)) return ln
  6. if (Double.isNaN(ln)) return ln
  7. return ln / MathUtil.LOG_10
  8. }
  9. static min(v1, v2, v3, v4) {
  10. let min = v1
  11. if (v2 < min) min = v2
  12. if (v3 < min) min = v3
  13. if (v4 < min) min = v4
  14. return min
  15. }
  16. static clamp() {
  17. if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {
  18. const x = arguments[0], min = arguments[1], max = arguments[2]
  19. if (x < min) return min
  20. if (x > max) return max
  21. return x
  22. } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {
  23. const x = arguments[0], min = arguments[1], max = arguments[2]
  24. if (x < min) return min
  25. if (x > max) return max
  26. return x
  27. }
  28. }
  29. static wrap(index, max) {
  30. if (index < 0)
  31. return max - -index % max
  32. return index % max
  33. }
  34. static max() {
  35. if (arguments.length === 3) {
  36. const v1 = arguments[0], v2 = arguments[1], v3 = arguments[2]
  37. let max = v1
  38. if (v2 > max) max = v2
  39. if (v3 > max) max = v3
  40. return max
  41. } else if (arguments.length === 4) {
  42. const v1 = arguments[0], v2 = arguments[1], v3 = arguments[2], v4 = arguments[3]
  43. let max = v1
  44. if (v2 > max) max = v2
  45. if (v3 > max) max = v3
  46. if (v4 > max) max = v4
  47. return max
  48. }
  49. }
  50. static average(x1, x2) {
  51. return (x1 + x2) / 2.0
  52. }
  53. }
  54. MathUtil.LOG_10 = Math.log(10)