API Reference > geometry-core > CartesianGeometry > Geometry Geometry Class Class containing static methods for typical numeric operations. Experimentally, methods like Geometry.hypotenuse are observed to be faster than the system intrinsics. This is probably due to Fixed length arg lists strongly typed parameters Methods Name Description axisIndexToRightHandedAxisOrder(axisIndex: AxisIndex): AxisOrder Static Return the AxisOrder for which axisIndex is the first named axis. axisOrderToAxis(order: AxisOrder, index: number): number Static given an axisOrder (e.g. clamp(value: number, min: number, max: number): number Static Clamp value to (min,max) with no test for order of (min,max) clampToStartEnd(x: number, a: number, b: number): number Static Clamp to (min(a,b), max(a,b)) conditionalDivideCoordinate(numerator: number, denominator: number, largestResult: number = Geometry.largeCoordinateResult): number | undefined Static normally, return numerator/denominator. conditionalDivideFraction(numerator: number, denominator: number): number | undefined Static normally, return numerator/denominator. correctSmallMetricDistance(distance: number, replacement: number = 0): number Static Correct distance to zero if smaller than metric tolerance. crossProductMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number Static magnitude of 3D cross product of vectors, with the vectors presented as crossProductXYXY(ux: number, uy: number, vx: number, vy: number): number Static 2D cross product of vectors layed out as scalars. crossProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Vector3d): Vector3d Static 3D cross product of vectors layed out as scalars. curvatureMagnitude(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number Static Returns curvature magnitude from a first and second derivative vector. cyclic3dAxis(axis: number): number Static Return axis modulo 3 with proper handling of negative indices (-1 is z), -2 is y, -3 is x etc) defined01(value: any): number Static return 0 if the value is undefined, 1 if defined. determinant4x4(xx: number, xy: number, xz: number, xw: number, yx: number, yy: number, yz: number, yw: number, zx: number, zy: number, zz: number, zw: number, wx: number, wy: number, wz: number, ww: number): number Static Returns the determinant of the 4x4 matrix unrolled as the 16 parameters. distanceXYXY(x0: number, y0: number, x1: number, y1: number): number Static Return the distance between xy points given as numbers. distanceXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number): number Static Return the distance between xyz points given as numbers. dotProductXYXY(ux: number, uy: number, vx: number, vy: number): number Static 2D dot product of vectors layed out as scalars. dotProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number Static 3D dot product of vectors layed out as scalars. hypotenuseSquaredXY(x: number, y: number): number Static Return the squared hypotenuse (x*x + y*y). hypotenuseSquaredXYZ(x: number, y: number, z: number): number Static Return the squared hypotenuse (x*x + y*y + z*z). hypotenuseSquaredXYZW(x: number, y: number, z: number, w: number): number Static Return the squared hypotenuse (x*x + y*y + z*z+w*w). hypotenuseXY(x: number, y: number): number Static Return the hypotenuse sqrt(x*x + y*y). hypotenuseXYZ(x: number, y: number, z: number): number Static Return the hypotenuse sqrt(x*x + y*y + z*z). hypotenuseXYZW(x: number, y: number, z: number, w: number): number Static Return the (full 4d) hypotenuse sqrt(x*x + y*y + z*z + w*w). interpolate(a: number, f: number, b: number): number Static simple interpolation between values, but choosing (based on fraction) a or b as starting point for maximum accuracy. inverseInterpolate(x0: number, f0: number, x1: number, f1: number, targetF: number = 0, defaultResult?: number): number | undefined Static 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; inverseInterpolate01(f0: number, f1: number, targetF: number = 0): number | undefined Static 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; inverseMetricDistance(a: number): number | undefined Static If a is large enough for safe division, return 1/a, using Geometry.smallMetricDistance as the tolerance for declaring it as divide by zero. inverseMetricDistanceSquared(a: number): number | undefined Static If a is large enough, return 1/a, using the square of Geometry.smallMetricDistance as the tolerance for declaring it as divide by zero. isAlmostEqualNumber(a: number, b: number): boolean Static Toleranced equality test, using tolerance smallAngleRadians * ( 1 + abs(a) + (abs(b))) isArrayOfNumberArray(json: any, numNumberArray: number, minEntries: number = 0): boolean Static Return true if json is an array of at least numNumberArrays, with at least minEntries in each number array. isDistanceWithinTol(distance: number, tol: number): boolean Static Toleranced equality test, using caller-supplied tolerance. isHugeCoordinate(x: number): boolean Static Test if absolute value of x is huge. isIn01(x: number, apply01: boolean = true): boolean Static Test if x is in simple 0..1 interval. isIn01WithTolerance(x: number, tolerance: number): boolean Static Test if x is in simple 0..1 interval. isNumberArray(json: any, minEntries: number = 0): boolean Static Return true if json is an array with at least minEntries, and all entries are numbers (including those beyond minEntries) isOdd(x: number): boolean Static Test if a number is odd. isSameCoordinate(x: number, y: number, tol?: number): boolean Static Boolean test for metric coordinate near-equality isSameCoordinateSquared(x: number, y: number): boolean Static Boolean test for squared metric coordinate near-equality isSameCoordinateWithToleranceFactor(x: number, y: number, toleranceFactor: number): boolean Static Boolean test for metric coordinate near-equality, with toleranceFactor applied to the usual smallMetricDistance isSameCoordinateXY(x0: number, y0: number, x1: number, y1: number, tol: number = Geometry.smallMetricDistance): boolean Static Boolean test for metric coordinate near-equality of x, y pair isSamePoint2d(dataA: Point2d, dataB: Point2d): boolean Static boolean test for small dataA.distanceXY (dataB) within smallMetricDistance isSamePoint3d(dataA: Point3d, dataB: Point3d): boolean Static boolean test for small dataA.distance (dataB) within smallMetricDistance isSamePoint3dXY(dataA: Point3d, dataB: Point3d): boolean Static boolean test for small dataA.distanceXY (dataB) within smallMetricDistance isSameVector2d(dataA: Vector2d, dataB: Vector2d): boolean Static boolean test for small dataA.distanceXY (dataB) within smallMetricDistance isSameVector3d(dataA: Vector3d, dataB: Vector3d): boolean Static boolean test for small dataA.distanceXY (dataB) within smallMetricDistance isSameXYZ(dataA: XYZ, dataB: XYZ): boolean Static boolean test for distance between XYZ objects within smallMetricDistance isSmallAngleRadians(value: number): boolean Static Test if value is small compared to smallAngleRadians isSmallMetricDistance(distance: number): boolean Static Toleranced equality test, using smallMetricDistance tolerance. isSmallMetricDistanceSquared(distanceSquared: number): boolean Static Toleranced equality, using smallMetricDistanceSquared tolerance. isSmallRelative(value: number): boolean Static Test if value is small compared to smallAngleRadians. lexicalXYLessThan(a: XY | XYZ, b: XY | XYZ): -1 | 0 | 1 Static Lexical comparison of (a.x,a.y) (b.x,b.y) with x as first test, y second. lexicalXYZLessThan(a: XYZ, b: XYZ): -1 | 0 | 1 Static Lexical test, based on x first, y second, z third. lexicalYXLessThan(a: XY | XYZ, b: XY | XYZ): -1 | 0 | 1 Static Lexical comparison of (a.x,a.y) (b.x,b.y) with y as first test, x second. maxAbsDiff(a: number, b0: number, b1: number): number Static Return the largest absolute distance from a to either of b0 or b1 maxAbsXY(x: number, y: number): number Static Return the largest absolute absolute value among x,y maxAbsXYZ(x: number, y: number, z: number): number Static Return the largest absolute absolute value among x,y,z maxXY(a: number, b: number): number Static Return the largest signed value among a, b maxXYZ(a: number, b: number, c: number): number Static Return the largest signed value among a, b, c minXY(a: number, b: number): number Static Return the smallest signed value among a, b modulo(a: number, period: number): number Static Return (a modulo period), e.g. resolveNumber(value: number | undefined, defaultValue: number = 0): number Static If given a number, return it. restrictToInterval(x: number, a: number, b: number): number Static restrict x so it is in the interval [a,b], allowing a,b to be in either order. safeDivideFraction(numerator: number, denominator: number, defaultResult: number): number Static normally, return the number result of conditionalDivideFraction. solveTrigForm(constCoff: number, cosCoff: number, sinCoff: number): Vector2d[] | undefined Static return the 0, 1, or 2 pairs of (c,s) values that solve split3WaySign(x: number, outNegative: number, outZero: number, outPositive: number): number Static Examine the value (particularly sign) of x. square(x: number): number Static Return the square of x stepCount(stepSize: number, total: number, minCount: number = 1, maxCount: number = 101): number Static return the number of steps to take so that numSteps * stepSize >= total. tripleProduct(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, wx: number, wy: number, wz: number): number Static Returns Returns the triple product of 3 vectors provided as x,y,z number sequences. tripleProductPoint4dXYW(columnA: Point4d, columnB: Point4d, columnC: Point4d): number Static Returns the determinant of 3x3 matrix with x and y rows taken from 3 points, third row from corresponding numbers. tripleProductXYW(columnA: XAndY, weightA: number, columnB: XAndY, weightB: number, columnC: XAndY, weightC: number): number Static Returns the determinant of 3x3 matrix with x and y rows taken from 3 points, third row from corresponding numbers. Properties Name Type Description fullCircleRadiansMinusSmallAngle Static number Radians value for full circle 2PI radians minus smallAngleRadians hugeCoordinate Static 1000000000000 numeric value that may considered infinite for metric coordinates. largeCoordinateResult Static 10000000000000 numeric value that may considered huge for numbers expected to be coordinates. largeFractionResult Static 10000000000 numeric value that may considered huge for numbers expected to be 0..1 fractions. smallAngleRadians Static 1e-12 tolerance for small angle measured in radians. smallAngleRadiansSquared Static 1e-24 square of smallAngleRadians smallFraction Static 1e-10 numeric value that may considered zero 0..1 fractions. smallMetricDistance Static 0.000001 Tolerance for small distances in metric coordinates smallMetricDistanceSquared Static 1e-12 Square of smallMetricTolerance Defined in core/geometry/src/Geometry.ts Line 171 Last Updated: 13 June, 2024