@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.
- package/lib/cjs/Geometry.d.ts +3 -3
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +27 -11
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.d.ts +11 -8
- package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurve.js +16 -12
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +5 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.js +11 -10
- package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +18 -0
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +38 -0
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +1 -0
- package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js +3 -0
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +171 -118
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +448 -417
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -13
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +15 -13
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.d.ts +1 -1
- package/lib/cjs/geometry3d/Segment1d.js +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts +12 -0
- package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
- package/lib/cjs/numerics/Polynomials.js +14 -0
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -0
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +46 -6
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +54 -0
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +71 -1
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.d.ts +202 -0
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.d.ts.map +1 -0
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +1038 -0
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -0
- package/lib/cjs/serialization/GeometrySamples.d.ts +4 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js +14 -6
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +113 -7
- package/lib/cjs/topology/Graph.d.ts.map +1 -1
- package/lib/cjs/topology/Graph.js +185 -7
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +38 -0
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -0
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +82 -0
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -0
- package/lib/esm/Geometry.d.ts +3 -3
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +27 -11
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/curve/CurveCurve.d.ts +11 -8
- package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurve.js +16 -12
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.d.ts +5 -1
- package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.js +11 -10
- package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +18 -0
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +38 -0
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +1 -0
- package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js +3 -0
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +171 -118
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +448 -417
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -13
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +15 -13
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.d.ts +1 -1
- package/lib/esm/geometry3d/Segment1d.js +1 -1
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts +12 -0
- package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
- package/lib/esm/numerics/Polynomials.js +14 -0
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -0
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +46 -6
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +54 -0
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +69 -0
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.d.ts +202 -0
- package/lib/esm/polyface/multiclip/OffsetMeshContext.d.ts.map +1 -0
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js +1032 -0
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -0
- package/lib/esm/serialization/GeometrySamples.d.ts +4 -1
- package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js +14 -6
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +113 -7
- package/lib/esm/topology/Graph.d.ts.map +1 -1
- package/lib/esm/topology/Graph.js +185 -7
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +38 -0
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -0
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +78 -0
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -0
- package/package.json +4 -4
package/lib/cjs/Geometry.d.ts
CHANGED
|
@@ -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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"}
|
package/lib/cjs/Geometry.js
CHANGED
|
@@ -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) {
|
|
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) {
|
|
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) {
|
|
349
|
+
static hypotenuseSquaredXY(x, y) {
|
|
350
|
+
return x * x + y * y;
|
|
351
|
+
}
|
|
346
352
|
/** Return the square of x */
|
|
347
|
-
static square(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) {
|
|
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) {
|
|
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) {
|
|
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) {
|
|
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
|
package/lib/cjs/Geometry.js.map
CHANGED
|
@@ -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":"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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)\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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
93
|
+
* @param geometryA first geometry
|
|
90
94
|
* @param geometryB second geometry
|
|
91
95
|
*/
|
|
92
96
|
static closeApproachProjectedXYPairs(geometryA, geometryB, maxDistance) {
|