@itwin/core-geometry 4.0.0-dev.6 → 4.0.0-dev.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/lib/cjs/Geometry.d.ts +3 -3
  2. package/lib/cjs/Geometry.d.ts.map +1 -1
  3. package/lib/cjs/Geometry.js +27 -11
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/curve/CurveCurve.d.ts +11 -8
  6. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  7. package/lib/cjs/curve/CurveCurve.js +16 -12
  8. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  9. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +5 -1
  10. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  11. package/lib/cjs/curve/CurveCurveIntersectXY.js +11 -10
  12. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  13. package/lib/cjs/geometry3d/Angle.d.ts +18 -0
  14. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  15. package/lib/cjs/geometry3d/Angle.js +38 -0
  16. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  17. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +1 -0
  18. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  19. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +3 -0
  20. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  21. package/lib/cjs/geometry3d/Matrix3d.d.ts +171 -118
  22. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  23. package/lib/cjs/geometry3d/Matrix3d.js +448 -417
  24. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  25. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -13
  26. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  27. package/lib/cjs/geometry3d/Point3dVector3d.js +15 -13
  28. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  29. package/lib/cjs/geometry3d/Segment1d.d.ts +1 -1
  30. package/lib/cjs/geometry3d/Segment1d.js +1 -1
  31. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  32. package/lib/cjs/numerics/Polynomials.d.ts +12 -0
  33. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  34. package/lib/cjs/numerics/Polynomials.js +14 -0
  35. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  36. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -0
  37. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  38. package/lib/cjs/polyface/PolyfaceBuilder.js +46 -6
  39. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  40. package/lib/cjs/polyface/PolyfaceQuery.d.ts +54 -0
  41. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  42. package/lib/cjs/polyface/PolyfaceQuery.js +71 -1
  43. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  44. package/lib/cjs/polyface/multiclip/OffsetMeshContext.d.ts +202 -0
  45. package/lib/cjs/polyface/multiclip/OffsetMeshContext.d.ts.map +1 -0
  46. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +1038 -0
  47. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -0
  48. package/lib/cjs/serialization/GeometrySamples.d.ts +4 -1
  49. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  50. package/lib/cjs/serialization/GeometrySamples.js +14 -6
  51. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  52. package/lib/cjs/topology/Graph.d.ts +113 -7
  53. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  54. package/lib/cjs/topology/Graph.js +185 -7
  55. package/lib/cjs/topology/Graph.js.map +1 -1
  56. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +38 -0
  57. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -0
  58. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +82 -0
  59. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -0
  60. package/lib/esm/Geometry.d.ts +3 -3
  61. package/lib/esm/Geometry.d.ts.map +1 -1
  62. package/lib/esm/Geometry.js +27 -11
  63. package/lib/esm/Geometry.js.map +1 -1
  64. package/lib/esm/curve/CurveCurve.d.ts +11 -8
  65. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  66. package/lib/esm/curve/CurveCurve.js +16 -12
  67. package/lib/esm/curve/CurveCurve.js.map +1 -1
  68. package/lib/esm/curve/CurveCurveIntersectXY.d.ts +5 -1
  69. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  70. package/lib/esm/curve/CurveCurveIntersectXY.js +11 -10
  71. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  72. package/lib/esm/geometry3d/Angle.d.ts +18 -0
  73. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  74. package/lib/esm/geometry3d/Angle.js +38 -0
  75. package/lib/esm/geometry3d/Angle.js.map +1 -1
  76. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +1 -0
  77. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  78. package/lib/esm/geometry3d/CoincidentGeometryOps.js +3 -0
  79. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  80. package/lib/esm/geometry3d/Matrix3d.d.ts +171 -118
  81. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  82. package/lib/esm/geometry3d/Matrix3d.js +448 -417
  83. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  84. package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -13
  85. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  86. package/lib/esm/geometry3d/Point3dVector3d.js +15 -13
  87. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  88. package/lib/esm/geometry3d/Segment1d.d.ts +1 -1
  89. package/lib/esm/geometry3d/Segment1d.js +1 -1
  90. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  91. package/lib/esm/numerics/Polynomials.d.ts +12 -0
  92. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  93. package/lib/esm/numerics/Polynomials.js +14 -0
  94. package/lib/esm/numerics/Polynomials.js.map +1 -1
  95. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -0
  96. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  97. package/lib/esm/polyface/PolyfaceBuilder.js +46 -6
  98. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  99. package/lib/esm/polyface/PolyfaceQuery.d.ts +54 -0
  100. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  101. package/lib/esm/polyface/PolyfaceQuery.js +69 -0
  102. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  103. package/lib/esm/polyface/multiclip/OffsetMeshContext.d.ts +202 -0
  104. package/lib/esm/polyface/multiclip/OffsetMeshContext.d.ts.map +1 -0
  105. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +1032 -0
  106. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -0
  107. package/lib/esm/serialization/GeometrySamples.d.ts +4 -1
  108. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  109. package/lib/esm/serialization/GeometrySamples.js +14 -6
  110. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  111. package/lib/esm/topology/Graph.d.ts +113 -7
  112. package/lib/esm/topology/Graph.d.ts.map +1 -1
  113. package/lib/esm/topology/Graph.js +185 -7
  114. package/lib/esm/topology/Graph.js.map +1 -1
  115. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +38 -0
  116. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -0
  117. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +78 -0
  118. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -0
  119. package/package.json +4 -4
