@itwin/core-geometry 4.10.0-dev.32 → 4.10.0-dev.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/lib/cjs/Geometry.js +2 -2
  2. package/lib/cjs/Geometry.js.map +1 -1
  3. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  4. package/lib/cjs/bspline/BSpline1dNd.js +0 -1
  5. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.d.ts +5 -3
  7. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurve.js +5 -4
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/clipping/ClipVector.js +1 -1
  11. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  12. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  13. package/lib/cjs/curve/Arc3d.js.map +1 -1
  14. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +7 -5
  15. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  16. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +9 -7
  17. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  18. package/lib/cjs/curve/CurveCollection.d.ts +21 -2
  19. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  20. package/lib/cjs/curve/CurveCollection.js +45 -10
  21. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  22. package/lib/cjs/curve/CurveExtendMode.d.ts +18 -15
  23. package/lib/cjs/curve/CurveExtendMode.d.ts.map +1 -1
  24. package/lib/cjs/curve/CurveExtendMode.js +18 -17
  25. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  26. package/lib/cjs/curve/CurvePrimitive.d.ts +9 -5
  27. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  28. package/lib/cjs/curve/CurvePrimitive.js +9 -5
  29. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  30. package/lib/cjs/curve/CurveProcessor.d.ts.map +1 -1
  31. package/lib/cjs/curve/CurveProcessor.js +0 -1
  32. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  33. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  34. package/lib/cjs/curve/LineSegment3d.js +0 -1
  35. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  36. package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -1
  37. package/lib/cjs/curve/OffsetOptions.js +4 -4
  38. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  39. package/lib/cjs/curve/Path.d.ts +14 -0
  40. package/lib/cjs/curve/Path.d.ts.map +1 -1
  41. package/lib/cjs/curve/Path.js +27 -0
  42. package/lib/cjs/curve/Path.js.map +1 -1
  43. package/lib/cjs/curve/PointString3d.d.ts.map +1 -1
  44. package/lib/cjs/curve/PointString3d.js +0 -1
  45. package/lib/cjs/curve/PointString3d.js.map +1 -1
  46. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  47. package/lib/cjs/curve/StrokeOptions.js +0 -1
  48. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  49. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +5 -4
  50. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  51. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  52. package/lib/cjs/geometry3d/FrameBuilder.js +0 -1
  53. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  54. package/lib/cjs/geometry3d/IndexedXYCollection.d.ts.map +1 -1
  55. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  56. package/lib/cjs/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
  57. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -3
  58. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  59. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  60. package/lib/cjs/geometry3d/PointHelpers.js +0 -1
  61. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  62. package/lib/cjs/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
  63. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  64. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  65. package/lib/cjs/numerics/BezierPolynomials.js +0 -1
  66. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  67. package/lib/cjs/polyface/AuxData.d.ts.map +1 -1
  68. package/lib/cjs/polyface/AuxData.js.map +1 -1
  69. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  70. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +0 -1
  71. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  72. package/lib/cjs/polyface/Polyface.d.ts +2 -2
  73. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  74. package/lib/cjs/polyface/Polyface.js +0 -1
  75. package/lib/cjs/polyface/Polyface.js.map +1 -1
  76. package/lib/cjs/polyface/PolyfaceBuilder.js +1 -1
  77. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  78. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  79. package/lib/cjs/polyface/PolyfaceClip.js +0 -1
  80. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  81. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  82. package/lib/cjs/polyface/PolyfaceQuery.js +0 -1
  83. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  84. package/lib/cjs/serialization/DeepCompare.d.ts.map +1 -1
  85. package/lib/cjs/serialization/DeepCompare.js +0 -1
  86. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  87. package/lib/esm/Geometry.js +2 -2
  88. package/lib/esm/Geometry.js.map +1 -1
  89. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  90. package/lib/esm/bspline/BSpline1dNd.js +0 -1
  91. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  92. package/lib/esm/bspline/BSplineCurve.d.ts +5 -3
  93. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  94. package/lib/esm/bspline/BSplineCurve.js +5 -4
  95. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  96. package/lib/esm/clipping/ClipVector.js +1 -1
  97. package/lib/esm/clipping/ClipVector.js.map +1 -1
  98. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  99. package/lib/esm/curve/Arc3d.js.map +1 -1
  100. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +7 -5
  101. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  102. package/lib/esm/curve/CurveChainWithDistanceIndex.js +9 -7
  103. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  104. package/lib/esm/curve/CurveCollection.d.ts +21 -2
  105. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  106. package/lib/esm/curve/CurveCollection.js +45 -10
  107. package/lib/esm/curve/CurveCollection.js.map +1 -1
  108. package/lib/esm/curve/CurveExtendMode.d.ts +18 -15
  109. package/lib/esm/curve/CurveExtendMode.d.ts.map +1 -1
  110. package/lib/esm/curve/CurveExtendMode.js +18 -17
  111. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  112. package/lib/esm/curve/CurvePrimitive.d.ts +9 -5
  113. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  114. package/lib/esm/curve/CurvePrimitive.js +9 -5
  115. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  116. package/lib/esm/curve/CurveProcessor.d.ts.map +1 -1
  117. package/lib/esm/curve/CurveProcessor.js +0 -1
  118. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  119. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  120. package/lib/esm/curve/LineSegment3d.js +0 -1
  121. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  122. package/lib/esm/curve/OffsetOptions.d.ts.map +1 -1
  123. package/lib/esm/curve/OffsetOptions.js +4 -4
  124. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  125. package/lib/esm/curve/Path.d.ts +14 -0
  126. package/lib/esm/curve/Path.d.ts.map +1 -1
  127. package/lib/esm/curve/Path.js +27 -0
  128. package/lib/esm/curve/Path.js.map +1 -1
  129. package/lib/esm/curve/PointString3d.d.ts.map +1 -1
  130. package/lib/esm/curve/PointString3d.js +0 -1
  131. package/lib/esm/curve/PointString3d.js.map +1 -1
  132. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  133. package/lib/esm/curve/StrokeOptions.js +0 -1
  134. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  135. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +5 -4
  136. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  137. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  138. package/lib/esm/geometry3d/FrameBuilder.js +0 -1
  139. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  140. package/lib/esm/geometry3d/IndexedXYCollection.d.ts.map +1 -1
  141. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  142. package/lib/esm/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
  143. package/lib/esm/geometry3d/Point2dArrayCarrier.js +0 -1
  144. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  145. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  146. package/lib/esm/geometry3d/PointHelpers.js +0 -1
  147. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  148. package/lib/esm/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
  149. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  150. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  151. package/lib/esm/numerics/BezierPolynomials.js +0 -1
  152. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  153. package/lib/esm/polyface/AuxData.d.ts.map +1 -1
  154. package/lib/esm/polyface/AuxData.js.map +1 -1
  155. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  156. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +0 -1
  157. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  158. package/lib/esm/polyface/Polyface.d.ts +2 -2
  159. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  160. package/lib/esm/polyface/Polyface.js +0 -1
  161. package/lib/esm/polyface/Polyface.js.map +1 -1
  162. package/lib/esm/polyface/PolyfaceBuilder.js +1 -1
  163. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  164. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  165. package/lib/esm/polyface/PolyfaceClip.js +0 -1
  166. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  167. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  168. package/lib/esm/polyface/PolyfaceQuery.js +0 -1
  169. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  170. package/lib/esm/serialization/DeepCompare.d.ts.map +1 -1
  171. package/lib/esm/serialization/DeepCompare.js +0 -1
  172. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  173. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"BezierPolynomials.js","sourceRoot":"","sources":["../../../src/numerics/BezierPolynomials.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 Numerics\r\n */\r\n\r\n// import { Angle, AngleSweep, Geometry } from \"../Geometry\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { PascalCoefficients } from \"./PascalCoefficients\";\r\nimport { AnalyticRoots, Degree2PowerPolynomial, Degree3PowerPolynomial, Degree4PowerPolynomial } from \"./Polynomials\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n/**\r\n * * BezierCoffs is an abstract base class for one-dimensional (u to f(u)) Bezier polynomials.\r\n * * The base class carries a Float64Array with coefficients.\r\n * * The Float64Array is NOT Growable unless derived classes add logic to do so. Its length is the Bezier polynomial order.\r\n * * The family of derived classes is starts with low order (at least linear through cubic) with highly optimized calculations.\r\n * * The general degree Bezier class also uses this as its base class.\r\n * * The length of the coefficient array is NOT always the bezier order. Use the `order` property to access the order.\r\n * @internal\r\n */\r\nexport abstract class BezierCoffs {\r\n /** Array of coefficients.\r\n * * The number of coefficients is the order of the Bezier polynomial.\r\n */\r\n public coffs: Float64Array;\r\n /**\r\n * * If `data` is a number, an array of that size is created with zeros.\r\n * * If `data` is a Float64Array, it is cloned (NOT CAPTURED)\r\n * * If `data` is a number array, its values are copied.\r\n */\r\n constructor(data: number | Float64Array | number[]) {\r\n if (data instanceof Float64Array) {\r\n this.coffs = data.slice();\r\n } else if (Array.isArray(data)) {\r\n this.coffs = new Float64Array(data.length);\r\n let i = 0;\r\n for (const a of data) this.coffs[i++] = a;\r\n } else {\r\n this.coffs = new Float64Array(data);\r\n }\r\n }\r\n /**\r\n * * Ensure the coefficient array size matches order. (Reallocate as needed)\r\n * * fill with zeros.\r\n * @param order required order\r\n */\r\n protected allocateToOrder(order: number) {\r\n if (this.coffs.length !== order) {\r\n this.coffs = new Float64Array(order);\r\n } else {\r\n this.coffs.fill(0);\r\n }\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\r\n * @returns array of `order` basis function values.\r\n */\r\n public abstract basisFunctions(u: number, result?: Float64Array): Float64Array;\r\n\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public abstract sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public abstract sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\r\n\r\n /** Return a deep clone of this bezier. */\r\n public abstract clone(): BezierCoffs;\r\n /**\r\n * create an object of same order with zero coefficients.\r\n * The base implementation makes a generic Bezier of the same order.\r\n */\r\n public createPeer(): BezierCoffs {\r\n const peer = new UnivariateBezier(this.order);\r\n return peer;\r\n }\r\n /** Evaluate the polynomial at u.\r\n * @param u bezier parameter for evaluation.\r\n */\r\n public abstract evaluate(u: number): number;\r\n /** The order (number of coefficients) as a readable property */\r\n public get order(): number { return this.coffs.length; }\r\n /** Copy coefficients from other Bezier. Note that the coefficient count (order) of \"this\" can change. */\r\n public copyFrom(other: BezierCoffs): void {\r\n if (this.order === other.order)\r\n for (let i = 0; i < this.coffs.length; i++) { this.coffs[i] = other.coffs[i]; }\r\n else this.coffs = other.coffs.slice();\r\n }\r\n /**\r\n * Apply a scale factor to all coefficients.\r\n * @param scale scale factor to apply to all coefficients.\r\n */\r\n public scaleInPlace(scale: number): void {\r\n for (let i = 0; i < this.coffs.length; i++)\r\n this.coffs[i] *= scale;\r\n }\r\n /** add a constant to each coefficient.\r\n * @param a constant to add.\r\n */\r\n public addInPlace(a: number): void {\r\n for (let i = 0; i < this.coffs.length; i++)\r\n this.coffs[i] += a;\r\n }\r\n /** Compute parameter values where the bezier value matches targetValue.\r\n * * The base class finds roots only in 01. (i.e. ignores _restrictTo01)\r\n * * Order-specific implementations apply special case analytic logic, e.g. for degree 1,2,3,4.\r\n */\r\n public roots(targetValue: number, _restrictTo01: boolean): number[] | undefined {\r\n const bezier = UnivariateBezier.create(this);\r\n bezier.addInPlace(- targetValue);\r\n const roots = UnivariateBezier.deflateRoots(bezier);\r\n return this.filter01(roots, true);\r\n }\r\n /** Given an array of numbers, optionally remove those not in the 0..1 interval.\r\n * @param roots candidate values\r\n * @param restrictTo01 If false, no filtering occurs and the pointer to the original array is unchanged.\r\n * If true, filtering is done and values are returned, possibly in a new array and possibly in the original.\r\n */\r\n public filter01(roots: number[] | undefined, restrictTo01 = false): number[] | undefined {\r\n if (!roots || !restrictTo01)\r\n return roots;\r\n let anyFound = false;\r\n for (const r of roots) {\r\n if (Geometry.isIn01(r)) {\r\n anyFound = true;\r\n break;\r\n }\r\n }\r\n if (anyFound) {\r\n const roots01: number[] = [];\r\n for (const r of roots) {\r\n if (Geometry.isIn01(r))\r\n roots01.push(r);\r\n }\r\n return roots01;\r\n }\r\n return undefined;\r\n }\r\n /** zero out all coefficients. */\r\n public zero(): void {\r\n this.coffs.fill(0);\r\n }\r\n /** Subdivide -- write results into caller-supplied bezier coffs (which must be of the same order) */\r\n public subdivide(u: number, left: BezierCoffs, right: BezierCoffs): boolean {\r\n const order = this.order;\r\n if (left.order !== order || right.order !== order)\r\n return false;\r\n const v = 1.0 - u;\r\n right.copyFrom(this);\r\n // each left will be filled in directly, so there is no need to initialize it.\r\n let n1 = order - 1; // number of interpolations in inner loop.\r\n for (let i0 = 0; i0 < order; i0++) {\r\n left.coffs[i0] = right.coffs[0];\r\n for (let i = 0; i < n1; i++)\r\n right.coffs[i] = v * right.coffs[i] + u * right.coffs[i + 1];\r\n n1--;\r\n }\r\n return true;\r\n }\r\n /** Return the maximum absolute difference between coefficients of two sets of BezierCoffs */\r\n public static maxAbsDiff(dataA: BezierCoffs, dataB: BezierCoffs): number | undefined {\r\n const order = dataA.order;\r\n if (dataB.order !== order)\r\n return undefined;\r\n let d = 0.0;\r\n let d1;\r\n for (let i = 0; i < order; i++) {\r\n d1 = Math.abs(dataA.coffs[i] - dataB.coffs[i]);\r\n if (d1 > d)\r\n d = d1;\r\n }\r\n return d;\r\n }\r\n}\r\n/**\r\n * Static methods to operate on univariate bezier polynomials, with coefficients in simple Float64Array or as components of blocked arrays.\r\n * @internal\r\n */\r\nexport class BezierPolynomialAlgebra {\r\n /**\r\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\r\n * * Symbolically: `product(s) += scale * (constA - polynomialA(s)) *polynomialB(s)`\r\n * * Where coefficients of polynomialA(s) are in column indexA and coefficients of polynomialB(s) are differences within column indexB.\r\n * * Treating data as 2-dimensional array: `product = sum (iA) sum (iB) (constA - basisFunction[iA} data[indexA][iA]) * basisFunction[iB] * (dataOrder-1)(data[iB + 1][indexB] - data[iB][indexB])`\r\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\r\n */\r\n public static accumulateScaledShiftedComponentTimesComponentDelta(\r\n product: Float64Array,\r\n data: Float64Array,\r\n dataBlockSize: number,\r\n dataOrder: number,\r\n scale: number,\r\n indexA: number,\r\n constA: number,\r\n indexB: number) {\r\n const orderB = dataOrder - 1; // coefficients of the first difference are implicitly present as differences of adjacent entries.\r\n const orderA = dataOrder;\r\n const orderC = dataOrder + orderB - 1;\r\n if (product.length !== orderC) return;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n let qA;\r\n for (let a = 0; a < orderA; a++) {\r\n qA = scale * (constA + data[indexA + a * dataBlockSize]) * coffA[a];\r\n for (let b = 0, k = indexB; b < orderB; b++, k += dataBlockSize) {\r\n product[a + b] += qA * coffB[b] * (data[k + dataBlockSize] - data[k]) / coffC[a + b];\r\n }\r\n }\r\n }\r\n /**\r\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\r\n * * Univariate bezierB has its coefficients at offset indexB in each block within the array of blocks.\r\n * * return the sum coefficients for `constA * polynomialA + constB * polynomialB`\r\n * * Symbolically: `product(s) = (constA * polynomialA(s) + constB * polynomialB(s)`\r\n * * The two polynomials are the same order, so this just direct sum of scaled coefficients.\r\n *\r\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\r\n */\r\n public static scaledComponentSum(sum: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, indexA: number, constA: number, indexB: number, constB: number) {\r\n const orderA = dataOrder;\r\n if (sum.length !== orderA) return;\r\n for (let a = 0, rowBase = 0; a < orderA; a++, rowBase += dataBlockSize) {\r\n sum[a] = constA * data[rowBase + indexA] + constB * data[rowBase + indexB];\r\n }\r\n }\r\n /**\r\n * * Univariate bezier has its coefficients at offset index in each block within the array of blocks.\r\n * * return the (dataOrder - 1) differences,\r\n *\r\n * * Take no action if difference length is other than `dataOrder - 1`\r\n */\r\n public static componentDifference(difference: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, index: number) {\r\n const orderA = dataOrder;\r\n const orderDiff = orderA - 1;\r\n if (difference.length !== orderDiff) return;\r\n for (let i = 0, k = index; i < orderDiff; k += dataBlockSize, i++)\r\n difference[i] = data[k + dataBlockSize] - data[k];\r\n }\r\n\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in dataB[i]\r\n * * return the product coefficients for polynomialA(s) * polynomialB(s) * scale\r\n * * Take no action if product length is other than `orderA + orderB - 1`\r\n */\r\n public static accumulateProduct(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\r\n const orderA = dataA.length;\r\n const orderB = dataB.length;\r\n const orderC = orderA + orderB - 1;\r\n if (product.length !== orderC) return;\r\n let a: number;\r\n let b: number;\r\n let qA: number;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n for (a = 0; a < orderA; a++) {\r\n qA = scale * coffA[a] * dataA[a];\r\n for (b = 0; b < orderB; b++) {\r\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in dataB[i]\r\n * * return the product coefficients for polynomialADifferences(s) * polynomialB(s) * scale\r\n * * Take no action if product length is other than `orderA + orderB - 2`\r\n */\r\n public static accumulateProductWithDifferences(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\r\n const orderA = dataA.length - 1; // We deal with its differences, which are lower order !!!\r\n const orderB = dataB.length;\r\n const orderC = orderA + orderB - 1;\r\n if (product.length !== orderC) return;\r\n let a: number;\r\n let b: number;\r\n let qA: number;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n for (a = 0; a < orderA; a++) {\r\n qA = scale * coffA[a] * (dataA[a + 1] - dataA[a]);\r\n for (b = 0; b < orderB; b++) {\r\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * * Univariate bezier has its coefficients in data[i]\r\n * * return the difference data[i+1]-data[i] in difference.\r\n * * Take no action if product length is other than `orderA + orderB - 1`\r\n */\r\n public static univariateDifference(data: Float64Array, difference: Float64Array) {\r\n const differenceOrder = difference.length;\r\n if (difference.length + 1 !== differenceOrder)\r\n for (let i = 0; i < differenceOrder; i++) {\r\n difference[i] = data[i + 1] - data[i];\r\n }\r\n }\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in resultB[i]\r\n * * add (with no scaling) bezierA to bezierB\r\n * * Take no action if resultB.length is other than dataA.length.\r\n */\r\n public static accumulate(dataA: Float64Array, orderA: number, resultB: Float64Array) {\r\n if (resultB.length !== orderA) return;\r\n for (let i = 0; i < orderA; i++) {\r\n resultB[i] += dataA[i];\r\n }\r\n }\r\n\r\n}\r\n/**\r\n * * The UnivariateBezier class is a univariate bezier polynomial with no particular order.\r\n * * More specific classes -- Order2Bezier, Order3Bezier, Order4Bezier -- can be used when a fixed order is known and the more specialized implementations are appropriate.\r\n * * When working with xy and xyz curves whose order is the common 2,3,4, various queries (e.g. project point to curve)\r\n * generate higher order one-dimensional bezier polynomials with order that is a small multiple of the\r\n * curve order. Hence those polynomials commonly reach degree 8 to 12.\r\n * * Higher order bezier polynomials are possible, but performance and accuracy issues become significant.\r\n * * Some machine-level constraints apply for curves of extremely high order, e.g. 70. For instance, at that level use of\r\n * Pascal triangle coefficients becomes inaccurate because IEEE doubles cannot represent integers that\r\n * large.\r\n * @internal\r\n */\r\nexport class UnivariateBezier extends BezierCoffs {\r\n private _order: number;\r\n /** Query the order of this bezier. */\r\n public override get order() { return this._order; }\r\n public constructor(data: number | Float64Array | number[]) {\r\n super(data);\r\n this._order = super.order;\r\n }\r\n\r\n /** (Re) initialize with given order (and all coffs zero) */\r\n public allocateOrder(order: number) {\r\n if (this._order !== order) {\r\n super.allocateToOrder(order);\r\n this._order = order;\r\n }\r\n this.coffs.fill(0);\r\n }\r\n /** Return a copy, optionally with coffs array length reduced to actual order. */\r\n public clone(compressToMinimalAllocation: boolean = false): UnivariateBezier {\r\n if (compressToMinimalAllocation) {\r\n const result1 = new UnivariateBezier(this.order);\r\n result1.coffs = this.coffs.slice(0, this.order);\r\n return result1;\r\n }\r\n const result = new UnivariateBezier(this.coffs.length);\r\n result._order = this._order;\r\n result.coffs = this.coffs.slice();\r\n return result;\r\n }\r\n /** Create a new bezier which is a copy of other.\r\n * * Note that `other` may be a more specialized class such as `Order2Bezier`, but the result is general `Bezier`\r\n * @param other coefficients to copy.\r\n */\r\n public static create(other: BezierCoffs): UnivariateBezier {\r\n const result = new UnivariateBezier(other.order);\r\n result.coffs = other.coffs.slice();\r\n return result;\r\n }\r\n /**\r\n * copy coefficients into a new bezier.\r\n * @param coffs coefficients for bezier\r\n */\r\n public static createCoffs(data: number | number[] | Float64Array): UnivariateBezier {\r\n return new UnivariateBezier(data);\r\n }\r\n /**\r\n * copy coefficients into a new bezier.\r\n * * if result is omitted, a new UnivariateBezier is allocated and returned.\r\n * * if result is present but has other order, its coefficients are reallocated\r\n * * if result is present and has matching order, the values are replace.\r\n * @param coffs coefficients for bezier\r\n * @param index0 first index to access\r\n * @param order number of coefficients, i.e. order for the result\r\n * @param result optional result.\r\n *\r\n */\r\n public static createArraySubset(coffs: number[] | Float64Array, index0: number, order: number, result?: UnivariateBezier): UnivariateBezier {\r\n if (!result)\r\n result = new UnivariateBezier(order);\r\n else if (result.order !== order)\r\n result.allocateToOrder(order);\r\n for (let i = 0; i < order; i++)\r\n result.coffs[i] = coffs[index0 + i];\r\n return result;\r\n }\r\n\r\n /**\r\n * Create a product of 2 bezier polynomials.\r\n * @param bezierA\r\n * @param bezierB\r\n */\r\n public static createProduct(bezierA: BezierCoffs, bezierB: BezierCoffs): UnivariateBezier {\r\n const result = new UnivariateBezier(bezierA.order + bezierB.order - 1);\r\n const pascalA = PascalCoefficients.getRow(bezierA.order - 1);\r\n const pascalB = PascalCoefficients.getRow(bezierB.order - 1);\r\n const pascalC = PascalCoefficients.getRow(bezierA.order + bezierB.order - 2);\r\n for (let iA = 0; iA < bezierA.order; iA++) {\r\n const a = bezierA.coffs[iA] * pascalA[iA];\r\n for (let iB = 0; iB < bezierB.order; iB++) {\r\n const b = bezierB.coffs[iB] * pascalB[iB];\r\n const iC = iA + iB;\r\n const c = pascalC[iC];\r\n result.coffs[iC] += a * b / c;\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Add a squared bezier polynomial (given as simple coffs)\r\n * @param coffA coefficients of bezier to square\r\n * @param scale scale factor\r\n * @return false if order mismatch -- must have `2 * bezierA.length === this.order + 1`\r\n */\r\n public addSquaredSquaredBezier(coffA: Float64Array, scale: number): boolean {\r\n const orderA = coffA.length;\r\n const orderC = this.order;\r\n if (orderA * 2 !== orderC + 1) return false;\r\n const pascalA = PascalCoefficients.getRow(orderA - 1);\r\n const pascalC = PascalCoefficients.getRow(orderC - 1);\r\n const coffC = this.coffs;\r\n for (let iA = 0; iA < orderA; iA++) {\r\n const a = coffA[iA] * pascalA[iA] * scale;\r\n for (let iB = 0; iB < orderA; iB++) {\r\n const b = coffA[iB] * pascalA[iB];\r\n const iC = iA + iB;\r\n const c = pascalC[iC];\r\n coffC[iC] += a * b / c;\r\n }\r\n }\r\n return true;\r\n }\r\n /** Add a constant to each coefficient */\r\n public addConstant(a: number) {\r\n for (let i = 0; i < this.coffs.length; i++) {\r\n this.coffs[i] += a;\r\n }\r\n }\r\n private _basisValues?: Float64Array;\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\r\n * @returns array of `order` basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n if (!result || result.length < this.order)\r\n result = new Float64Array(this.order);\r\n let i = 0;\r\n for (const a of this._basisValues)\r\n result[i++] = a;\r\n return result;\r\n }\r\n /**\r\n * Sum weights[i] * data[...] in blocks of numPerBlock.\r\n * This is for low level use -- counts are not checked.\r\n * @param weights input array of length `numWeights`\r\n * @param numWeights number of weights\r\n * @param data input array of length `numWeights * numPerBlock`\r\n * @param numPerBlock control point dimension\r\n * @param result output array of length `numPerBlock`\r\n */\r\n private static sumWeightedBlocks(weights: Float64Array, numWeights: number, data: Float64Array, numPerBlock: number, result: Float64Array) {\r\n for (let k0 = 0; k0 < numPerBlock; k0++) {\r\n result[k0] = 0;\r\n }\r\n let k = 0;\r\n let i;\r\n for (let iWeight = 0; iWeight < numWeights; iWeight++) {\r\n const w = weights[iWeight];\r\n for (i = 0; i < numPerBlock; i++) {\r\n result[i] += w * data[k++];\r\n }\r\n }\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter\r\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\r\n * @param blockSize dimension of control points\r\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `blockSize` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < blockSize)\r\n result = new Float64Array(blockSize);\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter\r\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\r\n * @param blockSize dimension of control points\r\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `blockSize` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < blockSize)\r\n result = new Float64Array(blockSize);\r\n this._basisValues = PascalCoefficients.getBezierBasisDerivatives(this.order, u, this._basisValues);\r\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\r\n return result;\r\n }\r\n\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n let sum = 0;\r\n for (let i = 0; i < this.order; i++)\r\n sum += this._basisValues[i] * this.coffs[i];\r\n return sum;\r\n }\r\n /**\r\n * Apply deflation from the left to a bezier.\r\n * * This assumes that the left coefficient is zero.\r\n */\r\n public deflateLeft() {\r\n // coefficient 0 is zero (caller promises.)\r\n // get bezier coffs for both orders ...\r\n const order1 = this.order;\r\n const order0 = order1 - 1;\r\n const coff0 = PascalCoefficients.getRow(order0 - 1);\r\n const coff1 = PascalCoefficients.getRow(order1 - 1);\r\n let a;\r\n for (let i = 0; i < order0; i++) {\r\n a = this.coffs[i + 1];\r\n this.coffs[i] = a * coff1[i + 1] / coff0[i];\r\n }\r\n this._order--;\r\n }\r\n\r\n /**\r\n * Apply deflation from the right to a frame.\r\n * * This assumes that the right coefficient is zero.\r\n * @param frame frame description\r\n */\r\n public deflateRight() {\r\n // final coefficient is zero (caller promises.)\r\n // get bezier coffs for both orders ...\r\n const order1 = this.order;\r\n const order0 = order1 - 1;\r\n const coff0 = PascalCoefficients.getRow(order0 - 1);\r\n const coff1 = PascalCoefficients.getRow(order1 - 1);\r\n let a, b;\r\n for (let i = 0; i < order0; i++) {\r\n a = this.coffs[i];\r\n b = a * coff1[i] / coff0[i];\r\n this.coffs[i] = b;\r\n }\r\n this._order--;\r\n }\r\n /**\r\n * * divide the polynomial by `(x-root)`.\r\n * * return the remainder\r\n * * If `root` truly is a root, the return is zero.\r\n * @param root root to remove\r\n */\r\n public deflateRoot(root: number): number {\r\n const orderA = this.order;\r\n const orderC = orderA - 1; // the order of the deflated bezier.\r\n if (orderA === 1) {\r\n this._order = 0;\r\n return this.coffs[0];\r\n }\r\n if (orderA < 1) {\r\n this._order = 0;\r\n return 0.0;\r\n }\r\n const pascalA = PascalCoefficients.getRow(orderA - 1);\r\n const pascalC = PascalCoefficients.getRow(orderC - 1);\r\n const b0 = -root;\r\n const b1 = 1.0 - root;\r\n let remainder = 0;\r\n if (root > 0.5) {\r\n let c0 = this.coffs[0] / b0;\r\n let c1;\r\n this.coffs[0] = c0;\r\n let a1;\r\n for (let i = 1; i < orderC; i++) {\r\n a1 = this.coffs[i] * pascalA[i];\r\n c1 = (a1 - c0 * b1) / b0;\r\n this.coffs[i] = c1 / pascalC[i];\r\n c0 = c1;\r\n }\r\n remainder = this.coffs[orderA - 1] - c0 * b1;\r\n } else {\r\n // work backwards (to get division by larger of b0, b1)\r\n // replace coefficients of a starting with orderA -1 --\r\n // at end move them all forward.\r\n let c1 = this.coffs[orderA - 1] / b1;\r\n let c0;\r\n this.coffs[orderA - 1] = c1;\r\n let a1;\r\n for (let i = orderA - 2; i > 0; i--) {\r\n a1 = this.coffs[i] * pascalA[i];\r\n c0 = (a1 - c1 * b0) / b1;\r\n this.coffs[i] = c0 / pascalC[i - 1]; // pascalC index is from destination, which is not shifted.\r\n c1 = c0;\r\n }\r\n remainder = (this.coffs[0] - c1 * b0);\r\n for (let i = 0; i < orderC; i++)\r\n this.coffs[i] = this.coffs[i + 1];\r\n }\r\n this._order = orderC;\r\n // This should be zero !!!! (If not, `root` was not really a root!!)\r\n return remainder;\r\n }\r\n private static _basisBuffer?: Float64Array;\r\n private static _basisBuffer1?: Float64Array;\r\n /**\r\n * Run a Newton iteration from startFraction.\r\n * @param startFraction [in] fraction for first iteration\r\n * @param tolerance [in] convergence tolerance. The iteration is considered converged on the\r\n * second time the tolerance is satisfied. For a typical iteration (not double root), the extra pass\r\n * will double the number of digits. Hence this tolerance is normally set to 10 to 12 digits, trusting\r\n * that the final iteration will clean it up to nearly machine precision.\r\n * @returns final fraction of iteration if converged. undefined if iteration failed to converge.\r\n */\r\n public runNewton(startFraction: number, tolerance: number = 1.0e-11): number | undefined {\r\n const derivativeFactor = this.order - 1;\r\n let numConverged = 0;\r\n let u = startFraction;\r\n let f, df;\r\n const bigStep = 10.0;\r\n const order = this.order;\r\n const coffs = this.coffs;\r\n const orderD = order - 1;\r\n for (let iterations = 0; iterations++ < 10;) {\r\n UnivariateBezier._basisBuffer = PascalCoefficients.getBezierBasisValues(order, u, UnivariateBezier._basisBuffer);\r\n f = 0;\r\n for (let i = 0; i < order; i++)\r\n f += coffs[i] * UnivariateBezier._basisBuffer[i];\r\n UnivariateBezier._basisBuffer1 = PascalCoefficients.getBezierBasisValues(orderD, u, UnivariateBezier._basisBuffer1);\r\n df = 0;\r\n for (let i = 0; i < orderD; i++)\r\n df += (coffs[i + 1] - coffs[i]) * UnivariateBezier._basisBuffer1[i];\r\n df *= derivativeFactor;\r\n if (Math.abs(f) > bigStep * Math.abs(df))\r\n return undefined;\r\n const du = f / df;\r\n if (Math.abs(du) < tolerance) {\r\n numConverged++;\r\n if (numConverged >= 2)\r\n return u - du;\r\n } else {\r\n numConverged = 0;\r\n }\r\n u -= du;\r\n }\r\n return undefined;\r\n }\r\n\r\n // Deflation table. b0, b1 are coefficients of term being divided out\r\n // Pascal coffs for b0,b1 are just 1.\r\n // Each ai is a coefficient of the (known) input, with its Pascal coefficient blended in.\r\n // each ci is a coefficient of the (unknown) result, with its coefficient blended in.\r\n // note b0, b1 are both nonzero, so the divisions are safe.\r\n // within the products, each c[i]*b0 pairs with c[i-1]*b1 (above and right diagonally) to make a[i]\r\n // first and last c0*b0 and c[orderC-1]*b1 make a0 and a[orderA-1]\r\n // | | b0 | b1 | equivalence | solve moving down\r\n // | c0 | c0* b0 | c0 * b1 | a0 = c0 * b0 | c0 = a0 / b0\r\n // | c1 | c1* b0 | c1 * b1 | a1 = c1 * b0 + c0 * b1 | c1 = (a1 - c0 * b1) / b0\r\n // | c2 | c2* b0 | c2 * b1\r\n // Each internal ci = (ai - c[i-1] * b1) /b0\r\n // first c0*b0 = a0\r\n // last c[orderC-1]*b1 = a[orderA-1]\r\n /** Find roots of a bezier polynomial\r\n * * As roots are found, deflate the polynomial.\r\n * * bezier coffs are changed (and order reduced) at each step.\r\n */\r\n public static deflateRoots(bezier: UnivariateBezier): number[] | undefined {\r\n const roots = [];\r\n const coffs = bezier.coffs;\r\n let a0, a1, segmentFraction, globalStartFraction, newtonFraction;\r\n while (bezier.order > 1) {\r\n const order = bezier.order;\r\n // Find any crossing\r\n if (coffs[0] === 0.0) {\r\n bezier.deflateLeft();\r\n roots.push(0.0);\r\n continue;\r\n }\r\n let numCrossing = 0;\r\n let numNewtonOK = 0;\r\n for (let i = 1; i < order; i++) {\r\n a0 = coffs[i - 1];\r\n a1 = coffs[i];\r\n if (a0 * a1 <= 0.0) {\r\n numCrossing++;\r\n segmentFraction = -a0 / (a1 - a0);\r\n globalStartFraction = (i - 1 + segmentFraction) / (order - 1);\r\n newtonFraction = bezier.runNewton(globalStartFraction, 1.0e-10);\r\n if (newtonFraction !== undefined) {\r\n roots.push(newtonFraction);\r\n bezier.deflateRoot(newtonFraction);\r\n numNewtonOK++;\r\n break;\r\n }\r\n }\r\n }\r\n if (numNewtonOK)\r\n continue;\r\n // if any crossing was found and led to a good newton, the \"continue\" jumped past this.\r\n // if no crossings found, there are no roots to be had -- accept\r\n if (numCrossing === 0)\r\n return roots;\r\n // reach here if there were crossings but not roots.\r\n // is this just a local min? or maybe a big problem? Whatever, accept it\r\n return roots;\r\n }\r\n return roots;\r\n }\r\n}\r\n/** Bezier polynomial specialized to order 2 (2 coefficients, straight line function)\\\r\n * @internal\r\n */\r\nexport class Order2Bezier extends BezierCoffs {\r\n constructor(f0: number = 0.0, f1: number = 0.0) {\r\n super(2);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n }\r\n /** return an Order2Bezier (linear) with the two coefficients from this Order2Bezier */\r\n public clone(): Order2Bezier {\r\n return new Order2Bezier(this.coffs[0], this.coffs[1]);\r\n }\r\n\r\n /** normally, return fractional coordinate where bezier (a0,a1) has a root.\r\n * but if the fraction would exceed Geometry.largeFractionResult, return undefined.\r\n */\r\n public static solveCoffs(a0: number, a1: number): number | undefined {\r\n return Geometry.conditionalDivideFraction(-a0, (a1 - a0));\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 2. If insufficient length, a new array is returned.\r\n * @returns array of 2 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 2)\r\n result = new Float64Array(2);\r\n result[0] = 1.0 - u;\r\n result[1] = u;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1.0 - u;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = v * polygon[i] + u * polygon[i + n];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param _u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(_u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n for (let i = 0; i < n; i++) {\r\n result[i] = polygon[i + n] - polygon[i];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n return (1.0 - u) * this.coffs[0] + u * this.coffs[1];\r\n }\r\n /** Same as `roots` method but returns single numeric value instead of array. */\r\n public solve(rightHandSide: number): number | undefined {\r\n const df = this.coffs[1] - this.coffs[0];\r\n return Geometry.conditionalDivideFraction(rightHandSide - this.coffs[0], df);\r\n }\r\n /**\r\n * Concrete implementation of the abstract roots method\r\n * @param targetValue target function value.\r\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\r\n * @returns If no roots, return undefined. If single root, return an array with the root.\r\n */\r\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\r\n const x = this.solve(targetValue);\r\n if (x === undefined)\r\n return undefined;\r\n if (!restrictTo01 || Geometry.isIn01(x))\r\n return [x];\r\n return undefined;\r\n }\r\n}\r\n\r\n/** Bezier polynomial specialized to order 3 (3 coefficients, parabola function)\r\n * @internal\r\n */\r\nexport class Order3Bezier extends BezierCoffs {\r\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0) {\r\n super(3);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n }\r\n /** Return a deep copy. */\r\n public clone(): Order3Bezier {\r\n return new Order3Bezier(this.coffs[0], this.coffs[1], this.coffs[2]);\r\n }\r\n\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 3. If insufficient length, a new array is returned.\r\n * @returns array of 3 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 3)\r\n result = new Float64Array(3);\r\n const v = 1.0 - u;\r\n result[0] = v * v;\r\n result[1] = 2.0 * u * v;\r\n result[2] = u * u;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n const b0 = v * v;\r\n const b1 = 2 * u * v;\r\n const b2 = u * u;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const f0 = 2 * (1 - u);\r\n const f1 = 2 * u;\r\n const n2 = 2 * n;\r\n for (let i = 0; i < n; i++) {\r\n const q = polygon[i + n];\r\n result[i] = f0 * (q - polygon[i]) + f1 * (polygon[i + n2] - q);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Add the square of a linear bezier.\r\n * @param f0 linear factor value at u=0.\r\n * @param f1 linear factor value at u=1.\r\n * @param a scale factor.\r\n */\r\n public addSquareLinear(f0: number, f1: number, a: number) {\r\n this.coffs[0] += a * f0 * f0;\r\n this.coffs[1] += a * f0 * f1;\r\n this.coffs[2] += a * f1 * f1;\r\n }\r\n /**\r\n * Concrete implementation of the abstract roots method\r\n * @param targetValue target function value.\r\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\r\n * @returns If no roots, return undefined. If roots exist, return as numeric array.\r\n */\r\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\r\n const a0 = this.coffs[0] - targetValue;\r\n const a1 = this.coffs[1] - targetValue;\r\n const a2 = this.coffs[2] - targetValue;\r\n const a01 = a1 - a0;\r\n const a12 = a2 - a1;\r\n const a012 = a12 - a01;\r\n const roots = Degree2PowerPolynomial.solveQuadratic(a012, 2.0 * a01, a0);\r\n return super.filter01(roots, restrictTo01);\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v = 1.0 - u;\r\n return this.coffs[0] * v * v + u * (2.0 * this.coffs[1] * v + this.coffs[2] * u);\r\n }\r\n}\r\n\r\n/** Bezier polynomial specialized to order 4 (4 coefficients, cubic function)\r\n * @internal\r\n */\r\nexport class Order4Bezier extends BezierCoffs {\r\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0) {\r\n super(4);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n this.coffs[3] = f3;\r\n }\r\n /** return a deep copy */\r\n public clone(): Order4Bezier {\r\n return new Order4Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3]);\r\n }\r\n /** Create a product of a quadratic and a cubic. */\r\n public static createProductOrder3Order2(factorA: Order3Bezier, factorB: Order2Bezier): Order4Bezier {\r\n return new Order4Bezier(\r\n factorA.coffs[0] * factorB.coffs[0],\r\n (factorA.coffs[0] * factorB.coffs[1] + 2.0 * factorA.coffs[1] * factorB.coffs[0]) / 3.0,\r\n (2.0 * factorA.coffs[1] * factorB.coffs[1] + factorA.coffs[2] * factorB.coffs[0]) / 3.0,\r\n factorA.coffs[2] * factorB.coffs[1]);\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 4. If insufficient length, a new array is returned.\r\n * @returns array of 4 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 4)\r\n result = new Float64Array(4);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const vv = v * v;\r\n result[0] = vv * v;\r\n result[1] = 3.0 * vv * u;\r\n result[2] = 3.0 * v * uu;\r\n result[3] = u * uu;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n const uu = u * u;\r\n const vv = v * v;\r\n const b0 = v * vv;\r\n const b1 = 3 * u * vv;\r\n const b2 = 3 * uu * v;\r\n const b3 = u * uu;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n // QUADRATIC basis functions applied to differences ... (with factor 3 for derivative)\r\n const f0 = 3 * (v * v);\r\n const f1 = 6 * u * v;\r\n const f2 = 3 * u * u;\r\n for (let i = 0; i < n; i++) {\r\n const q0 = polygon[i];\r\n const q1 = polygon[i + n];\r\n const q2 = polygon[i + 2 * n];\r\n const q3 = polygon[i + 3 * n];\r\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v1 = 1.0 - u;\r\n const v2 = v1 * v1;\r\n const v3 = v2 * v1;\r\n return this.coffs[0] * v3\r\n + u * (3.0 * this.coffs[1] * v2\r\n + u * (3.0 * this.coffs[2] * v1\r\n + u * this.coffs[3]));\r\n }\r\n /**\r\n * convert a power polynomial to bezier\r\n */\r\n public static createFromDegree3PowerPolynomial(source: Degree3PowerPolynomial): Order4Bezier {\r\n const f0 = source.evaluate(0.0);\r\n const d0 = source.evaluateDerivative(0.0);\r\n const d1 = source.evaluateDerivative(1.0);\r\n const f1 = source.evaluate(1.0);\r\n const a = 3.0;\r\n\r\n return new Order4Bezier(f0, f0 + d0 / a, f1 - d1 / a, f1);\r\n }\r\n /** Find real roots, return in caller-allocated array. */\r\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array) {\r\n // Get direct solutions in standard basis\r\n roots.clear();\r\n const cc = new Float64Array(4);\r\n const y0 = this.coffs[0];\r\n const y1 = this.coffs[1];\r\n const y2 = this.coffs[2];\r\n const y3 = this.coffs[3];\r\n const yMax = Math.max(y0, y1, y2, y3);\r\n const yMin = Math.min(y0, y1, y2, y3);\r\n const smallValue = Geometry.smallMetricDistance;\r\n if (yMin > smallValue)\r\n return undefined;\r\n if (yMax < -smallValue)\r\n return undefined;\r\n\r\n if (yMin >= -smallValue && yMax < smallValue) {\r\n // all 4 are near zero . ..\r\n roots.push(0);\r\n roots.push(1.0 / 3.0);\r\n roots.push(2.0 / 3.0);\r\n roots.push(1.0);\r\n return; // p(x) == 0 has infinite roots .... return 4, which is a red flag for cubic\r\n }\r\n cc[0] = (y0 - e);\r\n cc[1] = 3.0 * (y1 - y0);\r\n cc[2] = 3.0 * (y0 - 2.0 * y1 + y2);\r\n cc[3] = - y0 + 3.0 * y1 - 3.0 * y2 + y3;\r\n AnalyticRoots.appendCubicRoots(cc, roots); // can't have zero solutions after passing min/max conditions . . .\r\n if (restrictTo01)\r\n roots.reassign(0, 1);\r\n return;\r\n }\r\n\r\n}\r\n/** Bezier polynomial specialized to order 5 (5 coefficients, quartic function)\r\n * @internal\r\n */\r\nexport class Order5Bezier extends BezierCoffs {\r\n constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0, f4: number = 0) {\r\n super(5);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n this.coffs[3] = f3;\r\n this.coffs[4] = f4;\r\n }\r\n /** Return a deep copy */\r\n public clone(): Order5Bezier {\r\n return new Order5Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3], this.coffs[4]);\r\n }\r\n /**\r\n * convert a power polynomial to bezier\r\n */\r\n public static createFromDegree4PowerPolynomial(source: Degree4PowerPolynomial): Order5Bezier {\r\n const f0 = source.evaluate(0.0);\r\n const d0 = source.evaluateDerivative(0.0);\r\n const d4 = source.evaluateDerivative(1.0);\r\n const f4 = source.evaluate(1.0);\r\n const a = 0.25;\r\n const d0a = a * d0;\r\n const fa = f0 + d0a;\r\n const fm = 2.0 * fa - f0 + source.coffs[2] / 6.0;\r\n return new Order5Bezier(f0, fa, fm, f4 - d4 * a, f4);\r\n }\r\n\r\n /** evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 5. If insufficient length, a new array is returned.\r\n * @returns array of 5 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 5)\r\n result = new Float64Array(5);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const uuu = uu * u;\r\n const vv = v * v;\r\n const vvv = vv * v;\r\n result[0] = vv * vv;\r\n result[1] = 4.0 * vvv * u;\r\n result[2] = 6.0 * vv * uu;\r\n result[3] = 4.0 * v * uuu;\r\n result[4] = uu * uu;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const uuu = uu * u;\r\n const vv = v * v;\r\n const vvv = vv * v;\r\n const b0 = vv * vv;\r\n const b1 = 4.0 * vvv * u;\r\n const b2 = 6.0 * vv * uu;\r\n const b3 = 4.0 * v * uuu;\r\n const b4 = uu * uu;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n] + b4 * polygon[i + 4 * n];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n // CUBIC basis functions applied to differences ...\r\n const uu = u * u;\r\n const vv = v * v;\r\n const f0 = 4 * v * vv;\r\n const f1 = 12 * u * vv;\r\n const f2 = 12 * uu * v;\r\n const f3 = 4 * u * uu;\r\n for (let i = 0; i < n; i++) {\r\n const q0 = polygon[i];\r\n const q1 = polygon[i + n];\r\n const q2 = polygon[i + 2 * n];\r\n const q3 = polygon[i + 3 * n];\r\n const q4 = polygon[i + 4 * n];\r\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2) + f3 * (q4 - q3);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v1 = 1.0 - u;\r\n const v2 = v1 * v1;\r\n const v3 = v2 * v1;\r\n const v4 = v2 * v2;\r\n return this.coffs[0] * v4\r\n + u * (4.0 * this.coffs[1] * v3\r\n + u * (6.0 * this.coffs[2] * v2\r\n + u * (4.0 * this.coffs[3] * v1\r\n + u * this.coffs[4])));\r\n }\r\n /** Add the product of a pair of Order3Bezier to this one. */\r\n public addProductOrder3BezierOrder3Bezier(f: Order3Bezier, g: Order3Bezier, a: number) {\r\n this.coffs[0] += a * f.coffs[0] * g.coffs[0];\r\n this.coffs[1] += a * (f.coffs[0] * g.coffs[1] + f.coffs[1] * g.coffs[0]) * 0.5;\r\n this.coffs[2] += a * (f.coffs[0] * g.coffs[2] + 4.0 * f.coffs[1] * g.coffs[1] + f.coffs[2] * g.coffs[0]) / 6.0;\r\n this.coffs[3] += a * (f.coffs[1] * g.coffs[2] + f.coffs[2] * g.coffs[1]) * 0.5;\r\n this.coffs[4] += a * f.coffs[2] * g.coffs[2];\r\n }\r\n /** Add a constant to all coefficients (thereby adding the constant to the evaluated bezier) */\r\n public addConstant(a: number): void {\r\n for (let i = 0; i < 5; i++) this.coffs[i] += a;\r\n }\r\n /** Find real roots, return in caller-allocated array. */\r\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): void {\r\n roots.clear();\r\n const y0 = this.coffs[0] - e;\r\n const y1 = this.coffs[1] - e;\r\n const y2 = this.coffs[2] - e;\r\n const y3 = this.coffs[3] - e;\r\n const y4 = this.coffs[4] - e;\r\n // Get direct solutions in standard basis\r\n const yMax = Math.max(y0, y1, y2, y3, y4);\r\n const yMin = Math.min(y0, y1, y2, y3, y4);\r\n const smallValue = Geometry.smallMetricDistance;\r\n if (yMin > smallValue)\r\n return undefined;\r\n if (yMax < -smallValue)\r\n return undefined;\r\n\r\n if (yMin >= -smallValue && yMax < smallValue) {\r\n // all 4 are near zero . ..\r\n roots.push(0);\r\n roots.push(0.25);\r\n roots.push(0.5);\r\n roots.push(0.75);\r\n roots.push(1.0);\r\n return; // p(x) == 0 has infinite roots .... return 5, which is a red flag for cubic ...\r\n }\r\n\r\n const cc = new Float64Array(5);\r\n\r\n cc[0] = (y0 - e);\r\n cc[1] = 4.0 * (-y0 + y1);\r\n cc[2] = 6.0 * (y0 - 2.0 * y1 + y2);\r\n cc[3] = 4.0 * (-y0 + 3.0 * y1 - 3.0 * y2 + y3);\r\n cc[4] = (y0 - 4.0 * y1 + 6.0 * y2 - 4.0 * y3 + y4);\r\n\r\n AnalyticRoots.appendQuarticRoots(cc, roots);\r\n if (restrictTo01)\r\n roots.reassign(0, 1);\r\n return;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BezierPolynomials.js","sourceRoot":"","sources":["../../../src/numerics/BezierPolynomials.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 Numerics\r\n */\r\n\r\n// import { Angle, AngleSweep, Geometry } from \"../Geometry\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { PascalCoefficients } from \"./PascalCoefficients\";\r\nimport { AnalyticRoots, Degree2PowerPolynomial, Degree3PowerPolynomial, Degree4PowerPolynomial } from \"./Polynomials\";\r\n\r\n/**\r\n * * BezierCoffs is an abstract base class for one-dimensional (u to f(u)) Bezier polynomials.\r\n * * The base class carries a Float64Array with coefficients.\r\n * * The Float64Array is NOT Growable unless derived classes add logic to do so. Its length is the Bezier polynomial order.\r\n * * The family of derived classes is starts with low order (at least linear through cubic) with highly optimized calculations.\r\n * * The general degree Bezier class also uses this as its base class.\r\n * * The length of the coefficient array is NOT always the bezier order. Use the `order` property to access the order.\r\n * @internal\r\n */\r\nexport abstract class BezierCoffs {\r\n /** Array of coefficients.\r\n * * The number of coefficients is the order of the Bezier polynomial.\r\n */\r\n public coffs: Float64Array;\r\n /**\r\n * * If `data` is a number, an array of that size is created with zeros.\r\n * * If `data` is a Float64Array, it is cloned (NOT CAPTURED)\r\n * * If `data` is a number array, its values are copied.\r\n */\r\n constructor(data: number | Float64Array | number[]) {\r\n if (data instanceof Float64Array) {\r\n this.coffs = data.slice();\r\n } else if (Array.isArray(data)) {\r\n this.coffs = new Float64Array(data.length);\r\n let i = 0;\r\n for (const a of data) this.coffs[i++] = a;\r\n } else {\r\n this.coffs = new Float64Array(data);\r\n }\r\n }\r\n /**\r\n * * Ensure the coefficient array size matches order. (Reallocate as needed)\r\n * * fill with zeros.\r\n * @param order required order\r\n */\r\n protected allocateToOrder(order: number) {\r\n if (this.coffs.length !== order) {\r\n this.coffs = new Float64Array(order);\r\n } else {\r\n this.coffs.fill(0);\r\n }\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\r\n * @returns array of `order` basis function values.\r\n */\r\n public abstract basisFunctions(u: number, result?: Float64Array): Float64Array;\r\n\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public abstract sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public abstract sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\r\n\r\n /** Return a deep clone of this bezier. */\r\n public abstract clone(): BezierCoffs;\r\n /**\r\n * create an object of same order with zero coefficients.\r\n * The base implementation makes a generic Bezier of the same order.\r\n */\r\n public createPeer(): BezierCoffs {\r\n const peer = new UnivariateBezier(this.order);\r\n return peer;\r\n }\r\n /** Evaluate the polynomial at u.\r\n * @param u bezier parameter for evaluation.\r\n */\r\n public abstract evaluate(u: number): number;\r\n /** The order (number of coefficients) as a readable property */\r\n public get order(): number { return this.coffs.length; }\r\n /** Copy coefficients from other Bezier. Note that the coefficient count (order) of \"this\" can change. */\r\n public copyFrom(other: BezierCoffs): void {\r\n if (this.order === other.order)\r\n for (let i = 0; i < this.coffs.length; i++) { this.coffs[i] = other.coffs[i]; }\r\n else this.coffs = other.coffs.slice();\r\n }\r\n /**\r\n * Apply a scale factor to all coefficients.\r\n * @param scale scale factor to apply to all coefficients.\r\n */\r\n public scaleInPlace(scale: number): void {\r\n for (let i = 0; i < this.coffs.length; i++)\r\n this.coffs[i] *= scale;\r\n }\r\n /** add a constant to each coefficient.\r\n * @param a constant to add.\r\n */\r\n public addInPlace(a: number): void {\r\n for (let i = 0; i < this.coffs.length; i++)\r\n this.coffs[i] += a;\r\n }\r\n /** Compute parameter values where the bezier value matches targetValue.\r\n * * The base class finds roots only in 01. (i.e. ignores _restrictTo01)\r\n * * Order-specific implementations apply special case analytic logic, e.g. for degree 1,2,3,4.\r\n */\r\n public roots(targetValue: number, _restrictTo01: boolean): number[] | undefined {\r\n const bezier = UnivariateBezier.create(this);\r\n bezier.addInPlace(- targetValue);\r\n const roots = UnivariateBezier.deflateRoots(bezier);\r\n return this.filter01(roots, true);\r\n }\r\n /** Given an array of numbers, optionally remove those not in the 0..1 interval.\r\n * @param roots candidate values\r\n * @param restrictTo01 If false, no filtering occurs and the pointer to the original array is unchanged.\r\n * If true, filtering is done and values are returned, possibly in a new array and possibly in the original.\r\n */\r\n public filter01(roots: number[] | undefined, restrictTo01 = false): number[] | undefined {\r\n if (!roots || !restrictTo01)\r\n return roots;\r\n let anyFound = false;\r\n for (const r of roots) {\r\n if (Geometry.isIn01(r)) {\r\n anyFound = true;\r\n break;\r\n }\r\n }\r\n if (anyFound) {\r\n const roots01: number[] = [];\r\n for (const r of roots) {\r\n if (Geometry.isIn01(r))\r\n roots01.push(r);\r\n }\r\n return roots01;\r\n }\r\n return undefined;\r\n }\r\n /** zero out all coefficients. */\r\n public zero(): void {\r\n this.coffs.fill(0);\r\n }\r\n /** Subdivide -- write results into caller-supplied bezier coffs (which must be of the same order) */\r\n public subdivide(u: number, left: BezierCoffs, right: BezierCoffs): boolean {\r\n const order = this.order;\r\n if (left.order !== order || right.order !== order)\r\n return false;\r\n const v = 1.0 - u;\r\n right.copyFrom(this);\r\n // each left will be filled in directly, so there is no need to initialize it.\r\n let n1 = order - 1; // number of interpolations in inner loop.\r\n for (let i0 = 0; i0 < order; i0++) {\r\n left.coffs[i0] = right.coffs[0];\r\n for (let i = 0; i < n1; i++)\r\n right.coffs[i] = v * right.coffs[i] + u * right.coffs[i + 1];\r\n n1--;\r\n }\r\n return true;\r\n }\r\n /** Return the maximum absolute difference between coefficients of two sets of BezierCoffs */\r\n public static maxAbsDiff(dataA: BezierCoffs, dataB: BezierCoffs): number | undefined {\r\n const order = dataA.order;\r\n if (dataB.order !== order)\r\n return undefined;\r\n let d = 0.0;\r\n let d1;\r\n for (let i = 0; i < order; i++) {\r\n d1 = Math.abs(dataA.coffs[i] - dataB.coffs[i]);\r\n if (d1 > d)\r\n d = d1;\r\n }\r\n return d;\r\n }\r\n}\r\n/**\r\n * Static methods to operate on univariate bezier polynomials, with coefficients in simple Float64Array or as components of blocked arrays.\r\n * @internal\r\n */\r\nexport class BezierPolynomialAlgebra {\r\n /**\r\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\r\n * * Symbolically: `product(s) += scale * (constA - polynomialA(s)) *polynomialB(s)`\r\n * * Where coefficients of polynomialA(s) are in column indexA and coefficients of polynomialB(s) are differences within column indexB.\r\n * * Treating data as 2-dimensional array: `product = sum (iA) sum (iB) (constA - basisFunction[iA} data[indexA][iA]) * basisFunction[iB] * (dataOrder-1)(data[iB + 1][indexB] - data[iB][indexB])`\r\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\r\n */\r\n public static accumulateScaledShiftedComponentTimesComponentDelta(\r\n product: Float64Array,\r\n data: Float64Array,\r\n dataBlockSize: number,\r\n dataOrder: number,\r\n scale: number,\r\n indexA: number,\r\n constA: number,\r\n indexB: number) {\r\n const orderB = dataOrder - 1; // coefficients of the first difference are implicitly present as differences of adjacent entries.\r\n const orderA = dataOrder;\r\n const orderC = dataOrder + orderB - 1;\r\n if (product.length !== orderC) return;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n let qA;\r\n for (let a = 0; a < orderA; a++) {\r\n qA = scale * (constA + data[indexA + a * dataBlockSize]) * coffA[a];\r\n for (let b = 0, k = indexB; b < orderB; b++, k += dataBlockSize) {\r\n product[a + b] += qA * coffB[b] * (data[k + dataBlockSize] - data[k]) / coffC[a + b];\r\n }\r\n }\r\n }\r\n /**\r\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\r\n * * Univariate bezierB has its coefficients at offset indexB in each block within the array of blocks.\r\n * * return the sum coefficients for `constA * polynomialA + constB * polynomialB`\r\n * * Symbolically: `product(s) = (constA * polynomialA(s) + constB * polynomialB(s)`\r\n * * The two polynomials are the same order, so this just direct sum of scaled coefficients.\r\n *\r\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\r\n */\r\n public static scaledComponentSum(sum: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, indexA: number, constA: number, indexB: number, constB: number) {\r\n const orderA = dataOrder;\r\n if (sum.length !== orderA) return;\r\n for (let a = 0, rowBase = 0; a < orderA; a++, rowBase += dataBlockSize) {\r\n sum[a] = constA * data[rowBase + indexA] + constB * data[rowBase + indexB];\r\n }\r\n }\r\n /**\r\n * * Univariate bezier has its coefficients at offset index in each block within the array of blocks.\r\n * * return the (dataOrder - 1) differences,\r\n *\r\n * * Take no action if difference length is other than `dataOrder - 1`\r\n */\r\n public static componentDifference(difference: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, index: number) {\r\n const orderA = dataOrder;\r\n const orderDiff = orderA - 1;\r\n if (difference.length !== orderDiff) return;\r\n for (let i = 0, k = index; i < orderDiff; k += dataBlockSize, i++)\r\n difference[i] = data[k + dataBlockSize] - data[k];\r\n }\r\n\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in dataB[i]\r\n * * return the product coefficients for polynomialA(s) * polynomialB(s) * scale\r\n * * Take no action if product length is other than `orderA + orderB - 1`\r\n */\r\n public static accumulateProduct(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\r\n const orderA = dataA.length;\r\n const orderB = dataB.length;\r\n const orderC = orderA + orderB - 1;\r\n if (product.length !== orderC) return;\r\n let a: number;\r\n let b: number;\r\n let qA: number;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n for (a = 0; a < orderA; a++) {\r\n qA = scale * coffA[a] * dataA[a];\r\n for (b = 0; b < orderB; b++) {\r\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in dataB[i]\r\n * * return the product coefficients for polynomialADifferences(s) * polynomialB(s) * scale\r\n * * Take no action if product length is other than `orderA + orderB - 2`\r\n */\r\n public static accumulateProductWithDifferences(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\r\n const orderA = dataA.length - 1; // We deal with its differences, which are lower order !!!\r\n const orderB = dataB.length;\r\n const orderC = orderA + orderB - 1;\r\n if (product.length !== orderC) return;\r\n let a: number;\r\n let b: number;\r\n let qA: number;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n for (a = 0; a < orderA; a++) {\r\n qA = scale * coffA[a] * (dataA[a + 1] - dataA[a]);\r\n for (b = 0; b < orderB; b++) {\r\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * * Univariate bezier has its coefficients in data[i]\r\n * * return the difference data[i+1]-data[i] in difference.\r\n * * Take no action if product length is other than `orderA + orderB - 1`\r\n */\r\n public static univariateDifference(data: Float64Array, difference: Float64Array) {\r\n const differenceOrder = difference.length;\r\n if (difference.length + 1 !== differenceOrder)\r\n for (let i = 0; i < differenceOrder; i++) {\r\n difference[i] = data[i + 1] - data[i];\r\n }\r\n }\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in resultB[i]\r\n * * add (with no scaling) bezierA to bezierB\r\n * * Take no action if resultB.length is other than dataA.length.\r\n */\r\n public static accumulate(dataA: Float64Array, orderA: number, resultB: Float64Array) {\r\n if (resultB.length !== orderA) return;\r\n for (let i = 0; i < orderA; i++) {\r\n resultB[i] += dataA[i];\r\n }\r\n }\r\n\r\n}\r\n/**\r\n * * The UnivariateBezier class is a univariate bezier polynomial with no particular order.\r\n * * More specific classes -- Order2Bezier, Order3Bezier, Order4Bezier -- can be used when a fixed order is known and the more specialized implementations are appropriate.\r\n * * When working with xy and xyz curves whose order is the common 2,3,4, various queries (e.g. project point to curve)\r\n * generate higher order one-dimensional bezier polynomials with order that is a small multiple of the\r\n * curve order. Hence those polynomials commonly reach degree 8 to 12.\r\n * * Higher order bezier polynomials are possible, but performance and accuracy issues become significant.\r\n * * Some machine-level constraints apply for curves of extremely high order, e.g. 70. For instance, at that level use of\r\n * Pascal triangle coefficients becomes inaccurate because IEEE doubles cannot represent integers that\r\n * large.\r\n * @internal\r\n */\r\nexport class UnivariateBezier extends BezierCoffs {\r\n private _order: number;\r\n /** Query the order of this bezier. */\r\n public override get order() { return this._order; }\r\n public constructor(data: number | Float64Array | number[]) {\r\n super(data);\r\n this._order = super.order;\r\n }\r\n\r\n /** (Re) initialize with given order (and all coffs zero) */\r\n public allocateOrder(order: number) {\r\n if (this._order !== order) {\r\n super.allocateToOrder(order);\r\n this._order = order;\r\n }\r\n this.coffs.fill(0);\r\n }\r\n /** Return a copy, optionally with coffs array length reduced to actual order. */\r\n public clone(compressToMinimalAllocation: boolean = false): UnivariateBezier {\r\n if (compressToMinimalAllocation) {\r\n const result1 = new UnivariateBezier(this.order);\r\n result1.coffs = this.coffs.slice(0, this.order);\r\n return result1;\r\n }\r\n const result = new UnivariateBezier(this.coffs.length);\r\n result._order = this._order;\r\n result.coffs = this.coffs.slice();\r\n return result;\r\n }\r\n /** Create a new bezier which is a copy of other.\r\n * * Note that `other` may be a more specialized class such as `Order2Bezier`, but the result is general `Bezier`\r\n * @param other coefficients to copy.\r\n */\r\n public static create(other: BezierCoffs): UnivariateBezier {\r\n const result = new UnivariateBezier(other.order);\r\n result.coffs = other.coffs.slice();\r\n return result;\r\n }\r\n /**\r\n * copy coefficients into a new bezier.\r\n * @param coffs coefficients for bezier\r\n */\r\n public static createCoffs(data: number | number[] | Float64Array): UnivariateBezier {\r\n return new UnivariateBezier(data);\r\n }\r\n /**\r\n * copy coefficients into a new bezier.\r\n * * if result is omitted, a new UnivariateBezier is allocated and returned.\r\n * * if result is present but has other order, its coefficients are reallocated\r\n * * if result is present and has matching order, the values are replace.\r\n * @param coffs coefficients for bezier\r\n * @param index0 first index to access\r\n * @param order number of coefficients, i.e. order for the result\r\n * @param result optional result.\r\n *\r\n */\r\n public static createArraySubset(coffs: number[] | Float64Array, index0: number, order: number, result?: UnivariateBezier): UnivariateBezier {\r\n if (!result)\r\n result = new UnivariateBezier(order);\r\n else if (result.order !== order)\r\n result.allocateToOrder(order);\r\n for (let i = 0; i < order; i++)\r\n result.coffs[i] = coffs[index0 + i];\r\n return result;\r\n }\r\n\r\n /**\r\n * Create a product of 2 bezier polynomials.\r\n * @param bezierA\r\n * @param bezierB\r\n */\r\n public static createProduct(bezierA: BezierCoffs, bezierB: BezierCoffs): UnivariateBezier {\r\n const result = new UnivariateBezier(bezierA.order + bezierB.order - 1);\r\n const pascalA = PascalCoefficients.getRow(bezierA.order - 1);\r\n const pascalB = PascalCoefficients.getRow(bezierB.order - 1);\r\n const pascalC = PascalCoefficients.getRow(bezierA.order + bezierB.order - 2);\r\n for (let iA = 0; iA < bezierA.order; iA++) {\r\n const a = bezierA.coffs[iA] * pascalA[iA];\r\n for (let iB = 0; iB < bezierB.order; iB++) {\r\n const b = bezierB.coffs[iB] * pascalB[iB];\r\n const iC = iA + iB;\r\n const c = pascalC[iC];\r\n result.coffs[iC] += a * b / c;\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Add a squared bezier polynomial (given as simple coffs)\r\n * @param coffA coefficients of bezier to square\r\n * @param scale scale factor\r\n * @return false if order mismatch -- must have `2 * bezierA.length === this.order + 1`\r\n */\r\n public addSquaredSquaredBezier(coffA: Float64Array, scale: number): boolean {\r\n const orderA = coffA.length;\r\n const orderC = this.order;\r\n if (orderA * 2 !== orderC + 1) return false;\r\n const pascalA = PascalCoefficients.getRow(orderA - 1);\r\n const pascalC = PascalCoefficients.getRow(orderC - 1);\r\n const coffC = this.coffs;\r\n for (let iA = 0; iA < orderA; iA++) {\r\n const a = coffA[iA] * pascalA[iA] * scale;\r\n for (let iB = 0; iB < orderA; iB++) {\r\n const b = coffA[iB] * pascalA[iB];\r\n const iC = iA + iB;\r\n const c = pascalC[iC];\r\n coffC[iC] += a * b / c;\r\n }\r\n }\r\n return true;\r\n }\r\n /** Add a constant to each coefficient */\r\n public addConstant(a: number) {\r\n for (let i = 0; i < this.coffs.length; i++) {\r\n this.coffs[i] += a;\r\n }\r\n }\r\n private _basisValues?: Float64Array;\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\r\n * @returns array of `order` basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n if (!result || result.length < this.order)\r\n result = new Float64Array(this.order);\r\n let i = 0;\r\n for (const a of this._basisValues)\r\n result[i++] = a;\r\n return result;\r\n }\r\n /**\r\n * Sum weights[i] * data[...] in blocks of numPerBlock.\r\n * This is for low level use -- counts are not checked.\r\n * @param weights input array of length `numWeights`\r\n * @param numWeights number of weights\r\n * @param data input array of length `numWeights * numPerBlock`\r\n * @param numPerBlock control point dimension\r\n * @param result output array of length `numPerBlock`\r\n */\r\n private static sumWeightedBlocks(weights: Float64Array, numWeights: number, data: Float64Array, numPerBlock: number, result: Float64Array) {\r\n for (let k0 = 0; k0 < numPerBlock; k0++) {\r\n result[k0] = 0;\r\n }\r\n let k = 0;\r\n let i;\r\n for (let iWeight = 0; iWeight < numWeights; iWeight++) {\r\n const w = weights[iWeight];\r\n for (i = 0; i < numPerBlock; i++) {\r\n result[i] += w * data[k++];\r\n }\r\n }\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter\r\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\r\n * @param blockSize dimension of control points\r\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `blockSize` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < blockSize)\r\n result = new Float64Array(blockSize);\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter\r\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\r\n * @param blockSize dimension of control points\r\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `blockSize` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < blockSize)\r\n result = new Float64Array(blockSize);\r\n this._basisValues = PascalCoefficients.getBezierBasisDerivatives(this.order, u, this._basisValues);\r\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\r\n return result;\r\n }\r\n\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n let sum = 0;\r\n for (let i = 0; i < this.order; i++)\r\n sum += this._basisValues[i] * this.coffs[i];\r\n return sum;\r\n }\r\n /**\r\n * Apply deflation from the left to a bezier.\r\n * * This assumes that the left coefficient is zero.\r\n */\r\n public deflateLeft() {\r\n // coefficient 0 is zero (caller promises.)\r\n // get bezier coffs for both orders ...\r\n const order1 = this.order;\r\n const order0 = order1 - 1;\r\n const coff0 = PascalCoefficients.getRow(order0 - 1);\r\n const coff1 = PascalCoefficients.getRow(order1 - 1);\r\n let a;\r\n for (let i = 0; i < order0; i++) {\r\n a = this.coffs[i + 1];\r\n this.coffs[i] = a * coff1[i + 1] / coff0[i];\r\n }\r\n this._order--;\r\n }\r\n\r\n /**\r\n * Apply deflation from the right to a frame.\r\n * * This assumes that the right coefficient is zero.\r\n * @param frame frame description\r\n */\r\n public deflateRight() {\r\n // final coefficient is zero (caller promises.)\r\n // get bezier coffs for both orders ...\r\n const order1 = this.order;\r\n const order0 = order1 - 1;\r\n const coff0 = PascalCoefficients.getRow(order0 - 1);\r\n const coff1 = PascalCoefficients.getRow(order1 - 1);\r\n let a, b;\r\n for (let i = 0; i < order0; i++) {\r\n a = this.coffs[i];\r\n b = a * coff1[i] / coff0[i];\r\n this.coffs[i] = b;\r\n }\r\n this._order--;\r\n }\r\n /**\r\n * * divide the polynomial by `(x-root)`.\r\n * * return the remainder\r\n * * If `root` truly is a root, the return is zero.\r\n * @param root root to remove\r\n */\r\n public deflateRoot(root: number): number {\r\n const orderA = this.order;\r\n const orderC = orderA - 1; // the order of the deflated bezier.\r\n if (orderA === 1) {\r\n this._order = 0;\r\n return this.coffs[0];\r\n }\r\n if (orderA < 1) {\r\n this._order = 0;\r\n return 0.0;\r\n }\r\n const pascalA = PascalCoefficients.getRow(orderA - 1);\r\n const pascalC = PascalCoefficients.getRow(orderC - 1);\r\n const b0 = -root;\r\n const b1 = 1.0 - root;\r\n let remainder = 0;\r\n if (root > 0.5) {\r\n let c0 = this.coffs[0] / b0;\r\n let c1;\r\n this.coffs[0] = c0;\r\n let a1;\r\n for (let i = 1; i < orderC; i++) {\r\n a1 = this.coffs[i] * pascalA[i];\r\n c1 = (a1 - c0 * b1) / b0;\r\n this.coffs[i] = c1 / pascalC[i];\r\n c0 = c1;\r\n }\r\n remainder = this.coffs[orderA - 1] - c0 * b1;\r\n } else {\r\n // work backwards (to get division by larger of b0, b1)\r\n // replace coefficients of a starting with orderA -1 --\r\n // at end move them all forward.\r\n let c1 = this.coffs[orderA - 1] / b1;\r\n let c0;\r\n this.coffs[orderA - 1] = c1;\r\n let a1;\r\n for (let i = orderA - 2; i > 0; i--) {\r\n a1 = this.coffs[i] * pascalA[i];\r\n c0 = (a1 - c1 * b0) / b1;\r\n this.coffs[i] = c0 / pascalC[i - 1]; // pascalC index is from destination, which is not shifted.\r\n c1 = c0;\r\n }\r\n remainder = (this.coffs[0] - c1 * b0);\r\n for (let i = 0; i < orderC; i++)\r\n this.coffs[i] = this.coffs[i + 1];\r\n }\r\n this._order = orderC;\r\n // This should be zero !!!! (If not, `root` was not really a root!!)\r\n return remainder;\r\n }\r\n private static _basisBuffer?: Float64Array;\r\n private static _basisBuffer1?: Float64Array;\r\n /**\r\n * Run a Newton iteration from startFraction.\r\n * @param startFraction [in] fraction for first iteration\r\n * @param tolerance [in] convergence tolerance. The iteration is considered converged on the\r\n * second time the tolerance is satisfied. For a typical iteration (not double root), the extra pass\r\n * will double the number of digits. Hence this tolerance is normally set to 10 to 12 digits, trusting\r\n * that the final iteration will clean it up to nearly machine precision.\r\n * @returns final fraction of iteration if converged. undefined if iteration failed to converge.\r\n */\r\n public runNewton(startFraction: number, tolerance: number = 1.0e-11): number | undefined {\r\n const derivativeFactor = this.order - 1;\r\n let numConverged = 0;\r\n let u = startFraction;\r\n let f, df;\r\n const bigStep = 10.0;\r\n const order = this.order;\r\n const coffs = this.coffs;\r\n const orderD = order - 1;\r\n for (let iterations = 0; iterations++ < 10;) {\r\n UnivariateBezier._basisBuffer = PascalCoefficients.getBezierBasisValues(order, u, UnivariateBezier._basisBuffer);\r\n f = 0;\r\n for (let i = 0; i < order; i++)\r\n f += coffs[i] * UnivariateBezier._basisBuffer[i];\r\n UnivariateBezier._basisBuffer1 = PascalCoefficients.getBezierBasisValues(orderD, u, UnivariateBezier._basisBuffer1);\r\n df = 0;\r\n for (let i = 0; i < orderD; i++)\r\n df += (coffs[i + 1] - coffs[i]) * UnivariateBezier._basisBuffer1[i];\r\n df *= derivativeFactor;\r\n if (Math.abs(f) > bigStep * Math.abs(df))\r\n return undefined;\r\n const du = f / df;\r\n if (Math.abs(du) < tolerance) {\r\n numConverged++;\r\n if (numConverged >= 2)\r\n return u - du;\r\n } else {\r\n numConverged = 0;\r\n }\r\n u -= du;\r\n }\r\n return undefined;\r\n }\r\n\r\n // Deflation table. b0, b1 are coefficients of term being divided out\r\n // Pascal coffs for b0,b1 are just 1.\r\n // Each ai is a coefficient of the (known) input, with its Pascal coefficient blended in.\r\n // each ci is a coefficient of the (unknown) result, with its coefficient blended in.\r\n // note b0, b1 are both nonzero, so the divisions are safe.\r\n // within the products, each c[i]*b0 pairs with c[i-1]*b1 (above and right diagonally) to make a[i]\r\n // first and last c0*b0 and c[orderC-1]*b1 make a0 and a[orderA-1]\r\n // | | b0 | b1 | equivalence | solve moving down\r\n // | c0 | c0* b0 | c0 * b1 | a0 = c0 * b0 | c0 = a0 / b0\r\n // | c1 | c1* b0 | c1 * b1 | a1 = c1 * b0 + c0 * b1 | c1 = (a1 - c0 * b1) / b0\r\n // | c2 | c2* b0 | c2 * b1\r\n // Each internal ci = (ai - c[i-1] * b1) /b0\r\n // first c0*b0 = a0\r\n // last c[orderC-1]*b1 = a[orderA-1]\r\n /** Find roots of a bezier polynomial\r\n * * As roots are found, deflate the polynomial.\r\n * * bezier coffs are changed (and order reduced) at each step.\r\n */\r\n public static deflateRoots(bezier: UnivariateBezier): number[] | undefined {\r\n const roots = [];\r\n const coffs = bezier.coffs;\r\n let a0, a1, segmentFraction, globalStartFraction, newtonFraction;\r\n while (bezier.order > 1) {\r\n const order = bezier.order;\r\n // Find any crossing\r\n if (coffs[0] === 0.0) {\r\n bezier.deflateLeft();\r\n roots.push(0.0);\r\n continue;\r\n }\r\n let numCrossing = 0;\r\n let numNewtonOK = 0;\r\n for (let i = 1; i < order; i++) {\r\n a0 = coffs[i - 1];\r\n a1 = coffs[i];\r\n if (a0 * a1 <= 0.0) {\r\n numCrossing++;\r\n segmentFraction = -a0 / (a1 - a0);\r\n globalStartFraction = (i - 1 + segmentFraction) / (order - 1);\r\n newtonFraction = bezier.runNewton(globalStartFraction, 1.0e-10);\r\n if (newtonFraction !== undefined) {\r\n roots.push(newtonFraction);\r\n bezier.deflateRoot(newtonFraction);\r\n numNewtonOK++;\r\n break;\r\n }\r\n }\r\n }\r\n if (numNewtonOK)\r\n continue;\r\n // if any crossing was found and led to a good newton, the \"continue\" jumped past this.\r\n // if no crossings found, there are no roots to be had -- accept\r\n if (numCrossing === 0)\r\n return roots;\r\n // reach here if there were crossings but not roots.\r\n // is this just a local min? or maybe a big problem? Whatever, accept it\r\n return roots;\r\n }\r\n return roots;\r\n }\r\n}\r\n/** Bezier polynomial specialized to order 2 (2 coefficients, straight line function)\\\r\n * @internal\r\n */\r\nexport class Order2Bezier extends BezierCoffs {\r\n constructor(f0: number = 0.0, f1: number = 0.0) {\r\n super(2);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n }\r\n /** return an Order2Bezier (linear) with the two coefficients from this Order2Bezier */\r\n public clone(): Order2Bezier {\r\n return new Order2Bezier(this.coffs[0], this.coffs[1]);\r\n }\r\n\r\n /** normally, return fractional coordinate where bezier (a0,a1) has a root.\r\n * but if the fraction would exceed Geometry.largeFractionResult, return undefined.\r\n */\r\n public static solveCoffs(a0: number, a1: number): number | undefined {\r\n return Geometry.conditionalDivideFraction(-a0, (a1 - a0));\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 2. If insufficient length, a new array is returned.\r\n * @returns array of 2 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 2)\r\n result = new Float64Array(2);\r\n result[0] = 1.0 - u;\r\n result[1] = u;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1.0 - u;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = v * polygon[i] + u * polygon[i + n];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param _u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(_u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n for (let i = 0; i < n; i++) {\r\n result[i] = polygon[i + n] - polygon[i];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n return (1.0 - u) * this.coffs[0] + u * this.coffs[1];\r\n }\r\n /** Same as `roots` method but returns single numeric value instead of array. */\r\n public solve(rightHandSide: number): number | undefined {\r\n const df = this.coffs[1] - this.coffs[0];\r\n return Geometry.conditionalDivideFraction(rightHandSide - this.coffs[0], df);\r\n }\r\n /**\r\n * Concrete implementation of the abstract roots method\r\n * @param targetValue target function value.\r\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\r\n * @returns If no roots, return undefined. If single root, return an array with the root.\r\n */\r\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\r\n const x = this.solve(targetValue);\r\n if (x === undefined)\r\n return undefined;\r\n if (!restrictTo01 || Geometry.isIn01(x))\r\n return [x];\r\n return undefined;\r\n }\r\n}\r\n\r\n/** Bezier polynomial specialized to order 3 (3 coefficients, parabola function)\r\n * @internal\r\n */\r\nexport class Order3Bezier extends BezierCoffs {\r\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0) {\r\n super(3);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n }\r\n /** Return a deep copy. */\r\n public clone(): Order3Bezier {\r\n return new Order3Bezier(this.coffs[0], this.coffs[1], this.coffs[2]);\r\n }\r\n\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 3. If insufficient length, a new array is returned.\r\n * @returns array of 3 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 3)\r\n result = new Float64Array(3);\r\n const v = 1.0 - u;\r\n result[0] = v * v;\r\n result[1] = 2.0 * u * v;\r\n result[2] = u * u;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n const b0 = v * v;\r\n const b1 = 2 * u * v;\r\n const b2 = u * u;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const f0 = 2 * (1 - u);\r\n const f1 = 2 * u;\r\n const n2 = 2 * n;\r\n for (let i = 0; i < n; i++) {\r\n const q = polygon[i + n];\r\n result[i] = f0 * (q - polygon[i]) + f1 * (polygon[i + n2] - q);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Add the square of a linear bezier.\r\n * @param f0 linear factor value at u=0.\r\n * @param f1 linear factor value at u=1.\r\n * @param a scale factor.\r\n */\r\n public addSquareLinear(f0: number, f1: number, a: number) {\r\n this.coffs[0] += a * f0 * f0;\r\n this.coffs[1] += a * f0 * f1;\r\n this.coffs[2] += a * f1 * f1;\r\n }\r\n /**\r\n * Concrete implementation of the abstract roots method\r\n * @param targetValue target function value.\r\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\r\n * @returns If no roots, return undefined. If roots exist, return as numeric array.\r\n */\r\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\r\n const a0 = this.coffs[0] - targetValue;\r\n const a1 = this.coffs[1] - targetValue;\r\n const a2 = this.coffs[2] - targetValue;\r\n const a01 = a1 - a0;\r\n const a12 = a2 - a1;\r\n const a012 = a12 - a01;\r\n const roots = Degree2PowerPolynomial.solveQuadratic(a012, 2.0 * a01, a0);\r\n return super.filter01(roots, restrictTo01);\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v = 1.0 - u;\r\n return this.coffs[0] * v * v + u * (2.0 * this.coffs[1] * v + this.coffs[2] * u);\r\n }\r\n}\r\n\r\n/** Bezier polynomial specialized to order 4 (4 coefficients, cubic function)\r\n * @internal\r\n */\r\nexport class Order4Bezier extends BezierCoffs {\r\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0) {\r\n super(4);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n this.coffs[3] = f3;\r\n }\r\n /** return a deep copy */\r\n public clone(): Order4Bezier {\r\n return new Order4Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3]);\r\n }\r\n /** Create a product of a quadratic and a cubic. */\r\n public static createProductOrder3Order2(factorA: Order3Bezier, factorB: Order2Bezier): Order4Bezier {\r\n return new Order4Bezier(\r\n factorA.coffs[0] * factorB.coffs[0],\r\n (factorA.coffs[0] * factorB.coffs[1] + 2.0 * factorA.coffs[1] * factorB.coffs[0]) / 3.0,\r\n (2.0 * factorA.coffs[1] * factorB.coffs[1] + factorA.coffs[2] * factorB.coffs[0]) / 3.0,\r\n factorA.coffs[2] * factorB.coffs[1]);\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 4. If insufficient length, a new array is returned.\r\n * @returns array of 4 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 4)\r\n result = new Float64Array(4);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const vv = v * v;\r\n result[0] = vv * v;\r\n result[1] = 3.0 * vv * u;\r\n result[2] = 3.0 * v * uu;\r\n result[3] = u * uu;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n const uu = u * u;\r\n const vv = v * v;\r\n const b0 = v * vv;\r\n const b1 = 3 * u * vv;\r\n const b2 = 3 * uu * v;\r\n const b3 = u * uu;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n // QUADRATIC basis functions applied to differences ... (with factor 3 for derivative)\r\n const f0 = 3 * (v * v);\r\n const f1 = 6 * u * v;\r\n const f2 = 3 * u * u;\r\n for (let i = 0; i < n; i++) {\r\n const q0 = polygon[i];\r\n const q1 = polygon[i + n];\r\n const q2 = polygon[i + 2 * n];\r\n const q3 = polygon[i + 3 * n];\r\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v1 = 1.0 - u;\r\n const v2 = v1 * v1;\r\n const v3 = v2 * v1;\r\n return this.coffs[0] * v3\r\n + u * (3.0 * this.coffs[1] * v2\r\n + u * (3.0 * this.coffs[2] * v1\r\n + u * this.coffs[3]));\r\n }\r\n /**\r\n * convert a power polynomial to bezier\r\n */\r\n public static createFromDegree3PowerPolynomial(source: Degree3PowerPolynomial): Order4Bezier {\r\n const f0 = source.evaluate(0.0);\r\n const d0 = source.evaluateDerivative(0.0);\r\n const d1 = source.evaluateDerivative(1.0);\r\n const f1 = source.evaluate(1.0);\r\n const a = 3.0;\r\n\r\n return new Order4Bezier(f0, f0 + d0 / a, f1 - d1 / a, f1);\r\n }\r\n /** Find real roots, return in caller-allocated array. */\r\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array) {\r\n // Get direct solutions in standard basis\r\n roots.clear();\r\n const cc = new Float64Array(4);\r\n const y0 = this.coffs[0];\r\n const y1 = this.coffs[1];\r\n const y2 = this.coffs[2];\r\n const y3 = this.coffs[3];\r\n const yMax = Math.max(y0, y1, y2, y3);\r\n const yMin = Math.min(y0, y1, y2, y3);\r\n const smallValue = Geometry.smallMetricDistance;\r\n if (yMin > smallValue)\r\n return undefined;\r\n if (yMax < -smallValue)\r\n return undefined;\r\n\r\n if (yMin >= -smallValue && yMax < smallValue) {\r\n // all 4 are near zero . ..\r\n roots.push(0);\r\n roots.push(1.0 / 3.0);\r\n roots.push(2.0 / 3.0);\r\n roots.push(1.0);\r\n return; // p(x) == 0 has infinite roots .... return 4, which is a red flag for cubic\r\n }\r\n cc[0] = (y0 - e);\r\n cc[1] = 3.0 * (y1 - y0);\r\n cc[2] = 3.0 * (y0 - 2.0 * y1 + y2);\r\n cc[3] = - y0 + 3.0 * y1 - 3.0 * y2 + y3;\r\n AnalyticRoots.appendCubicRoots(cc, roots); // can't have zero solutions after passing min/max conditions . . .\r\n if (restrictTo01)\r\n roots.reassign(0, 1);\r\n return;\r\n }\r\n\r\n}\r\n/** Bezier polynomial specialized to order 5 (5 coefficients, quartic function)\r\n * @internal\r\n */\r\nexport class Order5Bezier extends BezierCoffs {\r\n constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0, f4: number = 0) {\r\n super(5);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n this.coffs[3] = f3;\r\n this.coffs[4] = f4;\r\n }\r\n /** Return a deep copy */\r\n public clone(): Order5Bezier {\r\n return new Order5Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3], this.coffs[4]);\r\n }\r\n /**\r\n * convert a power polynomial to bezier\r\n */\r\n public static createFromDegree4PowerPolynomial(source: Degree4PowerPolynomial): Order5Bezier {\r\n const f0 = source.evaluate(0.0);\r\n const d0 = source.evaluateDerivative(0.0);\r\n const d4 = source.evaluateDerivative(1.0);\r\n const f4 = source.evaluate(1.0);\r\n const a = 0.25;\r\n const d0a = a * d0;\r\n const fa = f0 + d0a;\r\n const fm = 2.0 * fa - f0 + source.coffs[2] / 6.0;\r\n return new Order5Bezier(f0, fa, fm, f4 - d4 * a, f4);\r\n }\r\n\r\n /** evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 5. If insufficient length, a new array is returned.\r\n * @returns array of 5 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 5)\r\n result = new Float64Array(5);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const uuu = uu * u;\r\n const vv = v * v;\r\n const vvv = vv * v;\r\n result[0] = vv * vv;\r\n result[1] = 4.0 * vvv * u;\r\n result[2] = 6.0 * vv * uu;\r\n result[3] = 4.0 * v * uuu;\r\n result[4] = uu * uu;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const uuu = uu * u;\r\n const vv = v * v;\r\n const vvv = vv * v;\r\n const b0 = vv * vv;\r\n const b1 = 4.0 * vvv * u;\r\n const b2 = 6.0 * vv * uu;\r\n const b3 = 4.0 * v * uuu;\r\n const b4 = uu * uu;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n] + b4 * polygon[i + 4 * n];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n // CUBIC basis functions applied to differences ...\r\n const uu = u * u;\r\n const vv = v * v;\r\n const f0 = 4 * v * vv;\r\n const f1 = 12 * u * vv;\r\n const f2 = 12 * uu * v;\r\n const f3 = 4 * u * uu;\r\n for (let i = 0; i < n; i++) {\r\n const q0 = polygon[i];\r\n const q1 = polygon[i + n];\r\n const q2 = polygon[i + 2 * n];\r\n const q3 = polygon[i + 3 * n];\r\n const q4 = polygon[i + 4 * n];\r\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2) + f3 * (q4 - q3);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v1 = 1.0 - u;\r\n const v2 = v1 * v1;\r\n const v3 = v2 * v1;\r\n const v4 = v2 * v2;\r\n return this.coffs[0] * v4\r\n + u * (4.0 * this.coffs[1] * v3\r\n + u * (6.0 * this.coffs[2] * v2\r\n + u * (4.0 * this.coffs[3] * v1\r\n + u * this.coffs[4])));\r\n }\r\n /** Add the product of a pair of Order3Bezier to this one. */\r\n public addProductOrder3BezierOrder3Bezier(f: Order3Bezier, g: Order3Bezier, a: number) {\r\n this.coffs[0] += a * f.coffs[0] * g.coffs[0];\r\n this.coffs[1] += a * (f.coffs[0] * g.coffs[1] + f.coffs[1] * g.coffs[0]) * 0.5;\r\n this.coffs[2] += a * (f.coffs[0] * g.coffs[2] + 4.0 * f.coffs[1] * g.coffs[1] + f.coffs[2] * g.coffs[0]) / 6.0;\r\n this.coffs[3] += a * (f.coffs[1] * g.coffs[2] + f.coffs[2] * g.coffs[1]) * 0.5;\r\n this.coffs[4] += a * f.coffs[2] * g.coffs[2];\r\n }\r\n /** Add a constant to all coefficients (thereby adding the constant to the evaluated bezier) */\r\n public addConstant(a: number): void {\r\n for (let i = 0; i < 5; i++) this.coffs[i] += a;\r\n }\r\n /** Find real roots, return in caller-allocated array. */\r\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): void {\r\n roots.clear();\r\n const y0 = this.coffs[0] - e;\r\n const y1 = this.coffs[1] - e;\r\n const y2 = this.coffs[2] - e;\r\n const y3 = this.coffs[3] - e;\r\n const y4 = this.coffs[4] - e;\r\n // Get direct solutions in standard basis\r\n const yMax = Math.max(y0, y1, y2, y3, y4);\r\n const yMin = Math.min(y0, y1, y2, y3, y4);\r\n const smallValue = Geometry.smallMetricDistance;\r\n if (yMin > smallValue)\r\n return undefined;\r\n if (yMax < -smallValue)\r\n return undefined;\r\n\r\n if (yMin >= -smallValue && yMax < smallValue) {\r\n // all 4 are near zero . ..\r\n roots.push(0);\r\n roots.push(0.25);\r\n roots.push(0.5);\r\n roots.push(0.75);\r\n roots.push(1.0);\r\n return; // p(x) == 0 has infinite roots .... return 5, which is a red flag for cubic ...\r\n }\r\n\r\n const cc = new Float64Array(5);\r\n\r\n cc[0] = (y0 - e);\r\n cc[1] = 4.0 * (-y0 + y1);\r\n cc[2] = 6.0 * (y0 - 2.0 * y1 + y2);\r\n cc[3] = 4.0 * (-y0 + 3.0 * y1 - 3.0 * y2 + y3);\r\n cc[4] = (y0 - 4.0 * y1 + 6.0 * y2 - 4.0 * y3 + y4);\r\n\r\n AnalyticRoots.appendQuarticRoots(cc, roots);\r\n if (restrictTo01)\r\n roots.reassign(0, 1);\r\n return;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AuxData.d.ts","sourceRoot":"","sources":["../../../src/polyface/AuxData.ts"],"names":[],"mappings":"AAKA;;GAEG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B;;OAEG;IACH,MAAM,IAAI;IACV;;OAEG;IACH,QAAQ,IAAI;IACZ;;OAEG;IACH,MAAM,IAAI;IACV;;OAEG;IACH,MAAM,IAAI;CACX;AAED;;EAEE;AACF,qBAAa,cAAc;IACzB,qCAAqC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACrB,mJAAmJ;IAC5I,MAAM,EAAE,MAAM,EAAE,CAAC;IAExB,mEAAmE;gBACvD,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY;IAS1D,sIAAsI;IAC/H,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKxG,yBAAyB;IAClB,KAAK,IAAI,cAAc;IAI9B;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;CAInE;AAED;;EAEE;AACF,qBAAa,UAAU;IACrB,kGAAkG;IAC3F,IAAI,EAAE,cAAc,EAAE,CAAC;IAC9B,+CAA+C;IACxC,QAAQ,EAAE,kBAAkB,CAAC;IACpC,oJAAoJ;IAC7I,IAAI,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IAE1B,wCAAwC;gBACrB,IAAI,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAO1G,0BAA0B;IACnB,KAAK,IAAI,UAAU;IAM1B,yCAAyC;IAClC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAc9D,8CAA8C;WAChC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO;IAI7D,mEAAmE;IACnE,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,iFAAiF;WACnE,eAAe,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM;IAInE,oFAAoF;IACpF,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,sIAAsI;IACtI,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,gGAAgG;IAChG,IAAW,WAAW,IAAI,OAAO,GAAG,SAAS,CAS5C;IAED;;;;OAIG;IACI,wBAAwB,CAAC,KAAK,SAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;CAatE;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,qFAAqF;IAC9E,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC9B,4FAA4F;IACrF,OAAO,EAAE,MAAM,EAAE,CAAC;IAEzB,wCAAwC;gBACrB,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IAK5D,0BAA0B;IACnB,KAAK,IAAI,eAAe;IAK/B;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAWzE,sIAAsI;WACxH,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAQzH,kEAAkE;IAC3D,gBAAgB,IAAI,eAAe;IAc1C;;;;OAIG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;CAmC1D"}
1
+ {"version":3,"file":"AuxData.d.ts","sourceRoot":"","sources":["../../../src/polyface/AuxData.ts"],"names":[],"mappings":"AAKA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B;;OAEG;IACH,MAAM,IAAI;IACV;;OAEG;IACH,QAAQ,IAAI;IACZ;;OAEG;IACH,MAAM,IAAI;IACV;;OAEG;IACH,MAAM,IAAI;CACX;AAED;;EAEE;AACF,qBAAa,cAAc;IACzB,qCAAqC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACrB,mJAAmJ;IAC5I,MAAM,EAAE,MAAM,EAAE,CAAC;IAExB,mEAAmE;gBACvD,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY;IAS1D,sIAAsI;IAC/H,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKxG,yBAAyB;IAClB,KAAK,IAAI,cAAc;IAI9B;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;CAInE;AAED;;EAEE;AACF,qBAAa,UAAU;IACrB,kGAAkG;IAC3F,IAAI,EAAE,cAAc,EAAE,CAAC;IAC9B,+CAA+C;IACxC,QAAQ,EAAE,kBAAkB,CAAC;IACpC,oJAAoJ;IAC7I,IAAI,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IAE1B,wCAAwC;gBACrB,IAAI,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAO1G,0BAA0B;IACnB,KAAK,IAAI,UAAU;IAM1B,yCAAyC;IAClC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAc9D,8CAA8C;WAChC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO;IAI7D,mEAAmE;IACnE,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,iFAAiF;WACnE,eAAe,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM;IAInE,oFAAoF;IACpF,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,sIAAsI;IACtI,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,gGAAgG;IAChG,IAAW,WAAW,IAAI,OAAO,GAAG,SAAS,CAS5C;IAED;;;;OAIG;IACI,wBAAwB,CAAC,KAAK,SAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;CAatE;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,qFAAqF;IAC9E,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC9B,4FAA4F;IACrF,OAAO,EAAE,MAAM,EAAE,CAAC;IAEzB,wCAAwC;gBACrB,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IAK5D,0BAA0B;IACnB,KAAK,IAAI,eAAe;IAK/B;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAWzE,sIAAsI;WACxH,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAQzH,kEAAkE;IAC3D,gBAAgB,IAAI,eAAe;IAc1C;;;;OAIG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;CAmC1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuxData.js","sourceRoot":"","sources":["../../../src/polyface/AuxData.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 Polyface\r\n */\r\n\r\n// import { Point2d } from \"./Geometry2d\";\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\n// import { Geometry } from \"./Geometry\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\n\r\n/** The types of data that can be represented by an [[AuxChannelData]]. Each type of data contributes differently to the\r\n * animation applied by an [AnalysisStyle]($common) and responds differently when the host [[PolyfaceAuxData]] is transformed.\r\n * @public\r\n */\r\nexport enum AuxChannelDataType {\r\n /** General-purpose scalar values like stress, temperature, etc., used to recolor the [[Polyface]]'s vertices.\r\n * When the host Polyface is transformed, scalar values remain unmodified.\r\n */\r\n Scalar = 0,\r\n /** Distances in meters used to recolor the [[Polyface]]'s vertices.\r\n * When the host [[Polyface]] is transformed the [[Transform]]'s scale is applied to the distances.\r\n */\r\n Distance = 1,\r\n /** (X, Y, Z) displacement vectors added to the [[Polyface]]'s vertex positions resulting in deformation of the mesh.\r\n * When the host Polyface is transformed the displacements are rotated and scaled accordingly.\r\n */\r\n Vector = 2,\r\n /** (X, Y, Z) normal vectors that replace the host [[Polyface]]'s own normals.\r\n * When the Polyface is transformed the normals are rotated accordingly.\r\n */\r\n Normal = 3,\r\n}\r\n\r\n/** Represents the [[AuxChannel]] data at a single input value.\r\n * @public\r\n*/\r\nexport class AuxChannelData {\r\n /** The input value for this data. */\r\n public input: number;\r\n /** The vertex values for this data. A single value per vertex for scalar and distance types and 3 values (x,y,z) for normal or vector channels. */\r\n public values: number[];\r\n\r\n /** Constructor. If `values` is a number array, it is captured. */\r\n constructor(input: number, values: number[] | Float64Array) {\r\n this.input = input;\r\n if (values instanceof Float64Array) {\r\n this.values = [];\r\n for (const v of values) this.values.push(v);\r\n } else\r\n this.values = values;\r\n }\r\n\r\n /** Copy blocks of size `blockSize` from (blocked index) `thisIndex` in this AuxChannelData to (blockIndex) `otherIndex` of `other` */\r\n public copyValues(other: AuxChannelData, thisIndex: number, otherIndex: number, blockSize: number): void {\r\n for (let i = 0; i < blockSize; i++)\r\n this.values[thisIndex * blockSize + i] = other.values[otherIndex * blockSize + i];\r\n }\r\n\r\n /** return a deep copy */\r\n public clone(): AuxChannelData {\r\n return new AuxChannelData(this.input, this.values.slice());\r\n }\r\n\r\n /** toleranced comparison of the `input` and `value` fields.\r\n * * Default tolerance is 1.0e-8\r\n */\r\n public isAlmostEqual(other: AuxChannelData, tol?: number): boolean {\r\n const tolerance = tol ? tol : 1.0E-8;\r\n return Math.abs(this.input - other.input) < tolerance && NumberArray.isAlmostEqual(this.values, other.values, tolerance);\r\n }\r\n}\r\n\r\n/** Represents a single [[PolyfaceAuxData]] channel.\r\n * @public\r\n*/\r\nexport class AuxChannel {\r\n /** An array of [[AuxChannelData]] that represents the vertex data at one or more input values. */\r\n public data: AuxChannelData[];\r\n /** The type of data stored in this channel. */\r\n public dataType: AuxChannelDataType;\r\n /** The channel name. This is used to present the [[AuxChannel]] to the user and also to select the [[AuxChannel]] for display from AnalysisStyle */\r\n public name?: string;\r\n /** The input name. */\r\n public inputName?: string;\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(data: AuxChannelData[], dataType: AuxChannelDataType, name?: string, inputName?: string) {\r\n this.data = data;\r\n this.dataType = dataType;\r\n this.name = name;\r\n this.inputName = inputName;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): AuxChannel {\r\n const clonedData = [];\r\n for (const data of this.data) clonedData.push(data.clone());\r\n return new AuxChannel(clonedData, this.dataType, this.name, this.inputName);\r\n }\r\n\r\n /** Toleranced comparison of contents. */\r\n public isAlmostEqual(other: AuxChannel, tol?: number): boolean {\r\n if (this.dataType !== other.dataType ||\r\n this.name !== other.name ||\r\n this.inputName !== other.inputName ||\r\n this.data.length !== other.data.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.data.length; i++)\r\n if (!this.data[i].isAlmostEqual(other.data[i], tol))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** True if the data type is 1-dimensional. */\r\n public static isScalar(dataType: AuxChannelDataType): boolean {\r\n return dataType === AuxChannelDataType.Distance || dataType === AuxChannelDataType.Scalar;\r\n }\r\n\r\n /** True if the data stored in this AuxChannel is 1-dimensional. */\r\n public get isScalar(): boolean {\r\n return AuxChannel.isScalar(this.dataType);\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum of an AuxChannel of the given type. */\r\n public static entriesPerValue(dataType: AuxChannelDataType): number {\r\n return this.isScalar(dataType) ? 1 : 3;\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum in the data arrays of this AuxChannel. */\r\n public get entriesPerValue(): number {\r\n return AuxChannel.entriesPerValue(this.dataType);\r\n }\r\n\r\n /** The number of data stored in each data array of this AuxChannel, equal to the length of the array divided by `entriesPerValue`. */\r\n public get valueCount(): number {\r\n return 0 === this.data.length ? 0 : this.data[0].values.length / this.entriesPerValue;\r\n }\r\n\r\n /** The minimum and maximum values in `data.values`, or `undefined` if [[isScalar]] is false. */\r\n public get scalarRange(): Range1d | undefined {\r\n if (!this.isScalar)\r\n return undefined;\r\n\r\n const range = Range1d.createNull();\r\n for (const data of this.data)\r\n range.extendArray(data.values);\r\n\r\n return range;\r\n }\r\n\r\n /** Compute the range of this channel's displacement values, if [[dataType]] is [[AuxChannelDataType.Vector]].\r\n * @param scale Scale by which to multiply each displacement.\r\n * @param result Preallocated object in which to store result.\r\n * @returns The range encompassing all this channel's displacements scaled by `scale`; or a null range if this channel does not contain displacements.\r\n */\r\n public computeDisplacementRange(scale = 1, result?: Range3d): Range3d {\r\n result = Range3d.createNull(result);\r\n\r\n if (AuxChannelDataType.Vector === this.dataType) {\r\n for (const data of this.data) {\r\n const v = data.values;\r\n for (let i = 0; i < v.length; i += 3)\r\n result.extendXYZ(v[i] * scale, v[i + 1] * scale, v[i + 2] * scale);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * The `PolyfaceAuxData` structure contains one or more analytical data channels for each vertex of a [[Polyface]], allowing the polyface to be styled\r\n * using an [AnalysisStyle]($common).\r\n * Typically a polyface will contain only vertex data required for its basic display: vertex position, normal, texture parameter, color.\r\n * `PolyfaceAuxData` provides supplemental per-vertex data that is generally computed in an analysis program or other external data source.\r\n * This supplemental data can be either 1D (e.g., height, override color) or 3D (e.g., displacement vector, override normal); see [[AuxChannel.entriesPerValue]], [[AuxChannel.dataType]].\r\n * All data channels are indexed by the same indices, which must have the same length and structure as the other Polyface indices.\r\n * This means that if a facet's face loop is found at index range [i0,i1] in the Polyface vertex index array, then the same index range [i0,i1]\r\n * locates the data for this facet in all the other Polyface index arrays, including the `PolyfaceAuxData` indices.\r\n * @see [[PolyfaceData.auxData]] to associate auxiliary data with a polyface.\r\n * @public\r\n */\r\nexport class PolyfaceAuxData {\r\n /** Array with one or more channels of auxiliary data for the associated polyface. */\r\n public channels: AuxChannel[];\r\n /** The indices (shared by all data in all channels) mapping the data to the mesh facets. */\r\n public indices: number[];\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(channels: AuxChannel[], indices: number[]) {\r\n this.channels = channels;\r\n this.indices = indices;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): PolyfaceAuxData {\r\n const clonedChannels = this.channels.map((x) => x.clone());\r\n return new PolyfaceAuxData(clonedChannels, this.indices.slice());\r\n }\r\n\r\n /** Returns true if `this` is equivalent to `other` within `tolerance`.\r\n * The indices are compared for exact equality. The data in the channels are compared using `tolerance`, which defaults to 1.0e-8.\r\n */\r\n public isAlmostEqual(other: PolyfaceAuxData, tolerance?: number): boolean {\r\n if (!NumberArray.isExactEqual(this.indices, other.indices) || this.channels.length !== other.channels.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.channels.length; i++)\r\n if (!this.channels[i].isAlmostEqual(other.channels[i], tolerance))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** Returns true if both `left` and `right` are undefined, or both are defined and equivalent within `tolerance` (default: 1.0e-8). */\r\n public static isAlmostEqual(left: PolyfaceAuxData | undefined, right: PolyfaceAuxData | undefined, tol?: number): boolean {\r\n if (left === right) // This catches double undefined !!!\r\n return true;\r\n if (left && right)\r\n return left.isAlmostEqual(right, tol);\r\n return false;\r\n }\r\n\r\n /** Create a PolyfaceAuxData for use by a [[PolyfaceVisitor]]. */\r\n public createForVisitor(): PolyfaceAuxData {\r\n const visitorChannels: AuxChannel[] = [];\r\n\r\n for (const parentChannel of this.channels) {\r\n const visitorChannelData: AuxChannelData[] = [];\r\n for (const parentChannelData of parentChannel.data)\r\n visitorChannelData.push(new AuxChannelData(parentChannelData.input, []));\r\n\r\n visitorChannels.push(new AuxChannel(visitorChannelData, parentChannel.dataType, parentChannel.name, parentChannel.inputName));\r\n }\r\n\r\n return new PolyfaceAuxData(visitorChannels, []);\r\n }\r\n\r\n /** Apply `transform` to the data in each channel.\r\n * @see [[AuxChannelDataType]] for details regarding how each data type is affected by the transform.\r\n * @note This method may fail if a channel of [[AuxChannelDataType.Normal]] exists and `transform.matrix` is non-invertible.\r\n * @returns true if the channels were all successfully transformed.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n let inverseRot: Matrix3d | undefined;\r\n const rot = transform.matrix;\r\n const det = rot.determinant();\r\n const scale = Math.pow(Math.abs(det), 1 / 3) * (det >= 0 ? 1 : -1);\r\n\r\n for (const channel of this.channels) {\r\n for (const data of channel.data) {\r\n switch (channel.dataType) {\r\n case AuxChannelDataType.Scalar:\r\n continue;\r\n case AuxChannelDataType.Distance: {\r\n for (let i = 0; i < data.values.length; i++)\r\n data.values[i] *= scale;\r\n\r\n break;\r\n }\r\n case AuxChannelDataType.Normal: {\r\n inverseRot = inverseRot ?? rot.inverse();\r\n if (!inverseRot)\r\n return false;\r\n\r\n transformPoints(data.values, (point) => inverseRot!.multiplyTransposeVectorInPlace(point));\r\n break;\r\n }\r\n case AuxChannelDataType.Vector: {\r\n transformPoints(data.values, (point) => rot.multiplyVectorInPlace(point));\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nfunction transformPoints(coords: number[], transform: (point: Point3d) => void): void {\r\n const point = new Point3d();\r\n for (let i = 0; i < coords.length; i += 3) {\r\n point.set(coords[i], coords[i + 1], coords[i + 2]);\r\n transform(point);\r\n coords[i] = point.x;\r\n coords[i + 1] = point.y;\r\n coords[i + 2] = point.z;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AuxData.js","sourceRoot":"","sources":["../../../src/polyface/AuxData.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 Polyface\r\n */\r\n\r\n// import { Point2d } from \"./Geometry2d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\n// import { Geometry } from \"./Geometry\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\n\r\n/** The types of data that can be represented by an [[AuxChannelData]]. Each type of data contributes differently to the\r\n * animation applied by an [AnalysisStyle]($common) and responds differently when the host [[PolyfaceAuxData]] is transformed.\r\n * @public\r\n */\r\nexport enum AuxChannelDataType {\r\n /** General-purpose scalar values like stress, temperature, etc., used to recolor the [[Polyface]]'s vertices.\r\n * When the host Polyface is transformed, scalar values remain unmodified.\r\n */\r\n Scalar = 0,\r\n /** Distances in meters used to recolor the [[Polyface]]'s vertices.\r\n * When the host [[Polyface]] is transformed the [[Transform]]'s scale is applied to the distances.\r\n */\r\n Distance = 1,\r\n /** (X, Y, Z) displacement vectors added to the [[Polyface]]'s vertex positions resulting in deformation of the mesh.\r\n * When the host Polyface is transformed the displacements are rotated and scaled accordingly.\r\n */\r\n Vector = 2,\r\n /** (X, Y, Z) normal vectors that replace the host [[Polyface]]'s own normals.\r\n * When the Polyface is transformed the normals are rotated accordingly.\r\n */\r\n Normal = 3,\r\n}\r\n\r\n/** Represents the [[AuxChannel]] data at a single input value.\r\n * @public\r\n*/\r\nexport class AuxChannelData {\r\n /** The input value for this data. */\r\n public input: number;\r\n /** The vertex values for this data. A single value per vertex for scalar and distance types and 3 values (x,y,z) for normal or vector channels. */\r\n public values: number[];\r\n\r\n /** Constructor. If `values` is a number array, it is captured. */\r\n constructor(input: number, values: number[] | Float64Array) {\r\n this.input = input;\r\n if (values instanceof Float64Array) {\r\n this.values = [];\r\n for (const v of values) this.values.push(v);\r\n } else\r\n this.values = values;\r\n }\r\n\r\n /** Copy blocks of size `blockSize` from (blocked index) `thisIndex` in this AuxChannelData to (blockIndex) `otherIndex` of `other` */\r\n public copyValues(other: AuxChannelData, thisIndex: number, otherIndex: number, blockSize: number): void {\r\n for (let i = 0; i < blockSize; i++)\r\n this.values[thisIndex * blockSize + i] = other.values[otherIndex * blockSize + i];\r\n }\r\n\r\n /** return a deep copy */\r\n public clone(): AuxChannelData {\r\n return new AuxChannelData(this.input, this.values.slice());\r\n }\r\n\r\n /** toleranced comparison of the `input` and `value` fields.\r\n * * Default tolerance is 1.0e-8\r\n */\r\n public isAlmostEqual(other: AuxChannelData, tol?: number): boolean {\r\n const tolerance = tol ? tol : 1.0E-8;\r\n return Math.abs(this.input - other.input) < tolerance && NumberArray.isAlmostEqual(this.values, other.values, tolerance);\r\n }\r\n}\r\n\r\n/** Represents a single [[PolyfaceAuxData]] channel.\r\n * @public\r\n*/\r\nexport class AuxChannel {\r\n /** An array of [[AuxChannelData]] that represents the vertex data at one or more input values. */\r\n public data: AuxChannelData[];\r\n /** The type of data stored in this channel. */\r\n public dataType: AuxChannelDataType;\r\n /** The channel name. This is used to present the [[AuxChannel]] to the user and also to select the [[AuxChannel]] for display from AnalysisStyle */\r\n public name?: string;\r\n /** The input name. */\r\n public inputName?: string;\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(data: AuxChannelData[], dataType: AuxChannelDataType, name?: string, inputName?: string) {\r\n this.data = data;\r\n this.dataType = dataType;\r\n this.name = name;\r\n this.inputName = inputName;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): AuxChannel {\r\n const clonedData = [];\r\n for (const data of this.data) clonedData.push(data.clone());\r\n return new AuxChannel(clonedData, this.dataType, this.name, this.inputName);\r\n }\r\n\r\n /** Toleranced comparison of contents. */\r\n public isAlmostEqual(other: AuxChannel, tol?: number): boolean {\r\n if (this.dataType !== other.dataType ||\r\n this.name !== other.name ||\r\n this.inputName !== other.inputName ||\r\n this.data.length !== other.data.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.data.length; i++)\r\n if (!this.data[i].isAlmostEqual(other.data[i], tol))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** True if the data type is 1-dimensional. */\r\n public static isScalar(dataType: AuxChannelDataType): boolean {\r\n return dataType === AuxChannelDataType.Distance || dataType === AuxChannelDataType.Scalar;\r\n }\r\n\r\n /** True if the data stored in this AuxChannel is 1-dimensional. */\r\n public get isScalar(): boolean {\r\n return AuxChannel.isScalar(this.dataType);\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum of an AuxChannel of the given type. */\r\n public static entriesPerValue(dataType: AuxChannelDataType): number {\r\n return this.isScalar(dataType) ? 1 : 3;\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum in the data arrays of this AuxChannel. */\r\n public get entriesPerValue(): number {\r\n return AuxChannel.entriesPerValue(this.dataType);\r\n }\r\n\r\n /** The number of data stored in each data array of this AuxChannel, equal to the length of the array divided by `entriesPerValue`. */\r\n public get valueCount(): number {\r\n return 0 === this.data.length ? 0 : this.data[0].values.length / this.entriesPerValue;\r\n }\r\n\r\n /** The minimum and maximum values in `data.values`, or `undefined` if [[isScalar]] is false. */\r\n public get scalarRange(): Range1d | undefined {\r\n if (!this.isScalar)\r\n return undefined;\r\n\r\n const range = Range1d.createNull();\r\n for (const data of this.data)\r\n range.extendArray(data.values);\r\n\r\n return range;\r\n }\r\n\r\n /** Compute the range of this channel's displacement values, if [[dataType]] is [[AuxChannelDataType.Vector]].\r\n * @param scale Scale by which to multiply each displacement.\r\n * @param result Preallocated object in which to store result.\r\n * @returns The range encompassing all this channel's displacements scaled by `scale`; or a null range if this channel does not contain displacements.\r\n */\r\n public computeDisplacementRange(scale = 1, result?: Range3d): Range3d {\r\n result = Range3d.createNull(result);\r\n\r\n if (AuxChannelDataType.Vector === this.dataType) {\r\n for (const data of this.data) {\r\n const v = data.values;\r\n for (let i = 0; i < v.length; i += 3)\r\n result.extendXYZ(v[i] * scale, v[i + 1] * scale, v[i + 2] * scale);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * The `PolyfaceAuxData` structure contains one or more analytical data channels for each vertex of a [[Polyface]], allowing the polyface to be styled\r\n * using an [AnalysisStyle]($common).\r\n * Typically a polyface will contain only vertex data required for its basic display: vertex position, normal, texture parameter, color.\r\n * `PolyfaceAuxData` provides supplemental per-vertex data that is generally computed in an analysis program or other external data source.\r\n * This supplemental data can be either 1D (e.g., height, override color) or 3D (e.g., displacement vector, override normal); see [[AuxChannel.entriesPerValue]], [[AuxChannel.dataType]].\r\n * All data channels are indexed by the same indices, which must have the same length and structure as the other Polyface indices.\r\n * This means that if a facet's face loop is found at index range [i0,i1] in the Polyface vertex index array, then the same index range [i0,i1]\r\n * locates the data for this facet in all the other Polyface index arrays, including the `PolyfaceAuxData` indices.\r\n * @see [[PolyfaceData.auxData]] to associate auxiliary data with a polyface.\r\n * @public\r\n */\r\nexport class PolyfaceAuxData {\r\n /** Array with one or more channels of auxiliary data for the associated polyface. */\r\n public channels: AuxChannel[];\r\n /** The indices (shared by all data in all channels) mapping the data to the mesh facets. */\r\n public indices: number[];\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(channels: AuxChannel[], indices: number[]) {\r\n this.channels = channels;\r\n this.indices = indices;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): PolyfaceAuxData {\r\n const clonedChannels = this.channels.map((x) => x.clone());\r\n return new PolyfaceAuxData(clonedChannels, this.indices.slice());\r\n }\r\n\r\n /** Returns true if `this` is equivalent to `other` within `tolerance`.\r\n * The indices are compared for exact equality. The data in the channels are compared using `tolerance`, which defaults to 1.0e-8.\r\n */\r\n public isAlmostEqual(other: PolyfaceAuxData, tolerance?: number): boolean {\r\n if (!NumberArray.isExactEqual(this.indices, other.indices) || this.channels.length !== other.channels.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.channels.length; i++)\r\n if (!this.channels[i].isAlmostEqual(other.channels[i], tolerance))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** Returns true if both `left` and `right` are undefined, or both are defined and equivalent within `tolerance` (default: 1.0e-8). */\r\n public static isAlmostEqual(left: PolyfaceAuxData | undefined, right: PolyfaceAuxData | undefined, tol?: number): boolean {\r\n if (left === right) // This catches double undefined !!!\r\n return true;\r\n if (left && right)\r\n return left.isAlmostEqual(right, tol);\r\n return false;\r\n }\r\n\r\n /** Create a PolyfaceAuxData for use by a [[PolyfaceVisitor]]. */\r\n public createForVisitor(): PolyfaceAuxData {\r\n const visitorChannels: AuxChannel[] = [];\r\n\r\n for (const parentChannel of this.channels) {\r\n const visitorChannelData: AuxChannelData[] = [];\r\n for (const parentChannelData of parentChannel.data)\r\n visitorChannelData.push(new AuxChannelData(parentChannelData.input, []));\r\n\r\n visitorChannels.push(new AuxChannel(visitorChannelData, parentChannel.dataType, parentChannel.name, parentChannel.inputName));\r\n }\r\n\r\n return new PolyfaceAuxData(visitorChannels, []);\r\n }\r\n\r\n /** Apply `transform` to the data in each channel.\r\n * @see [[AuxChannelDataType]] for details regarding how each data type is affected by the transform.\r\n * @note This method may fail if a channel of [[AuxChannelDataType.Normal]] exists and `transform.matrix` is non-invertible.\r\n * @returns true if the channels were all successfully transformed.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n let inverseRot: Matrix3d | undefined;\r\n const rot = transform.matrix;\r\n const det = rot.determinant();\r\n const scale = Math.pow(Math.abs(det), 1 / 3) * (det >= 0 ? 1 : -1);\r\n\r\n for (const channel of this.channels) {\r\n for (const data of channel.data) {\r\n switch (channel.dataType) {\r\n case AuxChannelDataType.Scalar:\r\n continue;\r\n case AuxChannelDataType.Distance: {\r\n for (let i = 0; i < data.values.length; i++)\r\n data.values[i] *= scale;\r\n\r\n break;\r\n }\r\n case AuxChannelDataType.Normal: {\r\n inverseRot = inverseRot ?? rot.inverse();\r\n if (!inverseRot)\r\n return false;\r\n\r\n transformPoints(data.values, (point) => inverseRot!.multiplyTransposeVectorInPlace(point));\r\n break;\r\n }\r\n case AuxChannelDataType.Vector: {\r\n transformPoints(data.values, (point) => rot.multiplyVectorInPlace(point));\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nfunction transformPoints(coords: number[], transform: (point: Point3d) => void): void {\r\n const point = new Point3d();\r\n for (let i = 0; i < coords.length; i += 3) {\r\n point.set(coords[i], coords[i + 1], coords[i + 2]);\r\n transform(point);\r\n coords[i] = point.x;\r\n coords[i + 1] = point.y;\r\n coords[i + 2] = point.z;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,6 @@ const Point3dVector3d_1 = require("../geometry3d/Point3dVector3d");
14
14
  const PolygonOps_1 = require("../geometry3d/PolygonOps");
15
15
  const Polyface_1 = require("./Polyface");
16
16
  const PolyfaceData_1 = require("./PolyfaceData");
17
- /* eslint-disable @itwin/prefer-get */
18
17
  /**
19
18
  * An `IndexedPolyfaceVisitor` is an iterator-like object that "visits" facets of a mesh.
20
19
  * * The visitor extends `PolyfaceData`, so it can at any time hold all the data of a single facet.