math.functions.js 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { __decorate } from "../tslib.es6.js";
  2. import { Vector3 } from "./math.vector.js";
  3. import { nativeOverride } from "../Misc/decorators.js";
  4. // This helper class is only here so we can apply the nativeOverride decorator to functions.
  5. class MathHelpers {
  6. static extractMinAndMaxIndexed(positions, indices, indexStart, indexCount, minimum, maximum) {
  7. for (let index = indexStart; index < indexStart + indexCount; index++) {
  8. const offset = indices[index] * 3;
  9. const x = positions[offset];
  10. const y = positions[offset + 1];
  11. const z = positions[offset + 2];
  12. minimum.minimizeInPlaceFromFloats(x, y, z);
  13. maximum.maximizeInPlaceFromFloats(x, y, z);
  14. }
  15. }
  16. static extractMinAndMax(positions, start, count, stride, minimum, maximum) {
  17. for (let index = start, offset = start * stride; index < start + count; index++, offset += stride) {
  18. const x = positions[offset];
  19. const y = positions[offset + 1];
  20. const z = positions[offset + 2];
  21. minimum.minimizeInPlaceFromFloats(x, y, z);
  22. maximum.maximizeInPlaceFromFloats(x, y, z);
  23. }
  24. }
  25. }
  26. __decorate([
  27. nativeOverride.filter((...[positions, indices]) => !Array.isArray(positions) && !Array.isArray(indices))
  28. // eslint-disable-next-line @typescript-eslint/naming-convention
  29. ], MathHelpers, "extractMinAndMaxIndexed", null);
  30. __decorate([
  31. nativeOverride.filter((...[positions]) => !Array.isArray(positions))
  32. // eslint-disable-next-line @typescript-eslint/naming-convention
  33. ], MathHelpers, "extractMinAndMax", null);
  34. /**
  35. * Extracts minimum and maximum values from a list of indexed positions
  36. * @param positions defines the positions to use
  37. * @param indices defines the indices to the positions
  38. * @param indexStart defines the start index
  39. * @param indexCount defines the end index
  40. * @param bias defines bias value to add to the result
  41. * @returns minimum and maximum values
  42. */
  43. export function extractMinAndMaxIndexed(positions, indices, indexStart, indexCount, bias = null) {
  44. const minimum = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
  45. const maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
  46. MathHelpers.extractMinAndMaxIndexed(positions, indices, indexStart, indexCount, minimum, maximum);
  47. if (bias) {
  48. minimum.x -= minimum.x * bias.x + bias.y;
  49. minimum.y -= minimum.y * bias.x + bias.y;
  50. minimum.z -= minimum.z * bias.x + bias.y;
  51. maximum.x += maximum.x * bias.x + bias.y;
  52. maximum.y += maximum.y * bias.x + bias.y;
  53. maximum.z += maximum.z * bias.x + bias.y;
  54. }
  55. return {
  56. minimum: minimum,
  57. maximum: maximum,
  58. };
  59. }
  60. /**
  61. * Extracts minimum and maximum values from a list of positions
  62. * @param positions defines the positions to use
  63. * @param start defines the start index in the positions array
  64. * @param count defines the number of positions to handle
  65. * @param bias defines bias value to add to the result
  66. * @param stride defines the stride size to use (distance between two positions in the positions array)
  67. * @returns minimum and maximum values
  68. */
  69. export function extractMinAndMax(positions, start, count, bias = null, stride) {
  70. const minimum = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
  71. const maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
  72. if (!stride) {
  73. stride = 3;
  74. }
  75. MathHelpers.extractMinAndMax(positions, start, count, stride, minimum, maximum);
  76. if (bias) {
  77. minimum.x -= minimum.x * bias.x + bias.y;
  78. minimum.y -= minimum.y * bias.x + bias.y;
  79. minimum.z -= minimum.z * bias.x + bias.y;
  80. maximum.x += maximum.x * bias.x + bias.y;
  81. maximum.y += maximum.y * bias.x + bias.y;
  82. maximum.z += maximum.z * bias.x + bias.y;
  83. }
  84. return {
  85. minimum: minimum,
  86. maximum: maximum,
  87. };
  88. }
  89. //# sourceMappingURL=math.functions.js.map