@@ -292,9 +292,9 @@ export declare class Geometry {
292
292
  * */
293
293
  static cyclic3dAxis(axis: number): number;
294
294
  /** Return the AxisOrder for which axisIndex is the first named axis.
295
- * * `axisIndex===0`returns AxisOrder.XYZ
296
- * * `axisIndex===1`returns AxisOrder.YZX
297
- * * `axisIndex===2`returns AxisOrder.ZXY
295
+ * * `axisIndex === 0` returns `AxisOrder.XYZ`
296
+ * * `axisIndex === 1` returns `AxisOrder.YZX`
297
+ * * `axisIndex === 2` returns `AxisOrder.ZXY`
298
298
  */
299
299
  static axisIndexToRightHandedAxisOrder(axisIndex: AxisIndex): AxisOrder;
300
300
  /** Return the largest absolute distance from a to either of b0 or b1 */
@@ -1 +1 @@
1
- {"version":3,"file":"Geometry.d.ts","sourceRoot":"","sources":["../../src/Geometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Geometry.d.ts","sourceRoot":"","sources":["../../src/Geometry.ts"],"names":[],"mappings":"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"}
@@ -281,9 +281,9 @@ class Geometry {
281
281
  return 2 - ((-axis - 1) % 3);
282
282
  }
283
283
  /** Return the AxisOrder for which axisIndex is the first named axis.
284
- * * `axisIndex===0`returns AxisOrder.XYZ
285
- * * `axisIndex===1`returns AxisOrder.YZX
286
- * * `axisIndex===2`returns AxisOrder.ZXY
284
+ * * `axisIndex === 0` returns `AxisOrder.XYZ`
285
+ * * `axisIndex === 1` returns `AxisOrder.YZX`
286
+ * * `axisIndex === 2` returns `AxisOrder.ZXY`
287
287
  */
288
288
  static axisIndexToRightHandedAxisOrder(axisIndex) {
289
289
  if (axisIndex === 0)
@@ -295,7 +295,9 @@ class Geometry {
295
295
  return Geometry.axisIndexToRightHandedAxisOrder(Geometry.cyclic3dAxis(axisIndex));
296
296
  }
297
297
  /** Return the largest absolute distance from a to either of b0 or b1 */
298
- static maxAbsDiff(a, b0, b1) { return Math.max(Math.abs(a - b0), Math.abs(a - b1)); }
298
+ static maxAbsDiff(a, b0, b1) {
299
+ return Math.max(Math.abs(a - b0), Math.abs(a - b1));
300
+ }
299
301
  /** Return the largest absolute absolute value among x,y,z */
300
302
  static maxAbsXYZ(x, y, z) {
301
303
  return Geometry.maxXYZ(Math.abs(x), Math.abs(y), Math.abs(z));
@@ -340,19 +342,33 @@ class Geometry {
340
342
  return q;
341
343
  }
342
344
  /** Return the hypotenuse `sqrt(x*x + y*y)`. This is much faster than `Math.hypot(x,y)`. */
343
- static hypotenuseXY(x, y) { return Math.sqrt(x * x + y * y); }
345
+ static hypotenuseXY(x, y) {
346
+ return Math.sqrt(x * x + y * y);
347
+ }
344
348
  /** Return the squared `hypotenuse (x*x + y*y)`. */
345
- static hypotenuseSquaredXY(x, y) { return x * x + y * y; }
349
+ static hypotenuseSquaredXY(x, y) {
350
+ return x * x + y * y;
351
+ }
346
352
  /** Return the square of x */
347
- static square(x) { return x * x; }
353
+ static square(x) {
354
+ return x * x;
355
+ }
348
356
  /** Return the hypotenuse `sqrt(x*x + y*y + z*z)`. This is much faster than `Math.hypot(x,y,z)`. */
349
- static hypotenuseXYZ(x, y, z) { return Math.sqrt(x * x + y * y + z * z); }
357
+ static hypotenuseXYZ(x, y, z) {
358
+ return Math.sqrt(x * x + y * y + z * z);
359
+ }
350
360
  /** Return the squared hypotenuse `(x*x + y*y + z*z)`. This is much faster than `Math.hypot(x,y,z)`. */
351
- static hypotenuseSquaredXYZ(x, y, z) { return x * x + y * y + z * z; }
361
+ static hypotenuseSquaredXYZ(x, y, z) {
362
+ return x * x + y * y + z * z;
363
+ }
352
364
  /** Return the (full 4d) hypotenuse `sqrt(x*x + y*y + z*z + w*w)`. This is much faster than `Math.hypot(x,y,z,w)`. */
353
- static hypotenuseXYZW(x, y, z, w) { return Math.sqrt(x * x + y * y + z * z + w * w); }
365
+ static hypotenuseXYZW(x, y, z, w) {
366
+ return Math.sqrt(x * x + y * y + z * z + w * w);
367
+ }
354
368
  /** Return the squared hypotenuse `(x*x + y*y + z*z+w*w)`. This is much faster than `Math.hypot(x,y,z)`. */
355
- static hypotenuseSquaredXYZW(x, y, z, w) { return x * x + y * y + z * z + w * w; }
369
+ static hypotenuseSquaredXYZW(x, y, z, w) {
370
+ return x * x + y * y + z * z + w * w;
371
+ }
356
372
  /**
357
373
  * Return the distance between xy points given as numbers.
358
374
  * @param x0 x coordinate of point 0
@@ -1 +1 @@
1
- {"version":3,"file":"Geometry.js","sourceRoot":"","sources":["../../src/Geometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n\r\nimport { AngleSweep } from \"./geometry3d/AngleSweep\";\r\nimport { Point2d, Vector2d, XY } from \"./geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d, XYZ } from \"./geometry3d/Point3dVector3d\";\r\nimport { XAndY } from \"./geometry3d/XYZProps\";\r\nimport { Point4d } from \"./geometry4d/Point4d\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\n\r\n/** Enumeration of the 6 possible orderings of XYZ axis order\r\n *\r\n * * **Note:** There are 3 axis order with right hand system (XYZ = 0, YZX = 1, ZXY = 2) and 3 axis order with\r\n * left hand system (XZY = 4, YXZ = 5, ZYX = 6). Note that AxisOrder is encoding the handedness as well. Cross\r\n * product of the i_th axis in an ordering (i=0,1,2), with the i+1_th in that ordering, will produce the i+2_th\r\n * axis in that ordering.\r\n * @public\r\n */\r\nexport enum AxisOrder {\r\n /** Right handed system, X then Y then Z */\r\n XYZ = 0, /* eslint-disable-line @typescript-eslint/no-shadow */\r\n /** Right handed system, Y then Z then X */\r\n YZX = 1,\r\n /** Right handed system, Z then X then Y */\r\n ZXY = 2,\r\n /** Left handed system, X then Z then Y */\r\n XZY = 4,\r\n /** Left handed system, Y then X then Z */\r\n YXZ = 5,\r\n /** Left handed system, Z then Y then X */\r\n ZYX = 6,\r\n}\r\n/** Enumeration of numeric indices of 3 axes AxisIndex.X, AxisIndex.Y, AxisIndex.Z\r\n * @public\r\n */\r\nexport enum AxisIndex {\r\n /** x axis is index 0 */\r\n X = 0,\r\n /** y axis is index 1 */\r\n Y = 1,\r\n /** 2 axis is index 2 */\r\n Z = 2,\r\n}\r\n/** Standard views. Used in `Matrix3d.createStandardViewAxes(index: StandardViewIndex, invert: boolean)`\r\n * @public\r\n */\r\nexport enum StandardViewIndex {\r\n /** X to right, Y up */\r\n Top = 1,\r\n /** X to right, negative Y up */\r\n Bottom = 2,\r\n /** negative Y to right, Z up */\r\n Left = 3,\r\n /** Y to right, Z up */\r\n Right = 4,\r\n /** X to right, Z up */\r\n Front = 5,\r\n /** negative X to right, Z up */\r\n Back = 6,\r\n /** isometric: view towards origin from (-1,-1,1) */\r\n Iso = 7, //\r\n /** right isometric: view towards origin from (1,-1,1) */\r\n RightIso = 8,\r\n}\r\n/** Enumeration among choice for how a coordinate transformation should incorporate scaling.\r\n * @public\r\n */\r\nexport enum AxisScaleSelect {\r\n /** All axes of unit length. */\r\n Unit = 0,\r\n /** On each axis, the vector length matches the longest side of the range of the data. */\r\n LongestRangeDirection = 1,\r\n /** On each axis, the vector length matches he length of the corresponding edge of the range. */\r\n NonUniformRangeContainment = 2,\r\n}\r\n/** object with a radians value and its associated cosine and sine values.\r\n * @public\r\n */\r\nexport interface TrigValues {\r\n /** the cosine value */\r\n c: number;\r\n /** the sine value */\r\n s: number;\r\n /** the radians value */\r\n radians: number;\r\n}\r\n/**\r\n * Interface so various plane representations can be used by algorithms that just want altitude evaluations.\r\n *\r\n * Specific implementors are\r\n * * Plane3dByOriginAndUnitNormal\r\n * * Point4d (used for homogeneous plane coefficients)\r\n * @public\r\n */\r\nexport interface PlaneAltitudeEvaluator {\r\n /**\r\n * Return the altitude of the point from the plane.\r\n * @param point point for evaluation\r\n */\r\n altitude(point: Point3d): number;\r\n /**\r\n * Return the altitude of the point from the plane, with the point supplied as simple x,y,z\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @param z z coordinate\r\n */\r\n altitudeXYZ(x: number, y: number, z: number): number;\r\n /**\r\n * Return the derivative of altitude wrt motion along a vector.\r\n * @param point point for evaluation\r\n */\r\n velocity(vector: Vector3d): number;\r\n /**\r\n * Return the derivative of altitude wrt motion along a vector given by components\r\n * @param point point for evaluation\r\n */\r\n velocityXYZ(x: number, y: number, z: number): number;\r\n /**\r\n * Return the weighted altitude\r\n * @param point xyzw data.\r\n */\r\n weightedAltitude(point: Point4d): number;\r\n /** x part of normal vector */\r\n normalX(): number;\r\n /** x part of normal vector */\r\n normalY(): number;\r\n /** x part of normal vector */\r\n normalZ(): number;\r\n}\r\n/**\r\n * Interface for `toJSON` and `setFromJSON` methods\r\n * @public\r\n */\r\nexport interface BeJSONFunctions {\r\n /**\r\n * Set content from a JSON object.\r\n * If the json object is undefined or unrecognized, always set a default value.\r\n */\r\n setFromJSON(json: any): void;\r\n /** Return a json object with this object's contents. */\r\n toJSON(): any;\r\n}\r\n/** The Properties for a JSON representation of an Angle.\r\n * If value is a number, it is in *degrees*.\r\n * If value is an object, it can have either degrees or radians.\r\n * @public\r\n */\r\nexport type AngleProps =\r\n { degrees: number } |\r\n { radians: number } |\r\n { _radians: number } |\r\n { _degrees: number } |\r\n number;\r\n/** The Properties for a JSON representation of an AngleSweep.\r\n * * The json data is always start and end angles as a pair in an array.\r\n * If AngleProps data is an array of two numbers, it is an angle in degrees.\r\n * If the AngleProps is an object with key degrees, the degrees value must be an array with the two degrees angles as numbers\r\n * If the AngleProps is an object with key radians, the radians value must be an array with the two radians angles as numbers\r\n * @public\r\n */\r\nexport type AngleSweepProps =\r\n AngleSweep |\r\n { degrees: [number, number] } |\r\n { radians: [number, number] } |\r\n [number, number];\r\n\r\n/**\r\n * Class containing static methods for typical numeric operations.\r\n * * Experimentally, methods like Geometry.hypotenuse are observed to be faster than the system intrinsics.\r\n * * This is probably due to\r\n * * Fixed length arg lists\r\n * * strongly typed parameters\r\n * @public\r\n */\r\nexport class Geometry {\r\n /** Tolerance for small distances in metric coordinates */\r\n public static readonly smallMetricDistance = 1.0e-6;\r\n /** Square of `smallMetricTolerance` */\r\n public static readonly smallMetricDistanceSquared = 1.0e-12;\r\n /** tolerance for small angle measured in radians. */\r\n public static readonly smallAngleRadians = 1.0e-12;\r\n /** square of `smallAngleRadians` */\r\n public static readonly smallAngleRadiansSquared = 1.0e-24;\r\n /** tolerance for small angle measured in degrees. */\r\n public static readonly smallAngleDegrees = 5.7e-11;\r\n /** tolerance for small angle measured in arc-seconds. */\r\n public static readonly smallAngleSeconds = 2e-7;\r\n /** numeric value that may be considered huge for a ratio of numbers.\r\n * * Note that the \"allowed\" result value is vastly larger than 1.\r\n */\r\n public static readonly largeFractionResult = 1.0e10;\r\n /** numeric value that may be considered zero for fractions between 0 and 1. */\r\n public static readonly smallFraction = 1.0e-10;\r\n /** numeric value that may considered huge for numbers expected to be coordinates.\r\n * * This allows larger results than `largeFractionResult`.\r\n */\r\n public static readonly largeCoordinateResult = 1.0e13;\r\n /** numeric value that may considered infinite for metric coordinates.\r\n * * This coordinate should be used only as a placeholder indicating \"at infinity\" -- computing actual points at this coordinate invites numerical problems.\r\n */\r\n public static readonly hugeCoordinate = 1.0e12;\r\n /** Test if absolute value of x is huge.\r\n * * See `Geometry.hugeCoordinate`\r\n */\r\n public static isHugeCoordinate(x: number): boolean {\r\n return x > this.hugeCoordinate || x < - this.hugeCoordinate;\r\n }\r\n\r\n /** Test if a number is odd.\r\n */\r\n public static isOdd(x: number): boolean {\r\n return (x & (0x01)) === 1;\r\n }\r\n /** Radians value for full circle 2PI radians minus `smallAngleRadians` */\r\n public static readonly fullCircleRadiansMinusSmallAngle = 2.0 * Math.PI - 1.0e-12; // smallAngleRadians less than 360degrees\r\n /** Correct `distance` to zero if undefined or smaller than metric tolerance. Otherwise return it unchanged. */\r\n public static correctSmallMetricDistance(distance: number | undefined, replacement: number = 0.0): number {\r\n if (distance === undefined || Math.abs(distance) < Geometry.smallMetricDistance) {\r\n return replacement;\r\n }\r\n return distance;\r\n }\r\n /**\r\n * If `a` is large enough for safe division, return `1/a`, using Geometry.smallMetricDistance as the tolerance for declaring it as divide by zero. Otherwise return `undefined`.\r\n * @param a denominator of division\r\n */\r\n public static inverseMetricDistance(a: number): number | undefined {\r\n return (Math.abs(a) <= Geometry.smallMetricDistance) ? undefined : 1.0 / a;\r\n }\r\n /**\r\n * If `a` is large enough, return `1/a`, using the square of Geometry.smallMetricDistance as the tolerance for declaring it as divide by zero. Otherwise return `undefined`.\r\n * @param a denominator of division\r\n */\r\n public static inverseMetricDistanceSquared(a: number): number | undefined {\r\n return (Math.abs(a) <= Geometry.smallMetricDistanceSquared) ? undefined : 1.0 / a;\r\n }\r\n /** Boolean test for metric coordinate near-equality */\r\n public static isSameCoordinate(x: number, y: number, tol?: number): boolean {\r\n if (tol)\r\n return Math.abs(x - y) < Math.abs(tol);\r\n return Math.abs(x - y) < Geometry.smallMetricDistance;\r\n }\r\n /** Boolean test for metric coordinate near-equality, with toleranceFactor applied to the usual smallMetricDistance */\r\n public static isSameCoordinateWithToleranceFactor(x: number, y: number, toleranceFactor: number): boolean {\r\n return Geometry.isSameCoordinate(x, y, toleranceFactor * Geometry.smallMetricDistance);\r\n }\r\n /** Boolean test for metric coordinate near-equality of x, y pair */\r\n public static isSameCoordinateXY(x0: number, y0: number, x1: number, y1: number, tol: number = Geometry.smallMetricDistance): boolean {\r\n let d = x1 - x0;\r\n if (d < 0)\r\n d = -d;\r\n if (d > tol)\r\n return false;\r\n d = y1 - y0;\r\n if (d < 0)\r\n d = -d;\r\n return d < tol;\r\n }\r\n /** Boolean test for squared metric coordinate near-equality */\r\n public static isSameCoordinateSquared(x: number, y: number): boolean {\r\n return Math.abs(Math.sqrt(x) - Math.sqrt(y)) < Geometry.smallMetricDistance;\r\n }\r\n /** boolean test for small `dataA.distance (dataB)` within `smallMetricDistance` */\r\n public static isSamePoint3d(dataA: Point3d, dataB: Point3d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for distance between `XYZ` objects within `smallMetricDistance`\r\n * * Note that Point3d and Vector3d are both derived from XYZ, so this method tolerates mixed types.\r\n */\r\n public static isSameXYZ(dataA: XYZ, dataB: XYZ): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSamePoint3dXY(dataA: Point3d, dataB: Point3d): boolean { return dataA.distanceXY(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSameVector3d(dataA: Vector3d, dataB: Vector3d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSamePoint2d(dataA: Point2d, dataB: Point2d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSameVector2d(dataA: Vector2d, dataB: Vector2d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /**\r\n * Lexical comparison of (a.x,a.y) (b.x,b.y) with x as first test, y second.\r\n * * This is appropriate for a horizontal sweep in the plane.\r\n */\r\n public static lexicalXYLessThan(a: XY | XYZ, b: XY | XYZ): -1 | 0 | 1 {\r\n if (a.x < b.x)\r\n return -1;\r\n else if (a.x > b.x)\r\n return 1;\r\n if (a.y < b.y)\r\n return -1;\r\n else if (a.y > b.y)\r\n return 1;\r\n return 0;\r\n }\r\n /**\r\n * Lexical comparison of (a.x,a.y) (b.x,b.y) with y as first test, x second.\r\n * * This is appropriate for a vertical sweep in the plane.\r\n */\r\n public static lexicalYXLessThan(a: XY | XYZ, b: XY | XYZ): -1 | 0 | 1 {\r\n if (a.y < b.y)\r\n return -1;\r\n else if (a.y > b.y)\r\n return 1;\r\n if (a.x < b.x)\r\n return -1;\r\n else if (a.x > b.x)\r\n return 1;\r\n return 0;\r\n }\r\n /**\r\n * Lexical test, based on x first, y second, z third.\r\n */\r\n public static lexicalXYZLessThan(a: XYZ, b: XYZ): -1 | 0 | 1 {\r\n if (a.x < b.x)\r\n return -1;\r\n else if (a.x > b.x)\r\n return 1;\r\n if (a.y < b.y)\r\n return -1;\r\n else if (a.y > b.y)\r\n return 1;\r\n if (a.z < b.z)\r\n return -1;\r\n else if (a.z > b.z)\r\n return 1;\r\n return 0;\r\n }\r\n /** Test if `value` is small compared to `smallAngleRadians`.\r\n * * This is appropriate if `value` is know to be a typical 0..1 fraction.\r\n */\r\n public static isSmallRelative(value: number): boolean {\r\n return Math.abs(value) < Geometry.smallAngleRadians;\r\n }\r\n /** Test if `value` is small compared to `smallAngleRadians` */\r\n public static isSmallAngleRadians(value: number): boolean {\r\n return Math.abs(value) < Geometry.smallAngleRadians;\r\n }\r\n /** Returns true if both values are undefined or if both are defined and almost equal within tolerance.\r\n * If one is undefined and the other is not then false is returned.\r\n */\r\n public static isAlmostEqualOptional(a: number | undefined, b: number | undefined, tolerance: number): boolean {\r\n if (a !== undefined && b !== undefined) {\r\n if (Math.abs(a - b) > tolerance)\r\n return false;\r\n } else {\r\n if (a !== undefined || b !== undefined)\r\n return false;\r\n }\r\n return true;\r\n }\r\n /** Toleranced equality test, using tolerance `smallAngleRadians * ( 1 + abs(a) + (abs(b)))`\r\n * * Effectively an absolute tolerance of `smallAngleRadians`, with tolerance increasing for larger values of a and b.\r\n */\r\n public static isAlmostEqualNumber(a: number, b: number): boolean {\r\n const sumAbs = 1.0 + Math.abs(a) + Math.abs(b);\r\n return Math.abs(a - b) <= Geometry.smallAngleRadians * sumAbs;\r\n }\r\n /** Toleranced equality test, using tolerance `smallAngleRadians * ( 1 + abs(a) + (abs(b)))`\r\n * * Effectively an absolute tolerance of `smallAngleRadians`, with tolerance increasing for larger values of a and b.\r\n */\r\n public static isAlmostEqualXAndY(a: XAndY, b: XAndY): boolean {\r\n const sumAbs = 1.0 + Math.abs(a.x) + Math.abs(b.x) + Math.abs(a.y) + Math.abs(b.y);\r\n const tolerance = Geometry.smallAngleRadians * sumAbs;\r\n return Math.abs(a.x - b.x) <= tolerance && Math.abs(a.y - b.y) <= tolerance;\r\n }\r\n /**\r\n * Toleranced equality test, using caller-supplied tolerance.\r\n * If no tolerance is given, use smallMetricDistance.\r\n */\r\n public static isDistanceWithinTol(distance: number, tol?: number): boolean {\r\n if (tol !== undefined)\r\n return Math.abs(distance) <= Math.abs(tol);\r\n return Math.abs(distance) <= Geometry.smallMetricDistance;\r\n }\r\n /** Toleranced equality test, using `smallMetricDistance` tolerance. */\r\n public static isSmallMetricDistance(distance: number): boolean {\r\n return Math.abs(distance) <= Geometry.smallMetricDistance;\r\n }\r\n\r\n /** Toleranced equality, using `smallMetricDistanceSquared` tolerance. */\r\n public static isSmallMetricDistanceSquared(distanceSquared: number): boolean {\r\n return Math.abs(distanceSquared) <= Geometry.smallMetricDistanceSquared;\r\n }\r\n /**\r\n * Return `axis modulo 3` with proper handling of negative indices\r\n * ..., -3:x, -2:y, -1:z, 0:x, 1:y, 2:z, 3:x, 4:y, 5:z, 6:x, 7:y, 8:z, ...\r\n * */\r\n public static cyclic3dAxis(axis: number): number {\r\n /* Direct test for the most common cases, avoid modulo */\r\n if (axis >= 0) {\r\n if (axis < 3)\r\n return axis;\r\n if (axis < 6)\r\n return axis - 3;\r\n return axis % 3;\r\n }\r\n const j = axis + 3;\r\n if (j >= 0)\r\n return j;\r\n return 2 - ((-axis - 1) % 3);\r\n }\r\n /** Return the AxisOrder for which axisIndex is the first named axis.\r\n * * `axisIndex===0`returns AxisOrder.XYZ\r\n * * `axisIndex===1`returns AxisOrder.YZX\r\n * * `axisIndex===2`returns AxisOrder.ZXY\r\n */\r\n public static axisIndexToRightHandedAxisOrder(axisIndex: AxisIndex): AxisOrder {\r\n if (axisIndex === 0) return AxisOrder.XYZ;\r\n if (axisIndex === 1) return AxisOrder.YZX;\r\n if (axisIndex === 2) return AxisOrder.ZXY;\r\n return Geometry.axisIndexToRightHandedAxisOrder(Geometry.cyclic3dAxis(axisIndex));\r\n }\r\n /** Return the largest absolute distance from a to either of b0 or b1 */\r\n public static maxAbsDiff(a: number, b0: number, b1: number): number { return Math.max(Math.abs(a - b0), Math.abs(a - b1)); }\r\n /** Return the largest absolute absolute value among x,y,z */\r\n public static maxAbsXYZ(x: number, y: number, z: number): number {\r\n return Geometry.maxXYZ(Math.abs(x), Math.abs(y), Math.abs(z));\r\n }\r\n /** Return the largest absolute absolute value among x,y */\r\n public static maxAbsXY(x: number, y: number): number {\r\n return Geometry.maxXY(Math.abs(x), Math.abs(y));\r\n }\r\n /** Return the largest signed value among a, b, c */\r\n public static maxXYZ(a: number, b: number, c: number): number {\r\n let q = a;\r\n if (b > q) q = b;\r\n if (c > q) q = c;\r\n return q;\r\n }\r\n /** Examine the value (particularly sign) of x.\r\n * * If x is negative, return outNegative.\r\n * * If x is true zero, return outZero\r\n * * If x is positive, return outPositive\r\n */\r\n public static split3WaySign(x: number, outNegative: number, outZero: number, outPositive: number): number {\r\n if (x < 0)\r\n return outNegative;\r\n if (x > 0.0)\r\n return outPositive;\r\n return outZero;\r\n }\r\n /** Return the largest signed value among a, b */\r\n public static maxXY(a: number, b: number): number {\r\n let q = a;\r\n if (b > q) q = b;\r\n return q;\r\n }\r\n /** Return the smallest signed value among a, b */\r\n public static minXY(a: number, b: number): number {\r\n let q = a;\r\n if (b < q) q = b;\r\n return q;\r\n }\r\n /** Return the hypotenuse `sqrt(x*x + y*y)`. This is much faster than `Math.hypot(x,y)`. */\r\n public static hypotenuseXY(x: number, y: number): number { return Math.sqrt(x * x + y * y); }\r\n /** Return the squared `hypotenuse (x*x + y*y)`. */\r\n public static hypotenuseSquaredXY(x: number, y: number): number { return x * x + y * y; }\r\n /** Return the square of x */\r\n public static square(x: number): number { return x * x; }\r\n /** Return the hypotenuse `sqrt(x*x + y*y + z*z)`. This is much faster than `Math.hypot(x,y,z)`. */\r\n public static hypotenuseXYZ(x: number, y: number, z: number): number { return Math.sqrt(x * x + y * y + z * z); }\r\n /** Return the squared hypotenuse `(x*x + y*y + z*z)`. This is much faster than `Math.hypot(x,y,z)`. */\r\n public static hypotenuseSquaredXYZ(x: number, y: number, z: number): number { return x * x + y * y + z * z; }\r\n /** Return the (full 4d) hypotenuse `sqrt(x*x + y*y + z*z + w*w)`. This is much faster than `Math.hypot(x,y,z,w)`. */\r\n public static hypotenuseXYZW(x: number, y: number, z: number, w: number): number { return Math.sqrt(x * x + y * y + z * z + w * w); }\r\n /** Return the squared hypotenuse `(x*x + y*y + z*z+w*w)`. This is much faster than `Math.hypot(x,y,z)`. */\r\n public static hypotenuseSquaredXYZW(x: number, y: number, z: number, w: number): number { return x * x + y * y + z * z + w * w; }\r\n /**\r\n * Return the distance between xy points given as numbers.\r\n * @param x0 x coordinate of point 0\r\n * @param y0 y coordinate of point 0\r\n * @param x1 x coordinate of point 1\r\n * @param y1 y coordinate of point 1\r\n */\r\n public static distanceXYXY(x0: number, y0: number, x1: number, y1: number): number {\r\n return Geometry.hypotenuseXY(x1 - x0, y1 - y0);\r\n }\r\n /**\r\n * Return the distance between xyz points given as numbers.\r\n * @param x0 x coordinate of point 0\r\n * @param y0 y coordinate of point 0\r\n * @param z0 z coordinate of point 0\r\n * @param x1 x coordinate of point 1\r\n * @param y1 y coordinate of point 1\r\n * @param z1 z coordinate of point 1\r\n */\r\n public static distanceXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number): number {\r\n return Geometry.hypotenuseXYZ(x1 - x0, y1 - y0, z1 - z0);\r\n }\r\n /** Returns Returns the triple product of 3 vectors provided as x,y,z number sequences.\r\n *\r\n * * The triple product is the determinant of the 3x3 matrix with the 9 numbers (3 vectors placed in 3 rows).\r\n * * The triple product is positive if the 3 vectors form a right handed coordinate system.\r\n * * The triple product is negative if the 3 vectors form a left handed coordinate system.\r\n * * Treating the 9 numbers as 3 vectors U, V, W, any of these formulas gives the same result:\r\n * * U dot (V cross W)\r\n * * V dot (W cross U)\r\n * * W dot (U cross V)\r\n * * (-U dot (W cross V)) -- (note the negative -- reversing cross product order changes the sign)\r\n * * (-V dot (U cross W)) -- (note the negative -- reversing cross product order changes the sign)\r\n * * (-W dot (V cross U)) -- (note the negative -- reversing cross product order changes the sign)\r\n * * the triple product is 6 times the (signed) volume of the tetrahedron with the three vectors as edges from a common vertex.\r\n */\r\n public static tripleProduct(\r\n ux: number, uy: number, uz: number,\r\n vx: number, vy: number, vz: number,\r\n wx: number, wy: number, wz: number): number {\r\n return ux * (vy * wz - vz * wy)\r\n + uy * (vz * wx - vx * wz)\r\n + uz * (vx * wy - vy * wx);\r\n }\r\n /** Returns the determinant of the 4x4 matrix unrolled as the 16 parameters.\r\n */\r\n public static determinant4x4(\r\n xx: number, xy: number, xz: number, xw: number,\r\n yx: number, yy: number, yz: number, yw: number,\r\n zx: number, zy: number, zz: number, zw: number,\r\n wx: number, wy: number, wz: number, ww: number): number {\r\n return xx * this.tripleProduct(yy, yz, yw, zy, zz, zw, wy, wz, ww)\r\n - yx * this.tripleProduct(xy, xz, xw, zy, zz, zw, wy, wz, ww)\r\n + zx * this.tripleProduct(xy, xz, xw, yy, yz, yw, wy, wz, ww)\r\n - wx * this.tripleProduct(xy, xz, xw, yy, yz, yw, zy, zz, zw);\r\n }\r\n /** Return the mean curvature for two radii, with 0 radius implying 0 curvature */\r\n public static meanCurvatureOfRadii(r0: number, r1: number): number {\r\n return 0.5 * (this.safeDivideFraction(1, r0, 0) + this.safeDivideFraction(1, r1, 0));\r\n }\r\n /**\r\n * Returns curvature magnitude from a first and second derivative vector.\r\n * @param ux first derivative x component\r\n * @param uy first derivative y component\r\n * @param uz first derivative z component\r\n * @param vx second derivative x component\r\n * @param vy second derivative y component\r\n * @param vz second derivative z component\r\n */\r\n public static curvatureMagnitude(\r\n ux: number, uy: number, uz: number,\r\n vx: number, vy: number, vz: number): number {\r\n let q = uy * vz - uz * vy;\r\n let sum = q * q;\r\n q = uz * vx - ux * vz;\r\n sum += q * q;\r\n q = ux * vy - uy * vx;\r\n sum += q * q;\r\n const a = Math.sqrt(ux * ux + uy * uy + uz * uz);\r\n const b = Math.sqrt(sum);\r\n // (sum and a are both nonnegative)\r\n const aaa = a * a * a;\r\n // radius of curvature = aaa / b;\r\n // curvature = b/aaa\r\n const tol = Geometry.smallAngleRadians;\r\n if (aaa > tol * b)\r\n return b / aaa;\r\n return 0; // hm.. maybe should be infinite?\r\n }\r\n /** Returns the determinant of 3x3 matrix with x and y rows taken from 3 points, third row from corresponding numbers.\r\n *\r\n */\r\n public static tripleProductXYW(\r\n columnA: XAndY, weightA: number,\r\n columnB: XAndY, weightB: number,\r\n columnC: XAndY, weightC: number): number {\r\n return Geometry.tripleProduct(\r\n columnA.x, columnB.x, columnC.x,\r\n columnA.y, columnB.y, columnC.y,\r\n weightA, weightB, weightC);\r\n }\r\n /** Returns the determinant of 3x3 matrix with x and y rows taken from 3 points, third row from corresponding numbers.\r\n *\r\n */\r\n public static tripleProductPoint4dXYW(\r\n columnA: Point4d,\r\n columnB: Point4d,\r\n columnC: Point4d): number {\r\n return Geometry.tripleProduct(\r\n columnA.x, columnB.x, columnC.x,\r\n columnA.y, columnB.y, columnC.y,\r\n columnA.w, columnB.w, columnC.w);\r\n }\r\n /** 2D cross product of vectors layed out as scalars. */\r\n public static crossProductXYXY(ux: number, uy: number, vx: number, vy: number): number {\r\n return ux * vy - uy * vx;\r\n }\r\n /** 3D cross product of vectors layed out as scalars. */\r\n public static crossProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Vector3d): Vector3d {\r\n return Vector3d.create(\r\n uy * vz - uz * vy,\r\n uz * vx - ux * vz,\r\n ux * vy - uy * vx, result);\r\n }\r\n /** magnitude of 3D cross product of vectors, with the vectors presented as */\r\n public static crossProductMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number {\r\n return Geometry.hypotenuseXYZ(\r\n uy * vz - uz * vy,\r\n uz * vx - ux * vz,\r\n ux * vy - uy * vx);\r\n }\r\n /** 3D dot product of vectors layed out as scalars. */\r\n public static dotProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number {\r\n return ux * vx + uy * vy + uz * vz;\r\n }\r\n /** 2D dot product of vectors layed out as scalars. */\r\n public static dotProductXYXY(ux: number, uy: number, vx: number, vy: number): number {\r\n return ux * vx + uy * vy;\r\n }\r\n /**\r\n * Clamp to (min(a,b), max(a,b))\r\n * * always returns a number between a and b\r\n * @param x\r\n * @param a\r\n * @param b\r\n */\r\n public static clampToStartEnd(x: number, a: number, b: number): number {\r\n if (a > b)\r\n return Geometry.clampToStartEnd(x, b, a);\r\n if (x < a)\r\n return a;\r\n if (b < x)\r\n return b;\r\n return x;\r\n }\r\n /**\r\n * Clamp value to (min,max) with no test for order of (min,max)\r\n * @param value value to clamp\r\n * @param min smallest allowed output\r\n * @param max largest allowed result.\r\n */\r\n public static clamp(value: number, min: number, max: number): number { return Math.max(min, Math.min(max, value)); }\r\n /** If given a number, return it. If given undefined, return `defaultValue`. */\r\n public static resolveNumber(value: number | undefined, defaultValue: number = 0): number {\r\n return value !== undefined ? value : defaultValue;\r\n }\r\n /** If given a value, return it. If given undefined, return `defaultValue`. */\r\n public static resolveValue<T>(value: T | undefined, defaultValue: T): T {\r\n return value !== undefined ? value : defaultValue;\r\n }\r\n /** If given value matches a target, return undefined. Otherwise return the value. */\r\n public static resolveToUndefined<T>(value: T | undefined, targetValue: T): T | undefined {\r\n return value === targetValue ? undefined : value;\r\n }\r\n /** Simple interpolation between values, but choosing (based on fraction) a or b as starting point for maximum accuracy. */\r\n public static interpolate(a: number, f: number, b: number): number {\r\n return f <= 0.5 ? a + f * (b - a) : b - (1.0 - f) * (b - a);\r\n }\r\n /**\r\n * Given an axisOrder (e.g. XYZ, YZX, etc) and an index, returns the axis index at the given index.\r\n * * For example, if axisOrder = XYZ, then for index 0 returns X (or axis index 0), for index 1 returns\r\n * Y (or axis index 1), and for index 2 returns Z (or axis index 2). For indexes greater than 2 or smaller\r\n * than 0, it returns cyclic axis index. See Geometry.cyclic3dAxis for more info.\r\n * * Another example: if axisOrder = ZYX, then for index 0 returns Z (or axis index 2), for index 1 returns\r\n * Y (or axis index 1), and for index 2 returns X (or axis index 0).\r\n * */\r\n public static axisOrderToAxis(order: AxisOrder, index: number): number {\r\n const axis = order <= AxisOrder.ZXY ? order + index : (order - AxisOrder.XZY) - index;\r\n return Geometry.cyclic3dAxis(axis);\r\n }\r\n /** Return (a modulo period), e.g. for use as a cyclic index. Both a and period may be negative. */\r\n public static modulo(a: number, period: number): number {\r\n if (period <= 0) {\r\n if (period === 0)\r\n return a;\r\n return -Geometry.modulo(-a, -period);\r\n }\r\n\r\n if (a >= 0) {\r\n if (a < period)\r\n return a;\r\n if (a < 2 * period)\r\n return a - period;\r\n } else {\r\n a += period; // hopefully move into primary period without division and floor\r\n if (a > 0)\r\n return a;\r\n }\r\n const m = Math.floor(a / period);\r\n return a - m * period;\r\n }\r\n /** return 0 if the value is undefined, 1 if defined. */\r\n public static defined01(value: any): number { return value === undefined ? 0 : 1; }\r\n /** normally, return numerator/denominator.\r\n * but if the ratio would exceed Geometry.largeFractionResult, return undefined.\r\n */\r\n public static conditionalDivideFraction(numerator: number, denominator: number): number | undefined {\r\n if (Math.abs(denominator) * Geometry.largeFractionResult > Math.abs(numerator))\r\n return numerator / denominator;\r\n return undefined;\r\n }\r\n /** normally, return numerator/denominator.\r\n * but if the ratio would exceed Geometry.largestResult, return undefined.\r\n */\r\n public static conditionalDivideCoordinate(numerator: number, denominator: number, largestResult: number = Geometry.largeCoordinateResult): number | undefined {\r\n if (Math.abs(denominator * largestResult) > Math.abs(numerator))\r\n return numerator / denominator;\r\n return undefined;\r\n }\r\n /** return the 0, 1, or 2 pairs of (c,s) values that solve\r\n * {constCoff + cosCoff * c + sinCoff * s = 0}\r\n * with the constraint {c*c+s*s = 1}\r\n */\r\n public static solveTrigForm(constCoff: number, cosCoff: number, sinCoff: number): Vector2d[] | undefined {\r\n {\r\n const delta2 = cosCoff * cosCoff + sinCoff * sinCoff;\r\n const constCoff2 = constCoff * constCoff;\r\n // nSolution = 0\r\n let result;\r\n if (delta2 > 0.0) {\r\n const lambda = - constCoff / delta2;\r\n const a2 = constCoff2 / delta2;\r\n const D2 = 1.0 - a2;\r\n if (-Geometry.smallMetricDistanceSquared < D2 && D2 <= 0.0) { // observed D2 = -2.22e-16 in rotated system\r\n // nSolution = 1\r\n const c0 = lambda * cosCoff;\r\n const s0 = lambda * sinCoff;\r\n result = [Vector2d.create(c0, s0)];\r\n } else if (D2 > 0.0) {\r\n const mu = Math.sqrt(D2 / delta2);\r\n /* c0,s0 = closest approach of line to origin */\r\n const c0 = lambda * cosCoff;\r\n const s0 = lambda * sinCoff;\r\n // nSolution = 2\r\n result = [Vector2d.create(c0 - mu * sinCoff, s0 + mu * cosCoff), Vector2d.create(c0 + mu * sinCoff, s0 - mu * cosCoff)];\r\n }\r\n }\r\n return result;\r\n }\r\n }\r\n /** normally, return the number result of conditionalDivideFraction.\r\n * but if conditionalDivideFraction fails return specified default number.\r\n */\r\n public static safeDivideFraction(numerator: number, denominator: number, defaultResult: number): number {\r\n const a = Geometry.conditionalDivideFraction(numerator, denominator);\r\n if (a !== undefined)\r\n return a;\r\n return defaultResult;\r\n }\r\n /** For a line f(x) whose function values at x0 and x1 are f0 and f1, return the x value at which f(x)=fTarget; */\r\n public static inverseInterpolate(x0: number, f0: number, x1: number, f1: number, targetF: number = 0,\r\n defaultResult?: number): number | undefined {\r\n const g = Geometry.conditionalDivideFraction(targetF - f0, f1 - f0);\r\n if (g)\r\n return Geometry.interpolate(x0, g, x1);\r\n return defaultResult;\r\n }\r\n /** For a line f(x) whose function values at x=0 and x=1 are f0 and f1, return the x value at which f(x)=fTarget; */\r\n public static inverseInterpolate01(f0: number, f1: number, targetF: number = 0): number | undefined {\r\n return Geometry.conditionalDivideFraction(targetF - f0, f1 - f0);\r\n }\r\n /** Return true if json is an array with at least minEntries, and all entries are numbers (including those beyond minEntries) */\r\n public static isNumberArray(json: any, minEntries: number = 0): boolean {\r\n if (Array.isArray(json) && json.length >= minEntries) {\r\n let entry;\r\n for (entry of json) {\r\n // if (!(entry as number) && entry !== 0.0)\r\n if (!Number.isFinite(entry))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return true if json is an array of at least numNumberArrays, with at least minEntries in each number array.\r\n */\r\n public static isArrayOfNumberArray(json: any, numNumberArray: number, minEntries: number = 0): boolean {\r\n if (Array.isArray(json) && json.length >= numNumberArray) {\r\n let entry;\r\n for (entry of json)\r\n if (!Geometry.isNumberArray(entry, minEntries)) return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** return the number of steps to take so that numSteps * stepSize >= total.\r\n * minCount is returned for both (a) setSize 0 or less and (b) stepSize > total.\r\n * A small tolerance is applied for almost\r\n */\r\n public static stepCount(stepSize: number, total: number, minCount = 1, maxCount = 101): number {\r\n if (stepSize <= 0)\r\n return minCount;\r\n total = Math.abs(total);\r\n if (stepSize >= total)\r\n return minCount;\r\n const stepCount = Math.floor((total + 0.999999 * stepSize) / stepSize);\r\n if (stepCount < minCount)\r\n return minCount;\r\n if (stepCount > maxCount)\r\n return maxCount;\r\n return stepCount;\r\n }\r\n /** Test if x is in simple 0..1 interval. But optionally skip the test. (this odd behavior is very convenient for code that sometimes does not do the filtering.)\r\n * @param x value to test.\r\n * @param apply01 if false, accept all x.\r\n */\r\n public static isIn01(x: number, apply01: boolean = true): boolean { return apply01 ? x >= 0.0 && x <= 1.0 : true; }\r\n /** Test if x is in simple 0..1 interval. But optionally skip the test. (this odd behavior is very convenient for code that sometimes does not do the filtering.)\r\n * @param x value to test.\r\n * @param apply01 if false, accept all x.\r\n */\r\n public static isIn01WithTolerance(x: number, tolerance: number): boolean { return x + tolerance >= 0.0 && x - tolerance <= 1.0; }\r\n /**\r\n * restrict x so it is in the interval `[a,b]`, allowing a,b to be in either order.\r\n * @param x\r\n * @param a (usually the lower) interval limit\r\n * @param b (usually the upper) interval limit\r\n */\r\n public static restrictToInterval(x: number, a: number, b: number): number {\r\n if (a <= b) {\r\n if (x < a) return a;\r\n if (x > b) return b;\r\n return x;\r\n }\r\n // reversed interval ....\r\n if (x < b) return b;\r\n if (x > a) return a;\r\n return x;\r\n }\r\n /**\r\n * Case-insensitive string comparison.\r\n * * Return true if the toUpperCase values match.\r\n */\r\n public static equalStringNoCase(string1: string, string2: string): boolean {\r\n return string1.toUpperCase() === string2.toUpperCase();\r\n }\r\n /** test for EXACT match of number arrays. */\r\n public static exactEqualNumberArrays(a: number[] | undefined, b: number[] | undefined): boolean {\r\n if (Array.isArray(a) && a.length === 0)\r\n a = undefined;\r\n if (Array.isArray(b) && b.length === 0)\r\n b = undefined;\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length)\r\n return false;\r\n for (let i = 0; i < a.length; i++)\r\n if (a[i] !== b[i])\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** test for match of XYZ arrays. */\r\n public static almostEqualArrays<T>(a: T[] | undefined, b: T[] | undefined,\r\n testFunction: (p: T, q: T) => boolean): boolean {\r\n if (Array.isArray(a) && a.length === 0)\r\n a = undefined;\r\n if (Array.isArray(b) && b.length === 0)\r\n b = undefined;\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length)\r\n return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (!testFunction(a[i], b[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** test for match of typed arrays (e.g. Float64Array). */\r\n public static almostEqualNumberArrays(a: number[] | Float64Array | undefined, b: number[] | Float64Array | undefined,\r\n testFunction: (p: number, q: number) => boolean): boolean {\r\n if (Array.isArray(a) && a.length === 0)\r\n a = undefined;\r\n if (Array.isArray(b) && b.length === 0)\r\n b = undefined;\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length)\r\n return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (!testFunction(a[i], b[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return\r\n * * true if both values are defined and equal (with ===).\r\n * * false if both defined by not equal\r\n * * return (option arg) resultIfBothUndefined when both are undefined.\r\n * * return false if one is defined and the other undefined\r\n * @param a first value\r\n * @param b second value\r\n * @param resultIfBothUndefined return value when both are undefined.\r\n * @returns\r\n */\r\n public static areEqualAllowUndefined<T>(a: T | undefined, b: T | undefined, resultIfBothUndefined: boolean = true): boolean {\r\n if (a === undefined && b === undefined)\r\n return resultIfBothUndefined;\r\n if (a !== undefined && b !== undefined)\r\n return a === b;\r\n return false;\r\n }\r\n /** clone an array whose members have a clone method.\r\n * * undefined return from clone is forced into the output array.\r\n */\r\n public static cloneMembers<T extends Cloneable<T>>(a: T[] | undefined): T[] | undefined {\r\n if (a === undefined)\r\n return undefined;\r\n const b: T[] = [];\r\n for (const p of a) {\r\n b.push(p.clone()!);\r\n }\r\n return b;\r\n }\r\n}\r\n/**\r\n * interface for method with a clone operation\r\n * @public\r\n */\r\nexport interface Cloneable<T> {\r\n /** required method to return a deep clone. */\r\n clone(): T | undefined;\r\n}\r\n/** Options used for methods like [[Vector2d.isPerpendicularTo]] and [[Vector3d.isParallelTo]].\r\n * @public\r\n */\r\nexport interface PerpParallelOptions {\r\n /** Squared radian tolerance for comparing the angle between two vectors.\r\n * Default: [[Geometry.smallAngleRadiansSquared]].\r\n */\r\n radianSquaredTol?: number;\r\n /** Squared distance tolerance for detecting a zero-length vector.\r\n * Default: [[Geometry.smallMetricDistanceSquared]].\r\n */\r\n distanceSquaredTol?: number;\r\n}\r\n"]}
1
+ {"version":3,"file":"Geometry.js","sourceRoot":"","sources":["../../src/Geometry.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAO/F,kEAAqE;AACrE,kEAAsE;AAItE,mEAAmE;AAEnE;;;;;;;GAOG;AACH,IAAY,SAaX;AAbD,WAAY,SAAS;IACnB,2CAA2C;IAC3C,uCAAO,CAAA;IACP,2CAA2C;IAC3C,uCAAO,CAAA;IACP,2CAA2C;IAC3C,uCAAO,CAAA;IACP,0CAA0C;IAC1C,uCAAO,CAAA;IACP,0CAA0C;IAC1C,uCAAO,CAAA;IACP,0CAA0C;IAC1C,uCAAO,CAAA;AACT,CAAC,EAbW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAapB;AACD;;GAEG;AACH,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,wBAAwB;IACxB,mCAAK,CAAA;IACL,wBAAwB;IACxB,mCAAK,CAAA;IACL,wBAAwB;IACxB,mCAAK,CAAA;AACP,CAAC,EAPW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAOpB;AACD;;GAEG;AACH,IAAY,iBAiBX;AAjBD,WAAY,iBAAiB;IAC3B,uBAAuB;IACvB,uDAAO,CAAA;IACP,gCAAgC;IAChC,6DAAU,CAAA;IACV,gCAAgC;IAChC,yDAAQ,CAAA;IACR,wBAAwB;IACxB,2DAAS,CAAA;IACT,uBAAuB;IACvB,2DAAS,CAAA;IACT,gCAAgC;IAChC,yDAAQ,CAAA;IACR,oDAAoD;IACpD,uDAAO,CAAA;IACP,yDAAyD;IACzD,iEAAY,CAAA;AACd,CAAC,EAjBW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAiB5B;AACD;;GAEG;AACH,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,+BAA+B;IAC/B,qDAAQ,CAAA;IACR,yFAAyF;IACzF,uFAAyB,CAAA;IACzB,gGAAgG;IAChG,iGAA8B,CAAA;AAChC,CAAC,EAPW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAO1B;AA4FD;;;;;;;GAOG;AACH,MAAa,QAAQ;IA2BnB;;OAEG;IACI,MAAM,CAAC,gBAAgB,CAAC,CAAS;QACtC,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,GAAG,CAAE,IAAI,CAAC,cAAc,CAAC;IAC9D,CAAC;IAED;OACG;IACI,MAAM,CAAC,KAAK,CAAC,CAAS;QAC3B,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAGD,iHAAiH;IAC1G,MAAM,CAAC,0BAA0B,CAAC,QAA4B,EAAE,cAAsB,GAAG;QAC9F,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,mBAAmB,EAAE;YAC/E,OAAO,WAAW,CAAC;SACpB;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD;;;KAGC;IACM,MAAM,CAAC,qBAAqB,CAAC,CAAS;QAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7E,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,4BAA4B,CAAC,CAAS;QAClD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,uDAAuD;IAChD,MAAM,CAAC,gBAAgB,CAAC,CAAS,EAAE,CAAS,EAAE,GAAY;QAC/D,IAAI,GAAG;YACL,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC;IACxD,CAAC;IACD,sHAAsH;IAC/G,MAAM,CAAC,mCAAmC,CAAC,CAAS,EAAE,CAAS,EAAE,eAAuB;QAC7F,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACzF,CAAC;IACD,oEAAoE;IAC7D,MAAM,CAAC,kBAAkB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,MAAc,QAAQ,CAAC,mBAAmB;QACzH,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC;YACP,CAAC,GAAG,CAAC,CAAC,CAAC;QACT,IAAI,CAAC,GAAG,GAAG;YACT,OAAO,KAAK,CAAC;QACf,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACZ,IAAI,CAAC,GAAG,CAAC;YACP,CAAC,GAAG,CAAC,CAAC,CAAC;QACT,OAAO,CAAC,GAAG,GAAG,CAAC;IACjB,CAAC;IACD,+DAA+D;IACxD,MAAM,CAAC,uBAAuB,CAAC,CAAS,EAAE,CAAS;QACxD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC;IAC9E,CAAC;IACD,oFAAoF;IAC7E,MAAM,CAAC,aAAa,CAAC,KAAc,EAAE,KAAc,IAAa,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACrI;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,KAAU,EAAE,KAAU,IAAa,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACzH,sFAAsF;IAC/E,MAAM,CAAC,eAAe,CAAC,KAAc,EAAE,KAAc,IAAa,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACzI,sFAAsF;IAC/E,MAAM,CAAC,cAAc,CAAC,KAAe,EAAE,KAAe,IAAa,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACxI,sFAAsF;IAC/E,MAAM,CAAC,aAAa,CAAC,KAAc,EAAE,KAAc,IAAa,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACrI,sFAAsF;IAC/E,MAAM,CAAC,cAAc,CAAC,KAAe,EAAE,KAAe,IAAa,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACxI;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,CAAW,EAAE,CAAW;QACtD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,CAAW,EAAE,CAAW;QACtD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,kBAAkB,CAAC,CAAM,EAAE,CAAM;QAC7C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC,CAAC;aACP,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,eAAe,CAAC,KAAa;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACtD,CAAC;IACD,+DAA+D;IACxD,MAAM,CAAC,mBAAmB,CAAC,KAAa;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACtD,CAAC;IACD;;MAEE;IACK,MAAM,CAAC,qBAAqB,CAAC,CAAqB,EAAE,CAAqB,EAAE,SAAiB;QACjG,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE;YACtC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;gBAC7B,OAAO,KAAK,CAAC;SAChB;aAAM;YACL,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;gBACpC,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;MAEE;IACK,MAAM,CAAC,mBAAmB,CAAC,CAAS,EAAE,CAAS;QACpD,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,iBAAiB,GAAG,MAAM,CAAC;IAChE,CAAC;IACD;;MAEE;IACK,MAAM,CAAC,kBAAkB,CAAC,CAAQ,EAAE,CAAQ;QACjD,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,QAAQ,CAAC,iBAAiB,GAAG,MAAM,CAAC;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAC9E,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,QAAgB,EAAE,GAAY;QAC9D,IAAI,GAAG,KAAK,SAAS;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IAC5D,CAAC;IACD,uEAAuE;IAChE,MAAM,CAAC,qBAAqB,CAAC,QAAgB;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IAC5D,CAAC;IAED,yEAAyE;IAClE,MAAM,CAAC,4BAA4B,CAAC,eAAuB;QAChE,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,0BAA0B,CAAC;IAC1E,CAAC;IACD;;;UAGM;IACC,MAAM,CAAC,YAAY,CAAC,IAAY;QACrC,yDAAyD;QACzD,IAAI,IAAI,IAAI,CAAC,EAAE;YACb,IAAI,IAAI,GAAG,CAAC;gBACV,OAAO,IAAI,CAAC;YACd,IAAI,IAAI,GAAG,CAAC;gBACV,OAAO,IAAI,GAAG,CAAC,CAAC;YAClB,OAAO,IAAI,GAAG,CAAC,CAAC;SACjB;QACD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC;YACR,OAAO,CAAC,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,+BAA+B,CAAC,SAAoB;QAChE,IAAI,SAAS,KAAK,CAAC;YACjB,OAAO,SAAS,CAAC,GAAG,CAAC;QACvB,IAAI,SAAS,KAAK,CAAC;YACjB,OAAO,SAAS,CAAC,GAAG,CAAC;QACvB,IAAI,SAAS,KAAK,CAAC;YACjB,OAAO,SAAS,CAAC,GAAG,CAAC;QACvB,OAAO,QAAQ,CAAC,+BAA+B,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,wEAAwE;IACjE,MAAM,CAAC,UAAU,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU;QACxD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,6DAA6D;IACtD,MAAM,CAAC,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,2DAA2D;IACpD,MAAM,CAAC,QAAQ,CAAC,CAAS,EAAE,CAAS;QACzC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,oDAAoD;IAC7C,MAAM,CAAC,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAClD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,aAAa,CAAC,CAAS,EAAE,WAAmB,EAAE,OAAe,EAAE,WAAmB;QAC9F,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,WAAW,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG;YACT,OAAO,WAAW,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,iDAAiD;IAC1C,MAAM,CAAC,KAAK,CAAC,CAAS,EAAE,CAAS;QACtC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,kDAAkD;IAC3C,MAAM,CAAC,KAAK,CAAC,CAAS,EAAE,CAAS;QACtC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,2FAA2F;IACpF,MAAM,CAAC,YAAY,CAAC,CAAS,EAAE,CAAS;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,mDAAmD;IAC5C,MAAM,CAAC,mBAAmB,CAAC,CAAS,EAAE,CAAS;QACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,6BAA6B;IACtB,MAAM,CAAC,MAAM,CAAC,CAAS;QAC5B,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,mGAAmG;IAC5F,MAAM,CAAC,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,uGAAuG;IAChG,MAAM,CAAC,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAChE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,qHAAqH;IAC9G,MAAM,CAAC,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QACrE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,2GAA2G;IACpG,MAAM,CAAC,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC5E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,YAAY,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QACvE,OAAO,QAAQ,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,cAAc,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QACjG,OAAO,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,aAAa,CACzB,EAAU,EAAE,EAAU,EAAE,EAAU,EAClC,EAAU,EAAE,EAAU,EAAE,EAAU,EAClC,EAAU,EAAE,EAAU,EAAE,EAAU;QAClC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;cAC3B,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;cACxB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD;OACG;IACI,MAAM,CAAC,cAAc,CAC1B,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QAC9C,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;cAC9D,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;cAC3D,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;cAC3D,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,kFAAkF;IAC3E,MAAM,CAAC,oBAAoB,CAAC,EAAU,EAAE,EAAU;QACvD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IACD;;;;;;;;KAQC;IACM,MAAM,CAAC,kBAAkB,CAC9B,EAAU,EAAE,EAAU,EAAE,EAAU,EAClC,EAAU,EAAE,EAAU,EAAE,EAAU;QAClC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1B,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACtB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACtB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,mCAAmC;QACnC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,iCAAiC;QACjC,oBAAoB;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QACvC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;YACf,OAAO,CAAC,GAAG,GAAG,CAAC;QACjB,OAAO,CAAC,CAAC,CAAC,iCAAiC;IAC7C,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,gBAAgB,CAC5B,OAAc,EAAE,OAAe,EAC/B,OAAc,EAAE,OAAe,EAC/B,OAAc,EAAE,OAAe;QAC/B,OAAO,QAAQ,CAAC,aAAa,CAC3B,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAC/B,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAC/B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,uBAAuB,CACnC,OAAgB,EAChB,OAAgB,EAChB,OAAgB;QAChB,OAAO,QAAQ,CAAC,aAAa,CAC3B,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAC/B,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAC/B,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,wDAAwD;IACjD,MAAM,CAAC,gBAAgB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QAC3E,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC3B,CAAC;IACD,wDAAwD;IACjD,MAAM,CAAC,kBAAkB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,MAAiB;QACxH,OAAO,0BAAQ,CAAC,MAAM,CACpB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACjB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACjB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,8EAA8E;IACvE,MAAM,CAAC,qBAAqB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QACxG,OAAO,QAAQ,CAAC,aAAa,CAC3B,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACjB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACjB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,sDAAsD;IAC/C,MAAM,CAAC,gBAAgB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QACnG,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;IACD,sDAAsD;IAC/C,MAAM,CAAC,cAAc,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QACzE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC3B,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC3D,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,CAAC,CAAC;QACX,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,CAAC,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,IAAY,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpH,iFAAiF;IAC1E,MAAM,CAAC,aAAa,CAAC,KAAyB,EAAE,eAAuB,CAAC;QAC7E,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;IACpD,CAAC;IACD,gFAAgF;IACzE,MAAM,CAAC,YAAY,CAAI,KAAoB,EAAE,YAAe;QACjE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;IACpD,CAAC;IACD,uFAAuF;IAChF,MAAM,CAAC,kBAAkB,CAAI,KAAoB,EAAE,WAAc;QACtE,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC;IACD,2HAA2H;IACpH,MAAM,CAAC,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACvD,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD;;;;;;;SAOK;IACE,MAAM,CAAC,eAAe,CAAC,KAAgB,EAAE,KAAa;QAC3D,MAAM,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtF,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,oGAAoG;IAC7F,MAAM,CAAC,MAAM,CAAC,CAAS,EAAE,MAAc;QAC5C,IAAI,MAAM,IAAI,CAAC,EAAE;YACf,IAAI,MAAM,KAAK,CAAC;gBACd,OAAO,CAAC,CAAC;YACX,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE;YACV,IAAI,CAAC,GAAG,MAAM;gBACZ,OAAO,CAAC,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM;gBAChB,OAAO,CAAC,GAAG,MAAM,CAAC;SACrB;aAAM;YACL,CAAC,IAAI,MAAM,CAAC,CAAE,gEAAgE;YAC9E,IAAI,CAAC,GAAG,CAAC;gBACP,OAAO,CAAC,CAAC;SACZ;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,wDAAwD;IACjD,MAAM,CAAC,SAAS,CAAC,KAAU,IAAY,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF;;OAEG;IACI,MAAM,CAAC,yBAAyB,CAAC,SAAiB,EAAE,WAAmB;QAC5E,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAC5E,OAAO,SAAS,GAAG,WAAW,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,2BAA2B,CAAC,SAAiB,EAAE,WAAmB,EAAE,gBAAwB,QAAQ,CAAC,qBAAqB;QACtI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAC7D,OAAO,SAAS,GAAG,WAAW,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,aAAa,CAAC,SAAiB,EAAE,OAAe,EAAE,OAAe;QAC7E;YACE,MAAM,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;YACrD,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;YACzC,gBAAgB;YAChB,IAAI,MAAM,CAAC;YACX,IAAI,MAAM,GAAG,GAAG,EAAE;gBAChB,MAAM,MAAM,GAAG,CAAE,SAAS,GAAG,MAAM,CAAC;gBACpC,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC;gBAC/B,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,QAAQ,CAAC,0BAA0B,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,4CAA4C;oBACxG,gBAAgB;oBAChB,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC;oBAC5B,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC;oBAC5B,MAAM,GAAG,CAAC,0BAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;iBACpC;qBAAM,IAAI,EAAE,GAAG,GAAG,EAAE;oBACnB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;oBAClC,gDAAgD;oBAChD,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC;oBAC5B,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC;oBAC5B,gBAAgB;oBAChB,MAAM,GAAG,CAAC,0BAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,0BAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;iBACzH;aACF;YACD,OAAO,MAAM,CAAC;SACf;IACH,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,kBAAkB,CAAC,SAAiB,EAAE,WAAmB,EAAE,aAAqB;QAC5F,MAAM,CAAC,GAAG,QAAQ,CAAC,yBAAyB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,SAAS;YACjB,OAAO,CAAC,CAAC;QACX,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,kHAAkH;IAC3G,MAAM,CAAC,kBAAkB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,UAAkB,CAAC,EAClG,aAAsB;QACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,yBAAyB,CAAC,OAAO,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,oHAAoH;IAC7G,MAAM,CAAC,oBAAoB,CAAC,EAAU,EAAE,EAAU,EAAE,UAAkB,CAAC;QAC5E,OAAO,QAAQ,CAAC,yBAAyB,CAAC,OAAO,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,gIAAgI;IACzH,MAAM,CAAC,aAAa,CAAC,IAAS,EAAE,aAAqB,CAAC;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE;YACpD,IAAI,KAAK,CAAC;YACV,KAAK,KAAK,IAAI,IAAI,EAAE;gBAClB,kDAAkD;gBAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACzB,OAAO,KAAK,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;OACG;IACI,MAAM,CAAC,oBAAoB,CAAC,IAAS,EAAE,cAAsB,EAAE,aAAqB,CAAC;QAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE;YACxD,IAAI,KAAK,CAAC;YACV,KAAK,KAAK,IAAI,IAAI;gBAChB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC/D,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;MAGE;IACK,MAAM,CAAC,SAAS,CAAC,QAAgB,EAAE,KAAa,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,GAAG;QACnF,IAAI,QAAQ,IAAI,CAAC;YACf,OAAO,QAAQ,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,QAAQ,IAAI,KAAK;YACnB,OAAO,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;QACvE,IAAI,SAAS,GAAG,QAAQ;YACtB,OAAO,QAAQ,CAAC;QAClB,IAAI,SAAS,GAAG,QAAQ;YACtB,OAAO,QAAQ,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,MAAM,CAAC,CAAS,EAAE,UAAmB,IAAI,IAAa,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnH;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,CAAS,EAAE,SAAiB,IAAa,OAAO,CAAC,GAAG,SAAS,IAAI,GAAG,IAAI,CAAC,GAAG,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC;IACjI;;;;;OAKG;IACI,MAAM,CAAC,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC9D,IAAI,CAAC,IAAI,CAAC,EAAE;YACV,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YACpB,OAAO,CAAC,CAAC;SACV;QACD,yBAAyB;QACzB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,OAAe,EAAE,OAAe;QAC9D,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;IACzD,CAAC;IACD,6CAA6C;IACtC,MAAM,CAAC,sBAAsB,CAAC,CAAuB,EAAE,CAAuB;QACnF,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YACpC,OAAO,IAAI,CAAC;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACxC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBACvB,OAAO,KAAK,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;gBAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACf,OAAO,KAAK,CAAC;YACjB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qCAAqC;IAC9B,MAAM,CAAC,iBAAiB,CAAI,CAAkB,EAAE,CAAkB,EACvE,YAAqC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YACpC,OAAO,IAAI,CAAC;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACxC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBACvB,OAAO,KAAK,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,OAAO,KAAK,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,2DAA2D;IACpD,MAAM,CAAC,uBAAuB,CAAC,CAAsC,EAAE,CAAsC,EAClH,YAA+C;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YACpC,OAAO,IAAI,CAAC;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACxC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBACvB,OAAO,KAAK,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,OAAO,KAAK,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,sBAAsB,CAAI,CAAgB,EAAE,CAAgB,EAAE,wBAAiC,IAAI;QAC/G,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YACpC,OAAO,qBAAqB,CAAC;QAC/B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YACpC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;MAEE;IACK,MAAM,CAAC,YAAY,CAAyB,CAAkB;QACnE,IAAI,CAAC,KAAK,SAAS;YACjB,OAAO,SAAS,CAAC;QACnB,MAAM,CAAC,GAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACjB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAG,CAAC,CAAC;SACpB;QACD,OAAO,CAAC,CAAC;IACX,CAAC;;AAhvBH,4BAivBC;AAhvBC,0DAA0D;AACnC,4BAAmB,GAAG,MAAM,CAAC;AACpD,uCAAuC;AAChB,mCAA0B,GAAG,OAAO,CAAC;AAC5D,qDAAqD;AAC9B,0BAAiB,GAAG,OAAO,CAAC;AACnD,oCAAoC;AACb,iCAAwB,GAAG,OAAO,CAAC;AAC1D,qDAAqD;AAC9B,0BAAiB,GAAG,OAAO,CAAC;AACnD,yDAAyD;AAClC,0BAAiB,GAAG,IAAI,CAAC;AAChD;;GAEG;AACoB,4BAAmB,GAAG,MAAM,CAAC;AACpD,+EAA+E;AACxD,sBAAa,GAAG,OAAO,CAAC;AAC/C;;GAEG;AACoB,8BAAqB,GAAG,MAAM,CAAC;AACtD;;GAEG;AACoB,uBAAc,GAAG,MAAM,CAAC;AAa/C,0EAA0E;AACnD,yCAAgC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,CAAI,yCAAyC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n\r\nimport { AngleSweep } from \"./geometry3d/AngleSweep\";\r\nimport { Point2d, Vector2d, XY } from \"./geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d, XYZ } from \"./geometry3d/Point3dVector3d\";\r\nimport { XAndY } from \"./geometry3d/XYZProps\";\r\nimport { Point4d } from \"./geometry4d/Point4d\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\n\r\n/** Enumeration of the 6 possible orderings of XYZ axis order\r\n *\r\n * * **Note:** There are 3 axis order with right hand system (XYZ = 0, YZX = 1, ZXY = 2) and 3 axis order with\r\n * left hand system (XZY = 4, YXZ = 5, ZYX = 6). Note that AxisOrder is encoding the handedness as well. Cross\r\n * product of the i_th axis in an ordering (i=0,1,2), with the i+1_th in that ordering, will produce the i+2_th\r\n * axis in that ordering.\r\n * @public\r\n */\r\nexport enum AxisOrder {\r\n /** Right handed system, X then Y then Z */\r\n XYZ = 0, /* eslint-disable-line @typescript-eslint/no-shadow */\r\n /** Right handed system, Y then Z then X */\r\n YZX = 1,\r\n /** Right handed system, Z then X then Y */\r\n ZXY = 2,\r\n /** Left handed system, X then Z then Y */\r\n XZY = 4,\r\n /** Left handed system, Y then X then Z */\r\n YXZ = 5,\r\n /** Left handed system, Z then Y then X */\r\n ZYX = 6,\r\n}\r\n/** Enumeration of numeric indices of 3 axes AxisIndex.X, AxisIndex.Y, AxisIndex.Z\r\n * @public\r\n */\r\nexport enum AxisIndex {\r\n /** x axis is index 0 */\r\n X = 0,\r\n /** y axis is index 1 */\r\n Y = 1,\r\n /** 2 axis is index 2 */\r\n Z = 2,\r\n}\r\n/** Standard views. Used in `Matrix3d.createStandardViewAxes(index: StandardViewIndex, invert: boolean)`\r\n * @public\r\n */\r\nexport enum StandardViewIndex {\r\n /** X to right, Y up */\r\n Top = 1,\r\n /** X to right, negative Y up */\r\n Bottom = 2,\r\n /** negative Y to right, Z up */\r\n Left = 3,\r\n /** Y to right, Z up */\r\n Right = 4,\r\n /** X to right, Z up */\r\n Front = 5,\r\n /** negative X to right, Z up */\r\n Back = 6,\r\n /** isometric: view towards origin from (-1,-1,1) */\r\n Iso = 7, //\r\n /** right isometric: view towards origin from (1,-1,1) */\r\n RightIso = 8,\r\n}\r\n/** Enumeration among choice for how a coordinate transformation should incorporate scaling.\r\n * @public\r\n */\r\nexport enum AxisScaleSelect {\r\n /** All axes of unit length. */\r\n Unit = 0,\r\n /** On each axis, the vector length matches the longest side of the range of the data. */\r\n LongestRangeDirection = 1,\r\n /** On each axis, the vector length matches he length of the corresponding edge of the range. */\r\n NonUniformRangeContainment = 2,\r\n}\r\n/** object with a radians value and its associated cosine and sine values.\r\n * @public\r\n */\r\nexport interface TrigValues {\r\n /** the cosine value */\r\n c: number;\r\n /** the sine value */\r\n s: number;\r\n /** the radians value */\r\n radians: number;\r\n}\r\n/**\r\n * Interface so various plane representations can be used by algorithms that just want altitude evaluations.\r\n *\r\n * Specific implementors are\r\n * * Plane3dByOriginAndUnitNormal\r\n * * Point4d (used for homogeneous plane coefficients)\r\n * @public\r\n */\r\nexport interface PlaneAltitudeEvaluator {\r\n /**\r\n * Return the altitude of the point from the plane.\r\n * @param point point for evaluation\r\n */\r\n altitude(point: Point3d): number;\r\n /**\r\n * Return the altitude of the point from the plane, with the point supplied as simple x,y,z\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @param z z coordinate\r\n */\r\n altitudeXYZ(x: number, y: number, z: number): number;\r\n /**\r\n * Return the derivative of altitude wrt motion along a vector.\r\n * @param point point for evaluation\r\n */\r\n velocity(vector: Vector3d): number;\r\n /**\r\n * Return the derivative of altitude wrt motion along a vector given by components\r\n * @param point point for evaluation\r\n */\r\n velocityXYZ(x: number, y: number, z: number): number;\r\n /**\r\n * Return the weighted altitude\r\n * @param point xyzw data.\r\n */\r\n weightedAltitude(point: Point4d): number;\r\n /** x part of normal vector */\r\n normalX(): number;\r\n /** x part of normal vector */\r\n normalY(): number;\r\n /** x part of normal vector */\r\n normalZ(): number;\r\n}\r\n/**\r\n * Interface for `toJSON` and `setFromJSON` methods\r\n * @public\r\n */\r\nexport interface BeJSONFunctions {\r\n /**\r\n * Set content from a JSON object.\r\n * If the json object is undefined or unrecognized, always set a default value.\r\n */\r\n setFromJSON(json: any): void;\r\n /** Return a json object with this object's contents. */\r\n toJSON(): any;\r\n}\r\n/** The Properties for a JSON representation of an Angle.\r\n * If value is a number, it is in *degrees*.\r\n * If value is an object, it can have either degrees or radians.\r\n * @public\r\n */\r\nexport type AngleProps =\r\n { degrees: number } |\r\n { radians: number } |\r\n { _radians: number } |\r\n { _degrees: number } |\r\n number;\r\n/** The Properties for a JSON representation of an AngleSweep.\r\n * * The json data is always start and end angles as a pair in an array.\r\n * If AngleProps data is an array of two numbers, it is an angle in degrees.\r\n * If the AngleProps is an object with key degrees, the degrees value must be an array with the two degrees angles as numbers\r\n * If the AngleProps is an object with key radians, the radians value must be an array with the two radians angles as numbers\r\n * @public\r\n */\r\nexport type AngleSweepProps =\r\n AngleSweep |\r\n { degrees: [number, number] } |\r\n { radians: [number, number] } |\r\n [number, number];\r\n\r\n/**\r\n * Class containing static methods for typical numeric operations.\r\n * * Experimentally, methods like Geometry.hypotenuse are observed to be faster than the system intrinsics.\r\n * * This is probably due to\r\n * * Fixed length arg lists\r\n * * strongly typed parameters\r\n * @public\r\n */\r\nexport class Geometry {\r\n /** Tolerance for small distances in metric coordinates */\r\n public static readonly smallMetricDistance = 1.0e-6;\r\n /** Square of `smallMetricTolerance` */\r\n public static readonly smallMetricDistanceSquared = 1.0e-12;\r\n /** tolerance for small angle measured in radians. */\r\n public static readonly smallAngleRadians = 1.0e-12;\r\n /** square of `smallAngleRadians` */\r\n public static readonly smallAngleRadiansSquared = 1.0e-24;\r\n /** tolerance for small angle measured in degrees. */\r\n public static readonly smallAngleDegrees = 5.7e-11;\r\n /** tolerance for small angle measured in arc-seconds. */\r\n public static readonly smallAngleSeconds = 2e-7;\r\n /** numeric value that may be considered huge for a ratio of numbers.\r\n * * Note that the \"allowed\" result value is vastly larger than 1.\r\n */\r\n public static readonly largeFractionResult = 1.0e10;\r\n /** numeric value that may be considered zero for fractions between 0 and 1. */\r\n public static readonly smallFraction = 1.0e-10;\r\n /** numeric value that may considered huge for numbers expected to be coordinates.\r\n * * This allows larger results than `largeFractionResult`.\r\n */\r\n public static readonly largeCoordinateResult = 1.0e13;\r\n /** numeric value that may considered infinite for metric coordinates.\r\n * * This coordinate should be used only as a placeholder indicating \"at infinity\" -- computing actual points at this coordinate invites numerical problems.\r\n */\r\n public static readonly hugeCoordinate = 1.0e12;\r\n /** Test if absolute value of x is huge.\r\n * * See `Geometry.hugeCoordinate`\r\n */\r\n public static isHugeCoordinate(x: number): boolean {\r\n return x > this.hugeCoordinate || x < - this.hugeCoordinate;\r\n }\r\n\r\n /** Test if a number is odd.\r\n */\r\n public static isOdd(x: number): boolean {\r\n return (x & (0x01)) === 1;\r\n }\r\n /** Radians value for full circle 2PI radians minus `smallAngleRadians` */\r\n public static readonly fullCircleRadiansMinusSmallAngle = 2.0 * Math.PI - 1.0e-12; // smallAngleRadians less than 360degrees\r\n /** Correct `distance` to zero if undefined or smaller than metric tolerance. Otherwise return it unchanged. */\r\n public static correctSmallMetricDistance(distance: number | undefined, replacement: number = 0.0): number {\r\n if (distance === undefined || Math.abs(distance) < Geometry.smallMetricDistance) {\r\n return replacement;\r\n }\r\n return distance;\r\n }\r\n /**\r\n * If `a` is large enough for safe division, return `1/a`, using Geometry.smallMetricDistance as the tolerance for declaring it as divide by zero. Otherwise return `undefined`.\r\n * @param a denominator of division\r\n */\r\n public static inverseMetricDistance(a: number): number | undefined {\r\n return (Math.abs(a) <= Geometry.smallMetricDistance) ? undefined : 1.0 / a;\r\n }\r\n /**\r\n * If `a` is large enough, return `1/a`, using the square of Geometry.smallMetricDistance as the tolerance for declaring it as divide by zero. Otherwise return `undefined`.\r\n * @param a denominator of division\r\n */\r\n public static inverseMetricDistanceSquared(a: number): number | undefined {\r\n return (Math.abs(a) <= Geometry.smallMetricDistanceSquared) ? undefined : 1.0 / a;\r\n }\r\n /** Boolean test for metric coordinate near-equality */\r\n public static isSameCoordinate(x: number, y: number, tol?: number): boolean {\r\n if (tol)\r\n return Math.abs(x - y) < Math.abs(tol);\r\n return Math.abs(x - y) < Geometry.smallMetricDistance;\r\n }\r\n /** Boolean test for metric coordinate near-equality, with toleranceFactor applied to the usual smallMetricDistance */\r\n public static isSameCoordinateWithToleranceFactor(x: number, y: number, toleranceFactor: number): boolean {\r\n return Geometry.isSameCoordinate(x, y, toleranceFactor * Geometry.smallMetricDistance);\r\n }\r\n /** Boolean test for metric coordinate near-equality of x, y pair */\r\n public static isSameCoordinateXY(x0: number, y0: number, x1: number, y1: number, tol: number = Geometry.smallMetricDistance): boolean {\r\n let d = x1 - x0;\r\n if (d < 0)\r\n d = -d;\r\n if (d > tol)\r\n return false;\r\n d = y1 - y0;\r\n if (d < 0)\r\n d = -d;\r\n return d < tol;\r\n }\r\n /** Boolean test for squared metric coordinate near-equality */\r\n public static isSameCoordinateSquared(x: number, y: number): boolean {\r\n return Math.abs(Math.sqrt(x) - Math.sqrt(y)) < Geometry.smallMetricDistance;\r\n }\r\n /** boolean test for small `dataA.distance (dataB)` within `smallMetricDistance` */\r\n public static isSamePoint3d(dataA: Point3d, dataB: Point3d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for distance between `XYZ` objects within `smallMetricDistance`\r\n * * Note that Point3d and Vector3d are both derived from XYZ, so this method tolerates mixed types.\r\n */\r\n public static isSameXYZ(dataA: XYZ, dataB: XYZ): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSamePoint3dXY(dataA: Point3d, dataB: Point3d): boolean { return dataA.distanceXY(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSameVector3d(dataA: Vector3d, dataB: Vector3d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSamePoint2d(dataA: Point2d, dataB: Point2d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /** boolean test for small `dataA.distanceXY (dataB)` within `smallMetricDistance` */\r\n public static isSameVector2d(dataA: Vector2d, dataB: Vector2d): boolean { return dataA.distance(dataB) < Geometry.smallMetricDistance; }\r\n /**\r\n * Lexical comparison of (a.x,a.y) (b.x,b.y) with x as first test, y second.\r\n * * This is appropriate for a horizontal sweep in the plane.\r\n */\r\n public static lexicalXYLessThan(a: XY | XYZ, b: XY | XYZ): -1 | 0 | 1 {\r\n if (a.x < b.x)\r\n return -1;\r\n else if (a.x > b.x)\r\n return 1;\r\n if (a.y < b.y)\r\n return -1;\r\n else if (a.y > b.y)\r\n return 1;\r\n return 0;\r\n }\r\n /**\r\n * Lexical comparison of (a.x,a.y) (b.x,b.y) with y as first test, x second.\r\n * * This is appropriate for a vertical sweep in the plane.\r\n */\r\n public static lexicalYXLessThan(a: XY | XYZ, b: XY | XYZ): -1 | 0 | 1 {\r\n if (a.y < b.y)\r\n return -1;\r\n else if (a.y > b.y)\r\n return 1;\r\n if (a.x < b.x)\r\n return -1;\r\n else if (a.x > b.x)\r\n return 1;\r\n return 0;\r\n }\r\n /**\r\n * Lexical test, based on x first, y second, z third.\r\n */\r\n public static lexicalXYZLessThan(a: XYZ, b: XYZ): -1 | 0 | 1 {\r\n if (a.x < b.x)\r\n return -1;\r\n else if (a.x > b.x)\r\n return 1;\r\n if (a.y < b.y)\r\n return -1;\r\n else if (a.y > b.y)\r\n return 1;\r\n if (a.z < b.z)\r\n return -1;\r\n else if (a.z > b.z)\r\n return 1;\r\n return 0;\r\n }\r\n /** Test if `value` is small compared to `smallAngleRadians`.\r\n * * This is appropriate if `value` is know to be a typical 0..1 fraction.\r\n */\r\n public static isSmallRelative(value: number): boolean {\r\n return Math.abs(value) < Geometry.smallAngleRadians;\r\n }\r\n /** Test if `value` is small compared to `smallAngleRadians` */\r\n public static isSmallAngleRadians(value: number): boolean {\r\n return Math.abs(value) < Geometry.smallAngleRadians;\r\n }\r\n /** Returns true if both values are undefined or if both are defined and almost equal within tolerance.\r\n * If one is undefined and the other is not then false is returned.\r\n */\r\n public static isAlmostEqualOptional(a: number | undefined, b: number | undefined, tolerance: number): boolean {\r\n if (a !== undefined && b !== undefined) {\r\n if (Math.abs(a - b) > tolerance)\r\n return false;\r\n } else {\r\n if (a !== undefined || b !== undefined)\r\n return false;\r\n }\r\n return true;\r\n }\r\n /** Toleranced equality test, using tolerance `smallAngleRadians * ( 1 + abs(a) + (abs(b)))`\r\n * * Effectively an absolute tolerance of `smallAngleRadians`, with tolerance increasing for larger values of a and b.\r\n */\r\n public static isAlmostEqualNumber(a: number, b: number): boolean {\r\n const sumAbs = 1.0 + Math.abs(a) + Math.abs(b);\r\n return Math.abs(a - b) <= Geometry.smallAngleRadians * sumAbs;\r\n }\r\n /** Toleranced equality test, using tolerance `smallAngleRadians * ( 1 + abs(a) + (abs(b)))`\r\n * * Effectively an absolute tolerance of `smallAngleRadians`, with tolerance increasing for larger values of a and b.\r\n */\r\n public static isAlmostEqualXAndY(a: XAndY, b: XAndY): boolean {\r\n const sumAbs = 1.0 + Math.abs(a.x) + Math.abs(b.x) + Math.abs(a.y) + Math.abs(b.y);\r\n const tolerance = Geometry.smallAngleRadians * sumAbs;\r\n return Math.abs(a.x - b.x) <= tolerance && Math.abs(a.y - b.y) <= tolerance;\r\n }\r\n /**\r\n * Toleranced equality test, using caller-supplied tolerance.\r\n * If no tolerance is given, use smallMetricDistance.\r\n */\r\n public static isDistanceWithinTol(distance: number, tol?: number): boolean {\r\n if (tol !== undefined)\r\n return Math.abs(distance) <= Math.abs(tol);\r\n return Math.abs(distance) <= Geometry.smallMetricDistance;\r\n }\r\n /** Toleranced equality test, using `smallMetricDistance` tolerance. */\r\n public static isSmallMetricDistance(distance: number): boolean {\r\n return Math.abs(distance) <= Geometry.smallMetricDistance;\r\n }\r\n\r\n /** Toleranced equality, using `smallMetricDistanceSquared` tolerance. */\r\n public static isSmallMetricDistanceSquared(distanceSquared: number): boolean {\r\n return Math.abs(distanceSquared) <= Geometry.smallMetricDistanceSquared;\r\n }\r\n /**\r\n * Return `axis modulo 3` with proper handling of negative indices\r\n * ..., -3:x, -2:y, -1:z, 0:x, 1:y, 2:z, 3:x, 4:y, 5:z, 6:x, 7:y, 8:z, ...\r\n * */\r\n public static cyclic3dAxis(axis: number): number {\r\n /* Direct test for the most common cases, avoid modulo */\r\n if (axis >= 0) {\r\n if (axis < 3)\r\n return axis;\r\n if (axis < 6)\r\n return axis - 3;\r\n return axis % 3;\r\n }\r\n const j = axis + 3;\r\n if (j >= 0)\r\n return j;\r\n return 2 - ((-axis - 1) % 3);\r\n }\r\n /** Return the AxisOrder for which axisIndex is the first named axis.\r\n * * `axisIndex === 0` returns `AxisOrder.XYZ`\r\n * * `axisIndex === 1` returns `AxisOrder.YZX`\r\n * * `axisIndex === 2` returns `AxisOrder.ZXY`\r\n */\r\n public static axisIndexToRightHandedAxisOrder(axisIndex: AxisIndex): AxisOrder {\r\n if (axisIndex === 0)\r\n return AxisOrder.XYZ;\r\n if (axisIndex === 1)\r\n return AxisOrder.YZX;\r\n if (axisIndex === 2)\r\n return AxisOrder.ZXY;\r\n return Geometry.axisIndexToRightHandedAxisOrder(Geometry.cyclic3dAxis(axisIndex));\r\n }\r\n /** Return the largest absolute distance from a to either of b0 or b1 */\r\n public static maxAbsDiff(a: number, b0: number, b1: number): number {\r\n return Math.max(Math.abs(a - b0), Math.abs(a - b1));\r\n }\r\n /** Return the largest absolute absolute value among x,y,z */\r\n public static maxAbsXYZ(x: number, y: number, z: number): number {\r\n return Geometry.maxXYZ(Math.abs(x), Math.abs(y), Math.abs(z));\r\n }\r\n /** Return the largest absolute absolute value among x,y */\r\n public static maxAbsXY(x: number, y: number): number {\r\n return Geometry.maxXY(Math.abs(x), Math.abs(y));\r\n }\r\n /** Return the largest signed value among a, b, c */\r\n public static maxXYZ(a: number, b: number, c: number): number {\r\n let q = a;\r\n if (b > q) q = b;\r\n if (c > q) q = c;\r\n return q;\r\n }\r\n /** Examine the value (particularly sign) of x.\r\n * * If x is negative, return outNegative.\r\n * * If x is true zero, return outZero\r\n * * If x is positive, return outPositive\r\n */\r\n public static split3WaySign(x: number, outNegative: number, outZero: number, outPositive: number): number {\r\n if (x < 0)\r\n return outNegative;\r\n if (x > 0.0)\r\n return outPositive;\r\n return outZero;\r\n }\r\n /** Return the largest signed value among a, b */\r\n public static maxXY(a: number, b: number): number {\r\n let q = a;\r\n if (b > q) q = b;\r\n return q;\r\n }\r\n /** Return the smallest signed value among a, b */\r\n public static minXY(a: number, b: number): number {\r\n let q = a;\r\n if (b < q) q = b;\r\n return q;\r\n }\r\n /** Return the hypotenuse `sqrt(x*x + y*y)`. This is much faster than `Math.hypot(x,y)`. */\r\n public static hypotenuseXY(x: number, y: number): number {\r\n return Math.sqrt(x * x + y * y);\r\n }\r\n /** Return the squared `hypotenuse (x*x + y*y)`. */\r\n public static hypotenuseSquaredXY(x: number, y: number): number {\r\n return x * x + y * y;\r\n }\r\n /** Return the square of x */\r\n public static square(x: number): number {\r\n return x * x;\r\n }\r\n /** Return the hypotenuse `sqrt(x*x + y*y + z*z)`. This is much faster than `Math.hypot(x,y,z)`. */\r\n public static hypotenuseXYZ(x: number, y: number, z: number): number {\r\n return Math.sqrt(x * x + y * y + z * z);\r\n }\r\n /** Return the squared hypotenuse `(x*x + y*y + z*z)`. This is much faster than `Math.hypot(x,y,z)`. */\r\n public static hypotenuseSquaredXYZ(x: number, y: number, z: number): number {\r\n return x * x + y * y + z * z;\r\n }\r\n /** Return the (full 4d) hypotenuse `sqrt(x*x + y*y + z*z + w*w)`. This is much faster than `Math.hypot(x,y,z,w)`. */\r\n public static hypotenuseXYZW(x: number, y: number, z: number, w: number): number {\r\n return Math.sqrt(x * x + y * y + z * z + w * w);\r\n }\r\n /** Return the squared hypotenuse `(x*x + y*y + z*z+w*w)`. This is much faster than `Math.hypot(x,y,z)`. */\r\n public static hypotenuseSquaredXYZW(x: number, y: number, z: number, w: number): number {\r\n return x * x + y * y + z * z + w * w;\r\n }\r\n /**\r\n * Return the distance between xy points given as numbers.\r\n * @param x0 x coordinate of point 0\r\n * @param y0 y coordinate of point 0\r\n * @param x1 x coordinate of point 1\r\n * @param y1 y coordinate of point 1\r\n */\r\n public static distanceXYXY(x0: number, y0: number, x1: number, y1: number): number {\r\n return Geometry.hypotenuseXY(x1 - x0, y1 - y0);\r\n }\r\n /**\r\n * Return the distance between xyz points given as numbers.\r\n * @param x0 x coordinate of point 0\r\n * @param y0 y coordinate of point 0\r\n * @param z0 z coordinate of point 0\r\n * @param x1 x coordinate of point 1\r\n * @param y1 y coordinate of point 1\r\n * @param z1 z coordinate of point 1\r\n */\r\n public static distanceXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number): number {\r\n return Geometry.hypotenuseXYZ(x1 - x0, y1 - y0, z1 - z0);\r\n }\r\n /** Returns Returns the triple product of 3 vectors provided as x,y,z number sequences.\r\n *\r\n * * The triple product is the determinant of the 3x3 matrix with the 9 numbers (3 vectors placed in 3 rows).\r\n * * The triple product is positive if the 3 vectors form a right handed coordinate system.\r\n * * The triple product is negative if the 3 vectors form a left handed coordinate system.\r\n * * Treating the 9 numbers as 3 vectors U, V, W, any of these formulas gives the same result:\r\n * * U dot (V cross W)\r\n * * V dot (W cross U)\r\n * * W dot (U cross V)\r\n * * (-U dot (W cross V)) -- (note the negative -- reversing cross product order changes the sign)\r\n * * (-V dot (U cross W)) -- (note the negative -- reversing cross product order changes the sign)\r\n * * (-W dot (V cross U)) -- (note the negative -- reversing cross product order changes the sign)\r\n * * the triple product is 6 times the (signed) volume of the tetrahedron with the three vectors as edges from a common vertex.\r\n */\r\n public static tripleProduct(\r\n ux: number, uy: number, uz: number,\r\n vx: number, vy: number, vz: number,\r\n wx: number, wy: number, wz: number): number {\r\n return ux * (vy * wz - vz * wy)\r\n + uy * (vz * wx - vx * wz)\r\n + uz * (vx * wy - vy * wx);\r\n }\r\n /** Returns the determinant of the 4x4 matrix unrolled as the 16 parameters.\r\n */\r\n public static determinant4x4(\r\n xx: number, xy: number, xz: number, xw: number,\r\n yx: number, yy: number, yz: number, yw: number,\r\n zx: number, zy: number, zz: number, zw: number,\r\n wx: number, wy: number, wz: number, ww: number): number {\r\n return xx * this.tripleProduct(yy, yz, yw, zy, zz, zw, wy, wz, ww)\r\n - yx * this.tripleProduct(xy, xz, xw, zy, zz, zw, wy, wz, ww)\r\n + zx * this.tripleProduct(xy, xz, xw, yy, yz, yw, wy, wz, ww)\r\n - wx * this.tripleProduct(xy, xz, xw, yy, yz, yw, zy, zz, zw);\r\n }\r\n /** Return the mean curvature for two radii, with 0 radius implying 0 curvature */\r\n public static meanCurvatureOfRadii(r0: number, r1: number): number {\r\n return 0.5 * (this.safeDivideFraction(1, r0, 0) + this.safeDivideFraction(1, r1, 0));\r\n }\r\n /**\r\n * Returns curvature magnitude from a first and second derivative vector.\r\n * @param ux first derivative x component\r\n * @param uy first derivative y component\r\n * @param uz first derivative z component\r\n * @param vx second derivative x component\r\n * @param vy second derivative y component\r\n * @param vz second derivative z component\r\n */\r\n public static curvatureMagnitude(\r\n ux: number, uy: number, uz: number,\r\n vx: number, vy: number, vz: number): number {\r\n let q = uy * vz - uz * vy;\r\n let sum = q * q;\r\n q = uz * vx - ux * vz;\r\n sum += q * q;\r\n q = ux * vy - uy * vx;\r\n sum += q * q;\r\n const a = Math.sqrt(ux * ux + uy * uy + uz * uz);\r\n const b = Math.sqrt(sum);\r\n // (sum and a are both nonnegative)\r\n const aaa = a * a * a;\r\n // radius of curvature = aaa / b;\r\n // curvature = b/aaa\r\n const tol = Geometry.smallAngleRadians;\r\n if (aaa > tol * b)\r\n return b / aaa;\r\n return 0; // hm.. maybe should be infinite?\r\n }\r\n /** Returns the determinant of 3x3 matrix with x and y rows taken from 3 points, third row from corresponding numbers.\r\n *\r\n */\r\n public static tripleProductXYW(\r\n columnA: XAndY, weightA: number,\r\n columnB: XAndY, weightB: number,\r\n columnC: XAndY, weightC: number): number {\r\n return Geometry.tripleProduct(\r\n columnA.x, columnB.x, columnC.x,\r\n columnA.y, columnB.y, columnC.y,\r\n weightA, weightB, weightC);\r\n }\r\n /** Returns the determinant of 3x3 matrix with x and y rows taken from 3 points, third row from corresponding numbers.\r\n *\r\n */\r\n public static tripleProductPoint4dXYW(\r\n columnA: Point4d,\r\n columnB: Point4d,\r\n columnC: Point4d): number {\r\n return Geometry.tripleProduct(\r\n columnA.x, columnB.x, columnC.x,\r\n columnA.y, columnB.y, columnC.y,\r\n columnA.w, columnB.w, columnC.w);\r\n }\r\n /** 2D cross product of vectors layed out as scalars. */\r\n public static crossProductXYXY(ux: number, uy: number, vx: number, vy: number): number {\r\n return ux * vy - uy * vx;\r\n }\r\n /** 3D cross product of vectors layed out as scalars. */\r\n public static crossProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Vector3d): Vector3d {\r\n return Vector3d.create(\r\n uy * vz - uz * vy,\r\n uz * vx - ux * vz,\r\n ux * vy - uy * vx, result);\r\n }\r\n /** magnitude of 3D cross product of vectors, with the vectors presented as */\r\n public static crossProductMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number {\r\n return Geometry.hypotenuseXYZ(\r\n uy * vz - uz * vy,\r\n uz * vx - ux * vz,\r\n ux * vy - uy * vx);\r\n }\r\n /** 3D dot product of vectors layed out as scalars. */\r\n public static dotProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number {\r\n return ux * vx + uy * vy + uz * vz;\r\n }\r\n /** 2D dot product of vectors layed out as scalars. */\r\n public static dotProductXYXY(ux: number, uy: number, vx: number, vy: number): number {\r\n return ux * vx + uy * vy;\r\n }\r\n /**\r\n * Clamp to (min(a,b), max(a,b))\r\n * * always returns a number between a and b\r\n * @param x\r\n * @param a\r\n * @param b\r\n */\r\n public static clampToStartEnd(x: number, a: number, b: number): number {\r\n if (a > b)\r\n return Geometry.clampToStartEnd(x, b, a);\r\n if (x < a)\r\n return a;\r\n if (b < x)\r\n return b;\r\n return x;\r\n }\r\n /**\r\n * Clamp value to (min,max) with no test for order of (min,max)\r\n * @param value value to clamp\r\n * @param min smallest allowed output\r\n * @param max largest allowed result.\r\n */\r\n public static clamp(value: number, min: number, max: number): number { return Math.max(min, Math.min(max, value)); }\r\n /** If given a number, return it. If given undefined, return `defaultValue`. */\r\n public static resolveNumber(value: number | undefined, defaultValue: number = 0): number {\r\n return value !== undefined ? value : defaultValue;\r\n }\r\n /** If given a value, return it. If given undefined, return `defaultValue`. */\r\n public static resolveValue<T>(value: T | undefined, defaultValue: T): T {\r\n return value !== undefined ? value : defaultValue;\r\n }\r\n /** If given value matches a target, return undefined. Otherwise return the value. */\r\n public static resolveToUndefined<T>(value: T | undefined, targetValue: T): T | undefined {\r\n return value === targetValue ? undefined : value;\r\n }\r\n /** Simple interpolation between values, but choosing (based on fraction) a or b as starting point for maximum accuracy. */\r\n public static interpolate(a: number, f: number, b: number): number {\r\n return f <= 0.5 ? a + f * (b - a) : b - (1.0 - f) * (b - a);\r\n }\r\n /**\r\n * Given an axisOrder (e.g. XYZ, YZX, etc) and an index, returns the axis index at the given index.\r\n * * For example, if axisOrder = XYZ, then for index 0 returns X (or axis index 0), for index 1 returns\r\n * Y (or axis index 1), and for index 2 returns Z (or axis index 2). For indexes greater than 2 or smaller\r\n * than 0, it returns cyclic axis index. See Geometry.cyclic3dAxis for more info.\r\n * * Another example: if axisOrder = ZYX, then for index 0 returns Z (or axis index 2), for index 1 returns\r\n * Y (or axis index 1), and for index 2 returns X (or axis index 0).\r\n * */\r\n public static axisOrderToAxis(order: AxisOrder, index: number): number {\r\n const axis = order <= AxisOrder.ZXY ? order + index : (order - AxisOrder.XZY) - index;\r\n return Geometry.cyclic3dAxis(axis);\r\n }\r\n /** Return (a modulo period), e.g. for use as a cyclic index. Both a and period may be negative. */\r\n public static modulo(a: number, period: number): number {\r\n if (period <= 0) {\r\n if (period === 0)\r\n return a;\r\n return -Geometry.modulo(-a, -period);\r\n }\r\n\r\n if (a >= 0) {\r\n if (a < period)\r\n return a;\r\n if (a < 2 * period)\r\n return a - period;\r\n } else {\r\n a += period; // hopefully move into primary period without division and floor\r\n if (a > 0)\r\n return a;\r\n }\r\n const m = Math.floor(a / period);\r\n return a - m * period;\r\n }\r\n /** return 0 if the value is undefined, 1 if defined. */\r\n public static defined01(value: any): number { return value === undefined ? 0 : 1; }\r\n /** normally, return numerator/denominator.\r\n * but if the ratio would exceed Geometry.largeFractionResult, return undefined.\r\n */\r\n public static conditionalDivideFraction(numerator: number, denominator: number): number | undefined {\r\n if (Math.abs(denominator) * Geometry.largeFractionResult > Math.abs(numerator))\r\n return numerator / denominator;\r\n return undefined;\r\n }\r\n /** normally, return numerator/denominator.\r\n * but if the ratio would exceed Geometry.largestResult, return undefined.\r\n */\r\n public static conditionalDivideCoordinate(numerator: number, denominator: number, largestResult: number = Geometry.largeCoordinateResult): number | undefined {\r\n if (Math.abs(denominator * largestResult) > Math.abs(numerator))\r\n return numerator / denominator;\r\n return undefined;\r\n }\r\n /** return the 0, 1, or 2 pairs of (c,s) values that solve\r\n * {constCoff + cosCoff * c + sinCoff * s = 0}\r\n * with the constraint {c*c+s*s = 1}\r\n */\r\n public static solveTrigForm(constCoff: number, cosCoff: number, sinCoff: number): Vector2d[] | undefined {\r\n {\r\n const delta2 = cosCoff * cosCoff + sinCoff * sinCoff;\r\n const constCoff2 = constCoff * constCoff;\r\n // nSolution = 0\r\n let result;\r\n if (delta2 > 0.0) {\r\n const lambda = - constCoff / delta2;\r\n const a2 = constCoff2 / delta2;\r\n const D2 = 1.0 - a2;\r\n if (-Geometry.smallMetricDistanceSquared < D2 && D2 <= 0.0) { // observed D2 = -2.22e-16 in rotated system\r\n // nSolution = 1\r\n const c0 = lambda * cosCoff;\r\n const s0 = lambda * sinCoff;\r\n result = [Vector2d.create(c0, s0)];\r\n } else if (D2 > 0.0) {\r\n const mu = Math.sqrt(D2 / delta2);\r\n /* c0,s0 = closest approach of line to origin */\r\n const c0 = lambda * cosCoff;\r\n const s0 = lambda * sinCoff;\r\n // nSolution = 2\r\n result = [Vector2d.create(c0 - mu * sinCoff, s0 + mu * cosCoff), Vector2d.create(c0 + mu * sinCoff, s0 - mu * cosCoff)];\r\n }\r\n }\r\n return result;\r\n }\r\n }\r\n /** normally, return the number result of conditionalDivideFraction.\r\n * but if conditionalDivideFraction fails return specified default number.\r\n */\r\n public static safeDivideFraction(numerator: number, denominator: number, defaultResult: number): number {\r\n const a = Geometry.conditionalDivideFraction(numerator, denominator);\r\n if (a !== undefined)\r\n return a;\r\n return defaultResult;\r\n }\r\n /** For a line f(x) whose function values at x0 and x1 are f0 and f1, return the x value at which f(x)=fTarget; */\r\n public static inverseInterpolate(x0: number, f0: number, x1: number, f1: number, targetF: number = 0,\r\n defaultResult?: number): number | undefined {\r\n const g = Geometry.conditionalDivideFraction(targetF - f0, f1 - f0);\r\n if (g)\r\n return Geometry.interpolate(x0, g, x1);\r\n return defaultResult;\r\n }\r\n /** For a line f(x) whose function values at x=0 and x=1 are f0 and f1, return the x value at which f(x)=fTarget; */\r\n public static inverseInterpolate01(f0: number, f1: number, targetF: number = 0): number | undefined {\r\n return Geometry.conditionalDivideFraction(targetF - f0, f1 - f0);\r\n }\r\n /** Return true if json is an array with at least minEntries, and all entries are numbers (including those beyond minEntries) */\r\n public static isNumberArray(json: any, minEntries: number = 0): boolean {\r\n if (Array.isArray(json) && json.length >= minEntries) {\r\n let entry;\r\n for (entry of json) {\r\n // if (!(entry as number) && entry !== 0.0)\r\n if (!Number.isFinite(entry))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return true if json is an array of at least numNumberArrays, with at least minEntries in each number array.\r\n */\r\n public static isArrayOfNumberArray(json: any, numNumberArray: number, minEntries: number = 0): boolean {\r\n if (Array.isArray(json) && json.length >= numNumberArray) {\r\n let entry;\r\n for (entry of json)\r\n if (!Geometry.isNumberArray(entry, minEntries)) return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** return the number of steps to take so that numSteps * stepSize >= total.\r\n * minCount is returned for both (a) setSize 0 or less and (b) stepSize > total.\r\n * A small tolerance is applied for almost\r\n */\r\n public static stepCount(stepSize: number, total: number, minCount = 1, maxCount = 101): number {\r\n if (stepSize <= 0)\r\n return minCount;\r\n total = Math.abs(total);\r\n if (stepSize >= total)\r\n return minCount;\r\n const stepCount = Math.floor((total + 0.999999 * stepSize) / stepSize);\r\n if (stepCount < minCount)\r\n return minCount;\r\n if (stepCount > maxCount)\r\n return maxCount;\r\n return stepCount;\r\n }\r\n /** Test if x is in simple 0..1 interval. But optionally skip the test. (this odd behavior is very convenient for code that sometimes does not do the filtering.)\r\n * @param x value to test.\r\n * @param apply01 if false, accept all x.\r\n */\r\n public static isIn01(x: number, apply01: boolean = true): boolean { return apply01 ? x >= 0.0 && x <= 1.0 : true; }\r\n /** Test if x is in simple 0..1 interval. But optionally skip the test. (this odd behavior is very convenient for code that sometimes does not do the filtering.)\r\n * @param x value to test.\r\n * @param apply01 if false, accept all x.\r\n */\r\n public static isIn01WithTolerance(x: number, tolerance: number): boolean { return x + tolerance >= 0.0 && x - tolerance <= 1.0; }\r\n /**\r\n * restrict x so it is in the interval `[a,b]`, allowing a,b to be in either order.\r\n * @param x\r\n * @param a (usually the lower) interval limit\r\n * @param b (usually the upper) interval limit\r\n */\r\n public static restrictToInterval(x: number, a: number, b: number): number {\r\n if (a <= b) {\r\n if (x < a) return a;\r\n if (x > b) return b;\r\n return x;\r\n }\r\n // reversed interval ....\r\n if (x < b) return b;\r\n if (x > a) return a;\r\n return x;\r\n }\r\n /**\r\n * Case-insensitive string comparison.\r\n * * Return true if the toUpperCase values match.\r\n */\r\n public static equalStringNoCase(string1: string, string2: string): boolean {\r\n return string1.toUpperCase() === string2.toUpperCase();\r\n }\r\n /** test for EXACT match of number arrays. */\r\n public static exactEqualNumberArrays(a: number[] | undefined, b: number[] | undefined): boolean {\r\n if (Array.isArray(a) && a.length === 0)\r\n a = undefined;\r\n if (Array.isArray(b) && b.length === 0)\r\n b = undefined;\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length)\r\n return false;\r\n for (let i = 0; i < a.length; i++)\r\n if (a[i] !== b[i])\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** test for match of XYZ arrays. */\r\n public static almostEqualArrays<T>(a: T[] | undefined, b: T[] | undefined,\r\n testFunction: (p: T, q: T) => boolean): boolean {\r\n if (Array.isArray(a) && a.length === 0)\r\n a = undefined;\r\n if (Array.isArray(b) && b.length === 0)\r\n b = undefined;\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length)\r\n return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (!testFunction(a[i], b[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** test for match of typed arrays (e.g. Float64Array). */\r\n public static almostEqualNumberArrays(a: number[] | Float64Array | undefined, b: number[] | Float64Array | undefined,\r\n testFunction: (p: number, q: number) => boolean): boolean {\r\n if (Array.isArray(a) && a.length === 0)\r\n a = undefined;\r\n if (Array.isArray(b) && b.length === 0)\r\n b = undefined;\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length)\r\n return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (!testFunction(a[i], b[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return\r\n * * true if both values are defined and equal (with ===).\r\n * * false if both defined by not equal\r\n * * return (option arg) resultIfBothUndefined when both are undefined.\r\n * * return false if one is defined and the other undefined\r\n * @param a first value\r\n * @param b second value\r\n * @param resultIfBothUndefined return value when both are undefined.\r\n * @returns\r\n */\r\n public static areEqualAllowUndefined<T>(a: T | undefined, b: T | undefined, resultIfBothUndefined: boolean = true): boolean {\r\n if (a === undefined && b === undefined)\r\n return resultIfBothUndefined;\r\n if (a !== undefined && b !== undefined)\r\n return a === b;\r\n return false;\r\n }\r\n /** clone an array whose members have a clone method.\r\n * * undefined return from clone is forced into the output array.\r\n */\r\n public static cloneMembers<T extends Cloneable<T>>(a: T[] | undefined): T[] | undefined {\r\n if (a === undefined)\r\n return undefined;\r\n const b: T[] = [];\r\n for (const p of a) {\r\n b.push(p.clone()!);\r\n }\r\n return b;\r\n }\r\n}\r\n/**\r\n * interface for method with a clone operation\r\n * @public\r\n */\r\nexport interface Cloneable<T> {\r\n /** required method to return a deep clone. */\r\n clone(): T | undefined;\r\n}\r\n/** Options used for methods like [[Vector2d.isPerpendicularTo]] and [[Vector3d.isParallelTo]].\r\n * @public\r\n */\r\nexport interface PerpParallelOptions {\r\n /** Squared radian tolerance for comparing the angle between two vectors.\r\n * Default: [[Geometry.smallAngleRadiansSquared]].\r\n */\r\n radianSquaredTol?: number;\r\n /** Squared distance tolerance for detecting a zero-length vector.\r\n * Default: [[Geometry.smallMetricDistanceSquared]].\r\n */\r\n distanceSquaredTol?: number;\r\n}\r\n"]}
@@ -13,26 +13,28 @@ import { GeometryQuery } from "./GeometryQuery";
13
13
  export declare class CurveCurve {
14
14
  /**
15
15
  * Return xy intersections of 2 curves.
16
- * @param geometryA second geometry
16
+ * @param geometryA first geometry
17
17
  * @param extendA true to allow geometryA to extend
18
18
  * @param geometryB second geometry
19
19
  * @param extendB true to allow geometryB to extend
20
+ * @param tolerance optional distance tolerance for coincidence
20
21
  */
21
- static intersectionXYPairs(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailPair[];
22
+ static intersectionXYPairs(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean, tolerance?: number): CurveLocationDetailPair[];
22
23
  /**
23
24
  * Return xy intersections of 2 projected curves
24
- * @param geometryA second geometry
25
+ * @param geometryA first geometry
25
26
  * @param extendA true to allow geometryA to extend
26
27
  * @param geometryB second geometry
27
28
  * @param extendB true to allow geometryB to extend
29
+ * @param tolerance optional distance tolerance for coincidence
28
30
  */
29
- static intersectionProjectedXYPairs(worldToLocal: Matrix4d, geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailPair[];
31
+ static intersectionProjectedXYPairs(worldToLocal: Matrix4d, geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean, tolerance?: number): CurveLocationDetailPair[];
30
32
  /**
31
33
  * Return full 3d xyz intersections of 2 curves.
32
34
  * * Implemented for combinations of LineSegment3d, LineString3d, Arc3d.
33
35
  * * Not Implemented for bspline and bezier curves.
34
36
  * @beta
35
- * @param geometryA second geometry
37
+ * @param geometryA first geometry
36
38
  * @param extendA true to allow geometryA to extend
37
39
  * @param geometryB second geometry
38
40
  * @param extendB true to allow geometryB to extend
@@ -40,15 +42,16 @@ export declare class CurveCurve {
40
42
  static intersectionXYZ(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailArrayPair;
41
43
  /**
42
44
  * Return xy intersections of 2 curves.
43
- * @param geometryA second geometry
45
+ * @param geometryA first geometry
44
46
  * @param extendA true to allow geometryA to extend
45
47
  * @param geometryB second geometry
46
48
  * @param extendB true to allow geometryB to extend
49
+ * @param tolerance optional distance tolerance for coincidence
47
50
  */
48
- static allIntersectionsAmongPrimitivesXY(primitives: CurvePrimitive[]): CurveLocationDetailPair[];
51
+ static allIntersectionsAmongPrimitivesXY(primitives: CurvePrimitive[], tolerance?: number): CurveLocationDetailPair[];
49
52
  /**
50
53
  * Return xy close approaches of 2 projected curves
51
- * @param geometryA second geometry
54
+ * @param geometryA first geometry
52
55
  * @param geometryB second geometry
53
56
  */
54
57
  static closeApproachProjectedXYPairs(geometryA: GeometryQuery, geometryB: GeometryQuery, maxDistance: number): CurveLocationDetailPair[];
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurve.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCurve.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAyB,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAE9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;;GAGG;AACH,qBAAa,UAAU;IACrB;;;;;;OAMG;WACW,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,uBAAuB,EAAE;IAapJ;;;;;;OAMG;WACW,4BAA4B,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,uBAAuB,EAAE;IAKrL;;;;;;;;;OASG;WACW,eAAe,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,4BAA4B;IAKnJ;;;;;;OAMG;WACW,iCAAiC,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,uBAAuB,EAAE;IAWxG;;;;OAIG;WACW,6BAA6B,CACzC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,uBAAuB,EAAE;CAOtG"}
1
+ {"version":3,"file":"CurveCurve.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCurve.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EAAyB,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAE9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,UAAU;IACrB;;;;;;;OAOG;WACW,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,GAAE,MAAqC,GAAG,uBAAuB,EAAE;IAatM;;;;;;;OAOG;WACW,4BAA4B,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,GAAE,MAAqC,GAAG,uBAAuB,EAAE;IAKvO;;;;;;;;;OASG;WACW,eAAe,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,4BAA4B;IAKnJ;;;;;;;OAOG;WACW,iCAAiC,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,SAAS,GAAE,MAAqC,GAAG,uBAAuB,EAAE;IAW1J;;;;OAIG;WACW,6BAA6B,CACzC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,uBAAuB,EAAE;CAOtG"}
@@ -8,11 +8,12 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.CurveCurve = void 0;
11
+ const Geometry_1 = require("../Geometry");
11
12
  const CurveCollection_1 = require("./CurveCollection");
13
+ const CurveCurveCloseApproachXY_1 = require("./CurveCurveCloseApproachXY");
12
14
  const CurveCurveIntersectXY_1 = require("./CurveCurveIntersectXY");
13
15
  const CurveCurveIntersectXYZ_1 = require("./CurveCurveIntersectXYZ");
14
16
  const CurvePrimitive_1 = require("./CurvePrimitive");
15
- const CurveCurveCloseApproachXY_1 = require("./CurveCurveCloseApproachXY");
16
17
  /**
17
18
  * `CurveCurve` has static method for various computations that work on a pair of curves or curve collections.
18
19
  * @public
@@ -20,13 +21,14 @@ const CurveCurveCloseApproachXY_1 = require("./CurveCurveCloseApproachXY");
20
21
  class CurveCurve {
21
22
  /**
22
23
  * Return xy intersections of 2 curves.
23
- * @param geometryA second geometry
24
+ * @param geometryA first geometry
24
25
  * @param extendA true to allow geometryA to extend
25
26
  * @param geometryB second geometry
26
27
  * @param extendB true to allow geometryB to extend
28
+ * @param tolerance optional distance tolerance for coincidence
27
29
  */
28
- static intersectionXYPairs(geometryA, extendA, geometryB, extendB) {
29
- const handler = new CurveCurveIntersectXY_1.CurveCurveIntersectXY(undefined, geometryA, extendA, geometryB, extendB);
30
+ static intersectionXYPairs(geometryA, extendA, geometryB, extendB, tolerance = Geometry_1.Geometry.smallMetricDistance) {
31
+ const handler = new CurveCurveIntersectXY_1.CurveCurveIntersectXY(undefined, geometryA, extendA, geometryB, extendB, tolerance);
30
32
  if (geometryB instanceof CurvePrimitive_1.CurvePrimitive) {
31
33
  geometryA.dispatchToGeometryHandler(handler);
32
34
  }
@@ -41,13 +43,14 @@ class CurveCurve {
41
43
  }
42
44
  /**
43
45
  * Return xy intersections of 2 projected curves
44
- * @param geometryA second geometry
46
+ * @param geometryA first geometry
45
47
  * @param extendA true to allow geometryA to extend
46
48
  * @param geometryB second geometry
47
49
  * @param extendB true to allow geometryB to extend
50
+ * @param tolerance optional distance tolerance for coincidence
48
51
  */
49
- static intersectionProjectedXYPairs(worldToLocal, geometryA, extendA, geometryB, extendB) {
50
- const handler = new CurveCurveIntersectXY_1.CurveCurveIntersectXY(worldToLocal, geometryA, extendA, geometryB, extendB);
52
+ static intersectionProjectedXYPairs(worldToLocal, geometryA, extendA, geometryB, extendB, tolerance = Geometry_1.Geometry.smallMetricDistance) {
53
+ const handler = new CurveCurveIntersectXY_1.CurveCurveIntersectXY(worldToLocal, geometryA, extendA, geometryB, extendB, tolerance);
51
54
  geometryA.dispatchToGeometryHandler(handler);
52
55
  return handler.grabPairedResults();
53
56
  }
@@ -56,7 +59,7 @@ class CurveCurve {
56
59
  * * Implemented for combinations of LineSegment3d, LineString3d, Arc3d.
57
60
  * * Not Implemented for bspline and bezier curves.
58
61
  * @beta
59
- * @param geometryA second geometry
62
+ * @param geometryA first geometry
60
63
  * @param extendA true to allow geometryA to extend
61
64
  * @param geometryB second geometry
62
65
  * @param extendB true to allow geometryB to extend
@@ -68,13 +71,14 @@ class CurveCurve {
68
71
  }
69
72
  /**
70
73
  * Return xy intersections of 2 curves.
71
- * @param geometryA second geometry
74
+ * @param geometryA first geometry
72
75
  * @param extendA true to allow geometryA to extend
73
76
  * @param geometryB second geometry
74
77
  * @param extendB true to allow geometryB to extend
78
+ * @param tolerance optional distance tolerance for coincidence
75
79
  */
76
- static allIntersectionsAmongPrimitivesXY(primitives) {
77
- const handler = new CurveCurveIntersectXY_1.CurveCurveIntersectXY(undefined, undefined, false, undefined, false);
80
+ static allIntersectionsAmongPrimitivesXY(primitives, tolerance = Geometry_1.Geometry.smallMetricDistance) {
81
+ const handler = new CurveCurveIntersectXY_1.CurveCurveIntersectXY(undefined, undefined, false, undefined, false, tolerance);
78
82
  for (let i = 0; i < primitives.length; i++) {
79
83
  const geometryA = primitives[i];
80
84
  for (let j = i + 1; j < primitives.length; j++) {
@@ -86,7 +90,7 @@ class CurveCurve {
86
90
  }
87
91
  /**
88
92
  * Return xy close approaches of 2 projected curves
89
- * @param geometryA second geometry
93
+ * @param geometryA first geometry
90
94
  * @param geometryB second geometry
91
95
  */
92
96
  static closeApproachProjectedXYPairs(geometryA, geometryB, maxDistance) {