@itwin/core-geometry 5.3.0-dev.17 → 5.3.0-dev.18

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 (106) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.d.ts +10 -13
  3. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.d.ts.map +1 -1
  4. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +23 -22
  5. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  6. package/lib/cjs/curve/spiral/ClothoidSeries.d.ts +5 -5
  7. package/lib/cjs/curve/spiral/ClothoidSeries.d.ts.map +1 -1
  8. package/lib/cjs/curve/spiral/ClothoidSeries.js +28 -16
  9. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  10. package/lib/cjs/curve/spiral/CubicEvaluator.d.ts +7 -6
  11. package/lib/cjs/curve/spiral/CubicEvaluator.d.ts.map +1 -1
  12. package/lib/cjs/curve/spiral/CubicEvaluator.js +29 -14
  13. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  14. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.d.ts +30 -40
  15. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.d.ts.map +1 -1
  16. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +43 -49
  17. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  18. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts +2 -2
  19. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts.map +1 -1
  20. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +17 -7
  21. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  22. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +103 -95
  23. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  24. package/lib/cjs/curve/spiral/DirectSpiral3d.js +132 -106
  25. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  26. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +70 -52
  27. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  28. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +97 -65
  29. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  30. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts +7 -11
  31. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts.map +1 -1
  32. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +10 -12
  33. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  34. package/lib/cjs/curve/spiral/NormalizedTransition.d.ts +29 -24
  35. package/lib/cjs/curve/spiral/NormalizedTransition.d.ts.map +1 -1
  36. package/lib/cjs/curve/spiral/NormalizedTransition.js +53 -35
  37. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  38. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.d.ts +12 -17
  39. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.d.ts.map +1 -1
  40. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +20 -23
  41. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  42. package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts +25 -23
  43. package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
  44. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +34 -29
  45. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  46. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +43 -33
  47. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  48. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +56 -38
  49. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  50. package/lib/cjs/curve/spiral/XYCurveEvaluator.d.ts +27 -21
  51. package/lib/cjs/curve/spiral/XYCurveEvaluator.d.ts.map +1 -1
  52. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +23 -18
  53. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  54. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.d.ts +10 -13
  55. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.d.ts.map +1 -1
  56. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +23 -22
  57. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  58. package/lib/esm/curve/spiral/ClothoidSeries.d.ts +5 -5
  59. package/lib/esm/curve/spiral/ClothoidSeries.d.ts.map +1 -1
  60. package/lib/esm/curve/spiral/ClothoidSeries.js +28 -16
  61. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  62. package/lib/esm/curve/spiral/CubicEvaluator.d.ts +7 -6
  63. package/lib/esm/curve/spiral/CubicEvaluator.d.ts.map +1 -1
  64. package/lib/esm/curve/spiral/CubicEvaluator.js +29 -14
  65. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  66. package/lib/esm/curve/spiral/CzechSpiralEvaluator.d.ts +30 -40
  67. package/lib/esm/curve/spiral/CzechSpiralEvaluator.d.ts.map +1 -1
  68. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +43 -49
  69. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  70. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts +2 -2
  71. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts.map +1 -1
  72. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +17 -7
  73. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  74. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +103 -95
  75. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  76. package/lib/esm/curve/spiral/DirectSpiral3d.js +132 -106
  77. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  78. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +70 -52
  79. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  80. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +97 -65
  81. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  82. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts +7 -11
  83. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts.map +1 -1
  84. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +10 -12
  85. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  86. package/lib/esm/curve/spiral/NormalizedTransition.d.ts +29 -24
  87. package/lib/esm/curve/spiral/NormalizedTransition.d.ts.map +1 -1
  88. package/lib/esm/curve/spiral/NormalizedTransition.js +53 -35
  89. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  90. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.d.ts +12 -17
  91. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.d.ts.map +1 -1
  92. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +20 -23
  93. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  94. package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts +25 -23
  95. package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
  96. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +34 -29
  97. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  98. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +43 -33
  99. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  100. package/lib/esm/curve/spiral/TransitionSpiral3d.js +56 -38
  101. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  102. package/lib/esm/curve/spiral/XYCurveEvaluator.d.ts +27 -21
  103. package/lib/esm/curve/spiral/XYCurveEvaluator.d.ts.map +1 -1
  104. package/lib/esm/curve/spiral/XYCurveEvaluator.js +23 -18
  105. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  106. package/package.json +3 -3
@@ -15,13 +15,14 @@
15
15
  * @internal
16
16
  */
17
17
  export declare abstract class NormalizedTransition {
18
- /** Constructor initializes with 0..1 values .. call "setBearingCurvatureLengthCurvature" to apply real values */
18
+ /** Constructor initializes with 0..1 values. Call "setBearingCurvatureLengthCurvature" to apply real values. */
19
19
  constructor();
20
20
  /** At fractional position on the x axis, return the (normalized) curvature fraction. */
21
21
  abstract fractionToCurvatureFraction(fractionX: number): number;
22
22
  /** Return the derivative of the (normalized) curvature fraction */
23
23
  abstract fractionToCurvatureFractionDerivative(fractionX: number): number;
24
- /** Return the integrated area under the curve
24
+ /**
25
+ * Return the integrated area under the curve
25
26
  * * This is equal to the accumulated angle change.
26
27
  */
27
28
  abstract fractionToArea(fractionX: number): number;
@@ -53,34 +54,36 @@ export declare class NormalizedClothoidTransition extends NormalizedTransition {
53
54
  constructor();
54
55
  /** At fractional position on the x axis, return the (normalized) curvature fraction. */
55
56
  fractionToCurvatureFraction(fractionX: number): number;
56
- /** Return the derivative of the (normalized) curvature fraction */
57
+ /** Return the derivative of the (normalized) curvature fraction. */
57
58
  fractionToCurvatureFractionDerivative(_u: number): number;
58
- /** Return the integrated area under the curve.
59
+ /**
60
+ * Return the integrated area under the curve.
59
61
  * * This fraction is the angular change fraction.
60
62
  */
61
63
  fractionToArea(fractionX: number): number;
62
64
  }
63
65
  /**
64
66
  * Transition functions for bloss spiral.
65
- * * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1
67
+ * * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1.
66
68
  * @internal
67
69
  */
68
70
  export declare class NormalizedBlossTransition extends NormalizedTransition {
69
71
  constructor();
70
72
  /** At fractional position on the x axis, return the (normalized) curvature fraction. */
71
73
  fractionToCurvatureFraction(u: number): number;
72
- /** Return the derivative of the (normalized) curvature fraction */
74
+ /** Return the derivative of the (normalized) curvature fraction. */
73
75
  fractionToCurvatureFractionDerivative(u: number): number;
74
- /** Return the integrated area under the curve.
76
+ /**
77
+ * Return the integrated area under the curve.
75
78
  * * This fraction is the angular change fraction.
76
79
  */
77
80
  fractionToArea(u: number): number;
78
81
  }
79
82
  /**
80
- * Transition functions for biquadratic transition
83
+ * Transition functions for biquadratic transition.
81
84
  * * Curvature is a pair of joining quadratics.
82
- * * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin
83
- * * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1
85
+ * * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin.
86
+ * * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1.
84
87
  * @internal
85
88
  */
86
89
  export declare class NormalizedBiQuadraticTransition extends NormalizedTransition {
@@ -88,32 +91,34 @@ export declare class NormalizedBiQuadraticTransition extends NormalizedTransitio
88
91
  private integratedBasis;
89
92
  private basis;
90
93
  private basisDerivative;
91
- /** At fractional position on the x axis, return the (normalized) curvature fraction.
92
- * * * For [u <= 0.5, u >= 0.5]
93
- * * f(u) = [2 u^2, 1 - 2 (1-u)^2]
94
- * * f'(u) = [4 u, 4 (1-u)]
95
- * * If(u) = [2 u^3 / 3, 0.5 (1 -u )^3/3]
94
+ /**
95
+ * At fractional position on the x axis, return the (normalized) curvature fraction.
96
+ * * For [u <= 0.5, u >= 0.5]
97
+ * * f(u) = [2 u^2, 1 - 2 (1-u)^2]
98
+ * * f'(u) = [4 u, 4 (1-u)]
99
+ * * If(u) = [2 u^3 / 3, 0.5 (1 -u )^3/3]
96
100
  */
97
101
  fractionToCurvatureFraction(u: number): number;
98
- /** Return the derivative of the (normalized) curvature fraction */
102
+ /** Return the derivative of the (normalized) curvature fraction. */
99
103
  fractionToCurvatureFractionDerivative(u: number): number;
100
- /** Return the integrated area under the curve.
104
+ /**
105
+ * Return the integrated area under the curve.
101
106
  * * This fraction is the angular change fraction.
102
107
  */
103
108
  fractionToArea(u: number): number;
104
109
  }
105
110
  /**
106
- * Transition functions for sine transition
111
+ * Transition functions for sine transition.
107
112
  * * curvature variation is the sum of
108
- * * straight line from (0,0) to (1,1), like clothoid
109
- * * additional full period of a sine wave, producing 0 slope at both ends
113
+ * * straight line from (0,0) to (1,1), like clothoid.
114
+ * * additional full period of a sine wave, producing 0 slope at both ends.
110
115
  * @internal
111
116
  */
112
117
  export declare class NormalizedSineTransition extends NormalizedTransition {
113
118
  constructor();
114
119
  /** At fractional position on the x axis, return the (normalized) curvature fraction. */
115
120
  fractionToCurvatureFraction(u: number): number;
116
- /** Return the derivative of the (normalized) curvature fraction */
121
+ /** Return the derivative of the (normalized) curvature fraction. */
117
122
  fractionToCurvatureFractionDerivative(u: number): number;
118
123
  /** Return the integrated area under the curve.
119
124
  * * This fraction is the angular change fraction.
@@ -121,15 +126,15 @@ export declare class NormalizedSineTransition extends NormalizedTransition {
121
126
  fractionToArea(u: number): number;
122
127
  }
123
128
  /**
124
- * Transition functions for cosine
125
- * * curvature variation is a half period of a cosine
129
+ * Transition functions for cosine.
130
+ * * curvature variation is a half period of a cosine.
126
131
  * @internal
127
132
  */
128
133
  export declare class NormalizedCosineTransition extends NormalizedTransition {
129
134
  constructor();
130
135
  /** At fractional position on the x axis, return the (normalized) curvature fraction. */
131
136
  fractionToCurvatureFraction(u: number): number;
132
- /** Return the derivative of the (normalized) curvature fraction */
137
+ /** Return the derivative of the (normalized) curvature fraction. */
133
138
  fractionToCurvatureFractionDerivative(u: number): number;
134
139
  /** Return the integrated area under the curve.
135
140
  * * This fraction is the angular change fraction.
@@ -1 +1 @@
1
- {"version":3,"file":"NormalizedTransition.d.ts","sourceRoot":"","sources":["../../../../src/curve/spiral/NormalizedTransition.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH;;;;;;;;;;;;GAYG;AACH,8BAAsB,oBAAoB;IACxC,iHAAiH;;IAEjH,wFAAwF;aACxE,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IACtE,mEAAmE;aACnD,qCAAqC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAChF;;OAEG;aACa,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IACzD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAA+B;IACjE,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAkC;IACvE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAA4B;IAC3D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAA2B;IACzD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAA6B;IAE7D;;;;;;;;;;;OAWG;WACW,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;CAa5E;AACD;;;;GAIG;AACH,qBAAa,4BAA6B,SAAQ,oBAAoB;;IAEpE,wFAAwF;IACjF,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAC7D,mEAAmE;IAC5D,qCAAqC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAChE;;OAEG;IACI,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAGjD;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB;;IAQjE,wFAAwF;IACjF,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IACrD,mEAAmE;IAC5D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG/D;;OAEG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAGzC;AAED;;;;;;GAMG;AACH,qBAAa,+BAAgC,SAAQ,oBAAoB;;IAEvE,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,eAAe;IACvB;;;;;OAKG;IACI,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAGrD,mEAAmE;IAC5D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG/D;;OAEG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAMzC;AAED;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,oBAAoB;;IAEhE,wFAAwF;IACjF,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrD,mEAAmE;IAC5D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/D;;OAEG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAIzC;AACD;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,oBAAoB;;IAElE,wFAAwF;IACjF,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrD,mEAAmE;IAC5D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/D;;OAEG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAIzC"}
1
+ {"version":3,"file":"NormalizedTransition.d.ts","sourceRoot":"","sources":["../../../../src/curve/spiral/NormalizedTransition.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH,8BAAsB,oBAAoB;IACxC,gHAAgH;;IAEhH,wFAAwF;aACxE,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IACtE,mEAAmE;aACnD,qCAAqC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAChF;;;OAGG;aACa,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IACzD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAA+B;IACjE,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAkC;IACvE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAA4B;IAC3D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAA2B;IACzD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAA6B;IAC7D;;;;;;;;;;;OAWG;WACW,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;CAa5E;AAED;;;;GAIG;AACH,qBAAa,4BAA6B,SAAQ,oBAAoB;;IAEpE,wFAAwF;IACjF,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAG7D,oEAAoE;IAC7D,qCAAqC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAGhE;;;OAGG;IACI,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAGjD;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB;;IAQjE,wFAAwF;IACjF,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAGrD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG/D;;;OAGG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAGzC;AAED;;;;;;GAMG;AACH,qBAAa,+BAAgC,SAAQ,oBAAoB;;IAIvE,OAAO,CAAC,eAAe;IAGvB,OAAO,CAAC,KAAK;IAGb,OAAO,CAAC,eAAe;IAGvB;;;;;;OAMG;IACI,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAGrD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG/D;;;OAGG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAMzC;AAED;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,oBAAoB;;IAEhE,wFAAwF;IACjF,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/D;;OAEG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAIzC;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,oBAAoB;;IAElE,wFAAwF;IACjF,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/D;;OAEG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAIzC"}
@@ -19,7 +19,7 @@
19
19
  * @internal
20
20
  */
21
21
  export class NormalizedTransition {
22
- /** Constructor initializes with 0..1 values .. call "setBearingCurvatureLengthCurvature" to apply real values */
22
+ /** Constructor initializes with 0..1 values. Call "setBearingCurvatureLengthCurvature" to apply real values. */
23
23
  constructor() { }
24
24
  static _clothoidEvaluator;
25
25
  static _biquadraticEvaluator;
@@ -60,10 +60,15 @@ export class NormalizedTransition {
60
60
  export class NormalizedClothoidTransition extends NormalizedTransition {
61
61
  constructor() { super(); }
62
62
  /** At fractional position on the x axis, return the (normalized) curvature fraction. */
63
- fractionToCurvatureFraction(fractionX) { return fractionX; }
64
- /** Return the derivative of the (normalized) curvature fraction */
65
- fractionToCurvatureFractionDerivative(_u) { return 1.0; }
66
- /** Return the integrated area under the curve.
63
+ fractionToCurvatureFraction(fractionX) {
64
+ return fractionX;
65
+ }
66
+ /** Return the derivative of the (normalized) curvature fraction. */
67
+ fractionToCurvatureFractionDerivative(_u) {
68
+ return 1.0;
69
+ }
70
+ /**
71
+ * Return the integrated area under the curve.
67
72
  * * This fraction is the angular change fraction.
68
73
  */
69
74
  fractionToArea(fractionX) {
@@ -72,24 +77,27 @@ export class NormalizedClothoidTransition extends NormalizedTransition {
72
77
  }
73
78
  /**
74
79
  * Transition functions for bloss spiral.
75
- * * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1
80
+ * * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1.
76
81
  * @internal
77
82
  */
78
83
  export class NormalizedBlossTransition extends NormalizedTransition {
79
84
  // bloss curve is (3 - 2x) x ^2 = 3 x^2 - 2 x^3
80
- // derivative 6x (1-x)
81
- // 2nd derivative 6 - 12 x
82
- // derivatives zero at 0,1
83
- // inflection zero at 0.5
84
- // integral is x^3 - x^4 / 2 = x^3 ( 1-x/2)
85
+ // derivative 6x (1-x)
86
+ // 2nd derivative 6 - 12 x
87
+ // derivatives zero at 0,1
88
+ // inflection zero at 0.5
89
+ // integral is x^3 - x^4 / 2 = x^3 ( 1-x/2)
85
90
  constructor() { super(); }
86
91
  /** At fractional position on the x axis, return the (normalized) curvature fraction. */
87
- fractionToCurvatureFraction(u) { return u * u * (3 - 2 * u); }
88
- /** Return the derivative of the (normalized) curvature fraction */
92
+ fractionToCurvatureFraction(u) {
93
+ return u * u * (3 - 2 * u);
94
+ }
95
+ /** Return the derivative of the (normalized) curvature fraction. */
89
96
  fractionToCurvatureFractionDerivative(u) {
90
97
  return 6.0 * u * (1.0 - u);
91
98
  }
92
- /** Return the integrated area under the curve.
99
+ /**
100
+ * Return the integrated area under the curve.
93
101
  * * This fraction is the angular change fraction.
94
102
  */
95
103
  fractionToArea(u) {
@@ -97,31 +105,41 @@ export class NormalizedBlossTransition extends NormalizedTransition {
97
105
  }
98
106
  }
99
107
  /**
100
- * Transition functions for biquadratic transition
108
+ * Transition functions for biquadratic transition.
101
109
  * * Curvature is a pair of joining quadratics.
102
- * * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin
103
- * * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1
110
+ * * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin.
111
+ * * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1.
104
112
  * @internal
105
113
  */
106
114
  export class NormalizedBiQuadraticTransition extends NormalizedTransition {
107
- constructor() { super(); }
108
- integratedBasis(u) { return u * u * u * (2.0 / 3.0); }
109
- basis(u) { return 2 * u * u; }
110
- basisDerivative(u) { return 4 * u; }
111
- /** At fractional position on the x axis, return the (normalized) curvature fraction.
112
- * * * For [u <= 0.5, u >= 0.5]
113
- * * f(u) = [2 u^2, 1 - 2 (1-u)^2]
114
- * * f'(u) = [4 u, 4 (1-u)]
115
- * * If(u) = [2 u^3 / 3, 0.5 (1 -u )^3/3]
115
+ constructor() {
116
+ super();
117
+ }
118
+ integratedBasis(u) {
119
+ return u * u * u * (2.0 / 3.0);
120
+ }
121
+ basis(u) {
122
+ return 2 * u * u;
123
+ }
124
+ basisDerivative(u) {
125
+ return 4 * u;
126
+ }
127
+ /**
128
+ * At fractional position on the x axis, return the (normalized) curvature fraction.
129
+ * * For [u <= 0.5, u >= 0.5]
130
+ * * f(u) = [2 u^2, 1 - 2 (1-u)^2]
131
+ * * f'(u) = [4 u, 4 (1-u)]
132
+ * * If(u) = [2 u^3 / 3, 0.5 (1 -u )^3/3]
116
133
  */
117
134
  fractionToCurvatureFraction(u) {
118
135
  return u <= 0.5 ? this.basis(u) : 1.0 - this.basis(1.0 - u);
119
136
  }
120
- /** Return the derivative of the (normalized) curvature fraction */
137
+ /** Return the derivative of the (normalized) curvature fraction. */
121
138
  fractionToCurvatureFractionDerivative(u) {
122
139
  return u < 0.5 ? this.basisDerivative(u) : this.basisDerivative(1 - u);
123
140
  }
124
- /** Return the integrated area under the curve.
141
+ /**
142
+ * Return the integrated area under the curve.
125
143
  * * This fraction is the angular change fraction.
126
144
  */
127
145
  fractionToArea(u) {
@@ -132,10 +150,10 @@ export class NormalizedBiQuadraticTransition extends NormalizedTransition {
132
150
  }
133
151
  }
134
152
  /**
135
- * Transition functions for sine transition
153
+ * Transition functions for sine transition.
136
154
  * * curvature variation is the sum of
137
- * * straight line from (0,0) to (1,1), like clothoid
138
- * * additional full period of a sine wave, producing 0 slope at both ends
155
+ * * straight line from (0,0) to (1,1), like clothoid.
156
+ * * additional full period of a sine wave, producing 0 slope at both ends.
139
157
  * @internal
140
158
  */
141
159
  export class NormalizedSineTransition extends NormalizedTransition {
@@ -145,7 +163,7 @@ export class NormalizedSineTransition extends NormalizedTransition {
145
163
  const a = 2.0 * Math.PI;
146
164
  return u - Math.sin(u * a) / a;
147
165
  }
148
- /** Return the derivative of the (normalized) curvature fraction */
166
+ /** Return the derivative of the (normalized) curvature fraction. */
149
167
  fractionToCurvatureFractionDerivative(u) {
150
168
  const a = 2.0 * Math.PI;
151
169
  return 1 - Math.cos(u * a);
@@ -159,8 +177,8 @@ export class NormalizedSineTransition extends NormalizedTransition {
159
177
  }
160
178
  }
161
179
  /**
162
- * Transition functions for cosine
163
- * * curvature variation is a half period of a cosine
180
+ * Transition functions for cosine.
181
+ * * curvature variation is a half period of a cosine.
164
182
  * @internal
165
183
  */
166
184
  export class NormalizedCosineTransition extends NormalizedTransition {
@@ -170,7 +188,7 @@ export class NormalizedCosineTransition extends NormalizedTransition {
170
188
  const a = Math.PI;
171
189
  return 0.5 * (1 - Math.cos(u * a));
172
190
  }
173
- /** Return the derivative of the (normalized) curvature fraction */
191
+ /** Return the derivative of the (normalized) curvature fraction. */
174
192
  fractionToCurvatureFractionDerivative(u) {
175
193
  const a = Math.PI;
176
194
  return 0.5 * a * Math.sin(u * a);
@@ -1 +1 @@
1
- {"version":3,"file":"NormalizedTransition.js","sourceRoot":"","sources":["../../../../src/curve/spiral/NormalizedTransition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n/**\n * NormalizedTransition is the (abstract) base class for clothoid, bloss, biquadratic, sine, and cosine transition functions.\n * * Each function maps fractional progress to a curvature value.\n * * f(0) === 0\n * * f(1) === 1\n * * f(u) === 1 - f (1-u)\n * * Each implementation provides:\n * * fractionToCurvature -- the f(u) function described above\n * * fractionToCurvatureDerivative -- df(u)/du\n * * fractionToArea -- integral of the area under f(u) from 0 to u.\n * * the symmetry condition ensures that the integral from 0 to 1 is 1/2\n * @internal\n */\nexport abstract class NormalizedTransition {\n /** Constructor initializes with 0..1 values .. call \"setBearingCurvatureLengthCurvature\" to apply real values */\n constructor() { }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public abstract fractionToCurvatureFraction(fractionX: number): number;\n /** Return the derivative of the (normalized) curvature fraction */\n public abstract fractionToCurvatureFractionDerivative(fractionX: number): number;\n /** Return the integrated area under the curve\n * * This is equal to the accumulated angle change.\n */\n public abstract fractionToArea(fractionX: number): number;\n private static _clothoidEvaluator?: NormalizedClothoidTransition;\n private static _biquadraticEvaluator?: NormalizedBiQuadraticTransition;\n private static _blossEvaluator?: NormalizedBlossTransition;\n private static _sineEvaluator?: NormalizedSineTransition;\n private static _cosineEvaluator?: NormalizedCosineTransition;\n\n /**\n * Return a standard evaluator identified by string as:\n * * clothoid\n * * bloss\n * * biquadratic\n * * sine\n * * cosine\n * Each of these types\n * * is instantiated (only once) as a single static object within the NormalizedTransition class.\n * * has no instance data or mutator methods.\n * @param name string name of the transition.\n */\n public static findEvaluator(name: string): NormalizedTransition | undefined {\n if (name === \"clothoid\")\n return this._clothoidEvaluator ? this._clothoidEvaluator : (this._clothoidEvaluator = new NormalizedClothoidTransition());\n if (name === \"bloss\")\n return this._blossEvaluator ? this._blossEvaluator : (this._blossEvaluator = new NormalizedBlossTransition());\n if (name === \"biquadratic\")\n return this._biquadraticEvaluator ? this._biquadraticEvaluator : (this._biquadraticEvaluator = new NormalizedBiQuadraticTransition());\n if (name === \"sine\")\n return this._sineEvaluator ? this._sineEvaluator : (this._sineEvaluator = new NormalizedSineTransition());\n if (name === \"cosine\")\n return this._cosineEvaluator ? this._cosineEvaluator : (this._cosineEvaluator = new NormalizedCosineTransition());\n return undefined;\n }\n}\n/**\n * Transition functions for clothoid spiral.\n * * curvature variation is linear from (0,0) to (1,1)\n * @internal\n */\nexport class NormalizedClothoidTransition extends NormalizedTransition {\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(fractionX: number): number { return fractionX; }\n /** Return the derivative of the (normalized) curvature fraction */\n public fractionToCurvatureFractionDerivative(_u: number): number { return 1.0; }\n /** Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(fractionX: number): number {\n return fractionX * fractionX * 0.5;\n }\n}\n\n/**\n * Transition functions for bloss spiral.\n * * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1\n * @internal\n */\nexport class NormalizedBlossTransition extends NormalizedTransition {\n // bloss curve is (3 - 2x) x ^2 = 3 x^2 - 2 x^3\n // derivative 6x (1-x)\n // 2nd derivative 6 - 12 x\n // derivatives zero at 0,1\n // inflection zero at 0.5\n // integral is x^3 - x^4 / 2 = x^3 ( 1-x/2)\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(u: number): number { return u * u * (3 - 2 * u); }\n /** Return the derivative of the (normalized) curvature fraction */\n public fractionToCurvatureFractionDerivative(u: number): number {\n return 6.0 * u * (1.0 - u);\n }\n /** Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n return u * u * u * (1 - 0.5 * u);\n }\n}\n\n/**\n * Transition functions for biquadratic transition\n * * Curvature is a pair of joining quadratics.\n * * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin\n * * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1\n * @internal\n */\nexport class NormalizedBiQuadraticTransition extends NormalizedTransition {\n constructor() { super(); }\n private integratedBasis(u: number): number { return u * u * u * (2.0 / 3.0); }\n private basis(u: number): number { return 2 * u * u; }\n private basisDerivative(u: number): number { return 4 * u; }\n /** At fractional position on the x axis, return the (normalized) curvature fraction.\n * * * For [u <= 0.5, u >= 0.5]\n * * f(u) = [2 u^2, 1 - 2 (1-u)^2]\n * * f'(u) = [4 u, 4 (1-u)]\n * * If(u) = [2 u^3 / 3, 0.5 (1 -u )^3/3]\n */\n public fractionToCurvatureFraction(u: number): number {\n return u <= 0.5 ? this.basis(u) : 1.0 - this.basis(1.0 - u);\n }\n /** Return the derivative of the (normalized) curvature fraction */\n public fractionToCurvatureFractionDerivative(u: number): number {\n return u < 0.5 ? this.basisDerivative(u) : this.basisDerivative(1 - u);\n }\n /** Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n if (u <= 0.5)\n return this.integratedBasis(u);\n const v = 1 - u;\n return 0.5 - v + this.integratedBasis(v);\n }\n}\n\n/**\n * Transition functions for sine transition\n * * curvature variation is the sum of\n * * straight line from (0,0) to (1,1), like clothoid\n * * additional full period of a sine wave, producing 0 slope at both ends\n * @internal\n */\nexport class NormalizedSineTransition extends NormalizedTransition {\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(u: number): number {\n const a = 2.0 * Math.PI;\n return u - Math.sin(u * a) / a;\n }\n /** Return the derivative of the (normalized) curvature fraction */\n public fractionToCurvatureFractionDerivative(u: number): number {\n const a = 2.0 * Math.PI;\n return 1 - Math.cos(u * a);\n }\n /** Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n const a = 2.0 * Math.PI;\n return 0.5 * u * u + (Math.cos(u * a) - 1.0) / (a * a);\n }\n}\n/**\n * Transition functions for cosine\n * * curvature variation is a half period of a cosine\n * @internal\n */\nexport class NormalizedCosineTransition extends NormalizedTransition {\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(u: number): number {\n const a = Math.PI;\n return 0.5 * (1 - Math.cos(u * a));\n }\n /** Return the derivative of the (normalized) curvature fraction */\n public fractionToCurvatureFractionDerivative(u: number): number {\n const a = Math.PI;\n return 0.5 * a * Math.sin(u * a);\n }\n /** Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n const a = Math.PI;\n return 0.5 * u - 0.5 * Math.sin(u * a) / a;\n }\n}\n"]}
1
+ {"version":3,"file":"NormalizedTransition.js","sourceRoot":"","sources":["../../../../src/curve/spiral/NormalizedTransition.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,oBAAoB;IACxC,gHAAgH;IAChH,gBAAgB,CAAC;IAUT,MAAM,CAAC,kBAAkB,CAAgC;IACzD,MAAM,CAAC,qBAAqB,CAAmC;IAC/D,MAAM,CAAC,eAAe,CAA6B;IACnD,MAAM,CAAC,cAAc,CAA4B;IACjD,MAAM,CAAC,gBAAgB,CAA8B;IAC7D;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,aAAa,CAAC,IAAY;QACtC,IAAI,IAAI,KAAK,UAAU;YACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,4BAA4B,EAAE,CAAC,CAAC;QAC5H,IAAI,IAAI,KAAK,OAAO;YAClB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,yBAAyB,EAAE,CAAC,CAAC;QAChH,IAAI,IAAI,KAAK,aAAa;YACxB,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,GAAG,IAAI,+BAA+B,EAAE,CAAC,CAAC;QACxI,IAAI,IAAI,KAAK,MAAM;YACjB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,wBAAwB,EAAE,CAAC,CAAC;QAC5G,IAAI,IAAI,KAAK,QAAQ;YACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAA0B,EAAE,CAAC,CAAC;QACpH,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,4BAA6B,SAAQ,oBAAoB;IACpE,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1B,wFAAwF;IACjF,2BAA2B,CAAC,SAAiB;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,oEAAoE;IAC7D,qCAAqC,CAAC,EAAU;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;IACD;;;OAGG;IACI,cAAc,CAAC,SAAiB;QACrC,OAAO,SAAS,GAAG,SAAS,GAAG,GAAG,CAAC;IACrC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,oBAAoB;IACjE,+CAA+C;IAC/C,sBAAsB;IACtB,0BAA0B;IAC1B,0BAA0B;IAC1B,yBAAyB;IACzB,6CAA6C;IAC7C,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1B,wFAAwF;IACjF,2BAA2B,CAAC,CAAS;QAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAS;QACpD,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACI,cAAc,CAAC,CAAS;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,+BAAgC,SAAQ,oBAAoB;IACvE;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IACO,eAAe,CAAC,CAAS;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACjC,CAAC;IACO,KAAK,CAAC,CAAS;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACO,eAAe,CAAC,CAAS;QAC/B,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD;;;;;;OAMG;IACI,2BAA2B,CAAC,CAAS;QAC1C,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAS;QACpD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;IACD;;;OAGG;IACI,cAAc,CAAC,CAAS;QAC7B,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAChE,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1B,wFAAwF;IACjF,2BAA2B,CAAC,CAAS;QAC1C,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAS;QACpD,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD;;OAEG;IACI,cAAc,CAAC,CAAS;QAC7B,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,0BAA2B,SAAQ,oBAAoB;IAClE,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1B,wFAAwF;IACjF,2BAA2B,CAAC,CAAS;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,oEAAoE;IAC7D,qCAAqC,CAAC,CAAS;QACpD,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IACD;;OAEG;IACI,cAAc,CAAC,CAAS;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\n/**\n * NormalizedTransition is the (abstract) base class for clothoid, bloss, biquadratic, sine, and cosine transition functions.\n * * Each function maps fractional progress to a curvature value.\n * * f(0) === 0\n * * f(1) === 1\n * * f(u) === 1 - f (1-u)\n * * Each implementation provides:\n * * fractionToCurvature -- the f(u) function described above\n * * fractionToCurvatureDerivative -- df(u)/du\n * * fractionToArea -- integral of the area under f(u) from 0 to u.\n * * the symmetry condition ensures that the integral from 0 to 1 is 1/2\n * @internal\n */\nexport abstract class NormalizedTransition {\n /** Constructor initializes with 0..1 values. Call \"setBearingCurvatureLengthCurvature\" to apply real values. */\n constructor() { }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public abstract fractionToCurvatureFraction(fractionX: number): number;\n /** Return the derivative of the (normalized) curvature fraction */\n public abstract fractionToCurvatureFractionDerivative(fractionX: number): number;\n /**\n * Return the integrated area under the curve\n * * This is equal to the accumulated angle change.\n */\n public abstract fractionToArea(fractionX: number): number;\n private static _clothoidEvaluator?: NormalizedClothoidTransition;\n private static _biquadraticEvaluator?: NormalizedBiQuadraticTransition;\n private static _blossEvaluator?: NormalizedBlossTransition;\n private static _sineEvaluator?: NormalizedSineTransition;\n private static _cosineEvaluator?: NormalizedCosineTransition;\n /**\n * Return a standard evaluator identified by string as:\n * * clothoid\n * * bloss\n * * biquadratic\n * * sine\n * * cosine\n * Each of these types\n * * is instantiated (only once) as a single static object within the NormalizedTransition class.\n * * has no instance data or mutator methods.\n * @param name string name of the transition.\n */\n public static findEvaluator(name: string): NormalizedTransition | undefined {\n if (name === \"clothoid\")\n return this._clothoidEvaluator ? this._clothoidEvaluator : (this._clothoidEvaluator = new NormalizedClothoidTransition());\n if (name === \"bloss\")\n return this._blossEvaluator ? this._blossEvaluator : (this._blossEvaluator = new NormalizedBlossTransition());\n if (name === \"biquadratic\")\n return this._biquadraticEvaluator ? this._biquadraticEvaluator : (this._biquadraticEvaluator = new NormalizedBiQuadraticTransition());\n if (name === \"sine\")\n return this._sineEvaluator ? this._sineEvaluator : (this._sineEvaluator = new NormalizedSineTransition());\n if (name === \"cosine\")\n return this._cosineEvaluator ? this._cosineEvaluator : (this._cosineEvaluator = new NormalizedCosineTransition());\n return undefined;\n }\n}\n\n/**\n * Transition functions for clothoid spiral.\n * * curvature variation is linear from (0,0) to (1,1)\n * @internal\n */\nexport class NormalizedClothoidTransition extends NormalizedTransition {\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(fractionX: number): number {\n return fractionX;\n }\n /** Return the derivative of the (normalized) curvature fraction. */\n public fractionToCurvatureFractionDerivative(_u: number): number {\n return 1.0;\n }\n /**\n * Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(fractionX: number): number {\n return fractionX * fractionX * 0.5;\n }\n}\n\n/**\n * Transition functions for bloss spiral.\n * * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1.\n * @internal\n */\nexport class NormalizedBlossTransition extends NormalizedTransition {\n // bloss curve is (3 - 2x) x ^2 = 3 x^2 - 2 x^3\n // derivative 6x (1-x)\n // 2nd derivative 6 - 12 x\n // derivatives zero at 0,1\n // inflection zero at 0.5\n // integral is x^3 - x^4 / 2 = x^3 ( 1-x/2)\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(u: number): number {\n return u * u * (3 - 2 * u);\n }\n /** Return the derivative of the (normalized) curvature fraction. */\n public fractionToCurvatureFractionDerivative(u: number): number {\n return 6.0 * u * (1.0 - u);\n }\n /**\n * Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n return u * u * u * (1 - 0.5 * u);\n }\n}\n\n/**\n * Transition functions for biquadratic transition.\n * * Curvature is a pair of joining quadratics.\n * * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin.\n * * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1.\n * @internal\n */\nexport class NormalizedBiQuadraticTransition extends NormalizedTransition {\n constructor() {\n super();\n }\n private integratedBasis(u: number): number {\n return u * u * u * (2.0 / 3.0);\n }\n private basis(u: number): number {\n return 2 * u * u;\n }\n private basisDerivative(u: number): number {\n return 4 * u;\n }\n /**\n * At fractional position on the x axis, return the (normalized) curvature fraction.\n * * For [u <= 0.5, u >= 0.5]\n * * f(u) = [2 u^2, 1 - 2 (1-u)^2]\n * * f'(u) = [4 u, 4 (1-u)]\n * * If(u) = [2 u^3 / 3, 0.5 (1 -u )^3/3]\n */\n public fractionToCurvatureFraction(u: number): number {\n return u <= 0.5 ? this.basis(u) : 1.0 - this.basis(1.0 - u);\n }\n /** Return the derivative of the (normalized) curvature fraction. */\n public fractionToCurvatureFractionDerivative(u: number): number {\n return u < 0.5 ? this.basisDerivative(u) : this.basisDerivative(1 - u);\n }\n /**\n * Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n if (u <= 0.5)\n return this.integratedBasis(u);\n const v = 1 - u;\n return 0.5 - v + this.integratedBasis(v);\n }\n}\n\n/**\n * Transition functions for sine transition.\n * * curvature variation is the sum of\n * * straight line from (0,0) to (1,1), like clothoid.\n * * additional full period of a sine wave, producing 0 slope at both ends.\n * @internal\n */\nexport class NormalizedSineTransition extends NormalizedTransition {\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(u: number): number {\n const a = 2.0 * Math.PI;\n return u - Math.sin(u * a) / a;\n }\n /** Return the derivative of the (normalized) curvature fraction. */\n public fractionToCurvatureFractionDerivative(u: number): number {\n const a = 2.0 * Math.PI;\n return 1 - Math.cos(u * a);\n }\n /** Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n const a = 2.0 * Math.PI;\n return 0.5 * u * u + (Math.cos(u * a) - 1.0) / (a * a);\n }\n}\n\n/**\n * Transition functions for cosine.\n * * curvature variation is a half period of a cosine.\n * @internal\n */\nexport class NormalizedCosineTransition extends NormalizedTransition {\n constructor() { super(); }\n /** At fractional position on the x axis, return the (normalized) curvature fraction. */\n public fractionToCurvatureFraction(u: number): number {\n const a = Math.PI;\n return 0.5 * (1 - Math.cos(u * a));\n }\n /** Return the derivative of the (normalized) curvature fraction. */\n public fractionToCurvatureFractionDerivative(u: number): number {\n const a = Math.PI;\n return 0.5 * a * Math.sin(u * a);\n }\n /** Return the integrated area under the curve.\n * * This fraction is the angular change fraction.\n */\n public fractionToArea(u: number): number {\n const a = Math.PI;\n return 0.5 * u - 0.5 * Math.sin(u * a) / a;\n }\n}\n"]}
@@ -3,14 +3,9 @@ import { CubicEvaluator } from "./CubicEvaluator";
3
3
  * Polish Cubic.
4
4
  * * Construction takes nominal length and end radius.
5
5
  * curve is is y= m*x^3 with
6
- * * x any point on the x axis
7
- * * m is (1/6RL)
8
- * * Lx = x length is along the axis, determined by inversion of a distance series at nominal length
9
- * *
10
- * @param localToWorld
11
- * @param nominalL1
12
- * @param nominalR1
13
- * @param activeInterval
6
+ * * x any point on the x axis.
7
+ * * m is (1/6RL).
8
+ * * Lx = x length is along the axis, determined by inversion of a distance series at nominal length.
14
9
  * @internal
15
10
  */
16
11
  export declare class PolishCubicEvaluator extends CubicEvaluator {
@@ -22,25 +17,25 @@ export declare class PolishCubicEvaluator extends CubicEvaluator {
22
17
  static computeCubicM(length1: number, radius1: number): number;
23
18
  static create(length1: number, radius1: number): PolishCubicEvaluator | undefined;
24
19
  scaleInPlace(scaleFactor: number): void;
25
- /** return a deep copy of the evaluator */
20
+ /** Return a deep copy of the evaluator. */
26
21
  clone(): PolishCubicEvaluator;
27
- /** Member by member matchup ... */
22
+ /** Member by member matchup. */
28
23
  isAlmostEqual(other: any): boolean;
29
- /** Compute the coefficient of x^4 in the x-to-distance series expansion */
24
+ /** Compute the coefficient of x^4 in the x-to-distance series expansion. */
30
25
  static computeX4SeriesCoefficient(length1: number, radius1: number): number;
31
26
  /**
32
27
  * Evaluate a series approximation of distance along the true curve.
33
- * @param x distance along x axis
34
- * @param radius1 nominal end radius
35
- * @param length1 nominal length along curve
28
+ * @param x distance along x axis.
29
+ * @param radius1 nominal end radius.
30
+ * @param length1 nominal length along curve.
36
31
  * @returns
37
32
  */
38
33
  static xToApproximateDistance(x: number, radius1: number, length1: number): number;
39
34
  /**
40
35
  * Evaluate the derivative of the x-to-distance series.
41
- * @param x distance along x axis
42
- * @param radius1 nominal end radius
43
- * @param length1 nominal length along curve
36
+ * @param x distance along x axis.
37
+ * @param radius1 nominal end radius.
38
+ * @param length1 nominal length along curve.
44
39
  * @returns
45
40
  */
46
41
  static xToApproximateDistanceDerivative(x: number, radius1: number, length1: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"PolishCubicSpiralEvaluator.d.ts","sourceRoot":"","sources":["../../../../src/curve/spiral/PolishCubicSpiralEvaluator.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAE9B,uEAAuE;IACvE,OAAO;IAMP,wCAAwC;WAC1B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;WAIvD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAUxE,YAAY,CAAC,WAAW,EAAE,MAAM;IAKhD,0CAA0C;IACnC,KAAK,IAAI,oBAAoB;IACpC,mCAAmC;IAC5B,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAQzC,2EAA2E;WAC7D,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAGlF;;;;;;OAMG;WACW,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAUzF;;;;;;OAMG;WACW,gCAAgC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAiBnG,kDAAkD;WACpC,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAM3G"}
1
+ {"version":3,"file":"PolishCubicSpiralEvaluator.d.ts","sourceRoot":"","sources":["../../../../src/curve/spiral/PolishCubicSpiralEvaluator.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,OAAO;IAKP,wCAAwC;WAC1B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;WAGvD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IASxE,YAAY,CAAC,WAAW,EAAE,MAAM;IAKhD,2CAA2C;IACpC,KAAK,IAAI,oBAAoB;IAGpC,gCAAgC;IACzB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAOzC,4EAA4E;WAC9D,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAGlF;;;;;;OAMG;WACW,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IASzF;;;;;;OAMG;WACW,gCAAgC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAgBnG,kDAAkD;WACpC,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAM3G"}
@@ -12,14 +12,9 @@ import { CubicEvaluator } from "./CubicEvaluator";
12
12
  * Polish Cubic.
13
13
  * * Construction takes nominal length and end radius.
14
14
  * curve is is y= m*x^3 with
15
- * * x any point on the x axis
16
- * * m is (1/6RL)
17
- * * Lx = x length is along the axis, determined by inversion of a distance series at nominal length
18
- * *
19
- * @param localToWorld
20
- * @param nominalL1
21
- * @param nominalR1
22
- * @param activeInterval
15
+ * * x any point on the x axis.
16
+ * * m is (1/6RL).
17
+ * * Lx = x length is along the axis, determined by inversion of a distance series at nominal length.
23
18
  * @internal
24
19
  */
25
20
  export class PolishCubicEvaluator extends CubicEvaluator {
@@ -49,9 +44,11 @@ export class PolishCubicEvaluator extends CubicEvaluator {
49
44
  this.nominalRadius1 *= scaleFactor;
50
45
  super.scaleInPlace(scaleFactor);
51
46
  }
52
- /** return a deep copy of the evaluator */
53
- clone() { return new PolishCubicEvaluator(this.nominalLength1, this.nominalRadius1, this.axisLength, this.cubicM); }
54
- /** Member by member matchup ... */
47
+ /** Return a deep copy of the evaluator. */
48
+ clone() {
49
+ return new PolishCubicEvaluator(this.nominalLength1, this.nominalRadius1, this.axisLength, this.cubicM);
50
+ }
51
+ /** Member by member matchup. */
55
52
  isAlmostEqual(other) {
56
53
  if (other instanceof PolishCubicEvaluator) {
57
54
  return Geometry.isSameCoordinate(this.nominalLength1, other.nominalLength1)
@@ -59,15 +56,15 @@ export class PolishCubicEvaluator extends CubicEvaluator {
59
56
  }
60
57
  return false;
61
58
  }
62
- /** Compute the coefficient of x^4 in the x-to-distance series expansion */
59
+ /** Compute the coefficient of x^4 in the x-to-distance series expansion. */
63
60
  static computeX4SeriesCoefficient(length1, radius1) {
64
61
  return 1.0 / (4.0 * length1 * length1 * radius1 * radius1);
65
62
  }
66
63
  /**
67
64
  * Evaluate a series approximation of distance along the true curve.
68
- * @param x distance along x axis
69
- * @param radius1 nominal end radius
70
- * @param length1 nominal length along curve
65
+ * @param x distance along x axis.
66
+ * @param radius1 nominal end radius.
67
+ * @param length1 nominal length along curve.
71
68
  * @returns
72
69
  */
73
70
  static xToApproximateDistance(x, radius1, length1) {
@@ -81,9 +78,9 @@ export class PolishCubicEvaluator extends CubicEvaluator {
81
78
  }
82
79
  /**
83
80
  * Evaluate the derivative of the x-to-distance series.
84
- * @param x distance along x axis
85
- * @param radius1 nominal end radius
86
- * @param length1 nominal length along curve
81
+ * @param x distance along x axis.
82
+ * @param radius1 nominal end radius.
83
+ * @param length1 nominal length along curve.
87
84
  * @returns
88
85
  */
89
86
  static xToApproximateDistanceDerivative(x, radius1, length1) {
@@ -92,13 +89,13 @@ export class PolishCubicEvaluator extends CubicEvaluator {
92
89
  const ax2 = a4 * x * x;
93
90
  const ax3 = ax2 * x;
94
91
  const ax4 = ax3 * x;
95
- // derivative notes ..
92
+ // derivative notes:
96
93
  // take away leading x -- this reduces each power by 1
97
94
  // multiply each coefficient by its original power:
98
- // 0.1==>0.5
99
- // 1/72==> 9/72 = 1/8
100
- // 1/208==>13/208=1/16
101
- // 1/2176==>17/2176= 1/128
95
+ // 0.1 ==> 0.5
96
+ // 1/72 ==> 9/72 = 1/8
97
+ // 1/208 ==> 13/208 = 1/16
98
+ // 1/2176 ==> 17/2176 = 1/128
102
99
  const ds = (1.0 + ax4 * (0.5 + ax4 * (-1.0 / 8.0 + ax4 * (1.0 / 16.0 - 5.0 * ax4 / 128.0))));
103
100
  return ds;
104
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PolishCubicSpiralEvaluator.js","sourceRoot":"","sources":["../../../../src/curve/spiral/PolishCubicSpiralEvaluator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\nimport { Geometry } from \"../../Geometry\";\nimport { SimpleNewton } from \"../../numerics/Newton\";\nimport { CubicEvaluator } from \"./CubicEvaluator\";\n/**\n * Polish Cubic.\n * * Construction takes nominal length and end radius.\n * curve is is y= m*x^3 with\n * * x any point on the x axis\n * * m is (1/6RL)\n * * Lx = x length is along the axis, determined by inversion of a distance series at nominal length\n * *\n * @param localToWorld\n * @param nominalL1\n * @param nominalR1\n * @param activeInterval\n * @internal\n */\nexport class PolishCubicEvaluator extends CubicEvaluator {\n public nominalLength1: number;\n public nominalRadius1: number;\n\n /** Constructor is private. Caller responsible for cubicM validity. */\n private constructor(length1: number, radius1: number, axisLength: number, cubicM: number) {\n super(axisLength, cubicM);\n this.nominalLength1 = length1;\n this.nominalRadius1 = radius1;\n }\n\n /** Compute the czech cubic constant. */\n public static computeCubicM(length1: number, radius1: number): number {\n return 1.0 / (6.0 * length1 * radius1);\n }\n\n public static create(length1: number, radius1: number): PolishCubicEvaluator | undefined {\n const m = this.computeCubicM(length1, radius1);\n if (m === undefined)\n return undefined;\n const xMax = PolishCubicEvaluator.approximateDistanceAlongToX(length1, radius1, length1);\n if (xMax === undefined)\n return undefined;\n return new PolishCubicEvaluator(length1, radius1, xMax, m);\n }\n\n public override scaleInPlace(scaleFactor: number) {\n this.nominalLength1 *= scaleFactor;\n this.nominalRadius1 *= scaleFactor;\n super.scaleInPlace(scaleFactor);\n }\n /** return a deep copy of the evaluator */\n public clone(): PolishCubicEvaluator { return new PolishCubicEvaluator(this.nominalLength1, this.nominalRadius1, this.axisLength, this.cubicM); }\n /** Member by member matchup ... */\n public isAlmostEqual(other: any): boolean {\n if (other instanceof PolishCubicEvaluator) {\n return Geometry.isSameCoordinate(this.nominalLength1, other.nominalLength1)\n && Geometry.isSameCoordinate(this.nominalRadius1, other.nominalRadius1);\n }\n return false;\n }\n\n /** Compute the coefficient of x^4 in the x-to-distance series expansion */\n public static computeX4SeriesCoefficient(length1: number, radius1: number): number {\n return 1.0 / (4.0 * length1 * length1 * radius1 * radius1);\n }\n /**\n * Evaluate a series approximation of distance along the true curve.\n * @param x distance along x axis\n * @param radius1 nominal end radius\n * @param length1 nominal length along curve\n * @returns\n */\n public static xToApproximateDistance(x: number, radius1: number, length1: number): number {\n // C31 * ( 1 + 1 / 10 * E31 - 1 / 72 * E31^2 + 1 / 208 * E31^3 - 5 / 2176 * E31^4 )\n const a4 = this.computeX4SeriesCoefficient(length1, radius1);\n const ax2 = a4 * x * x;\n const ax3 = ax2 * x;\n const ax4 = ax3 * x;\n const s0 = x * (1.0 + ax4 * (0.1 + ax4 * (-1.0 / 72.0 + ax4 * (1.0 / 208.0 - 5.0 * ax4 / 2176.0))));\n return s0;\n }\n\n /**\n * Evaluate the derivative of the x-to-distance series.\n * @param x distance along x axis\n * @param radius1 nominal end radius\n * @param length1 nominal length along curve\n * @returns\n */\n public static xToApproximateDistanceDerivative(x: number, radius1: number, length1: number): number {\n // C31 * ( 1 + 1 / 10 * E31 - 1 / 72 * E31^2 + 1 / 208 * E31^3 - 5 / 2176 * E31^4 )\n const a4 = this.computeX4SeriesCoefficient(length1, radius1);\n const ax2 = a4 * x * x;\n const ax3 = ax2 * x;\n const ax4 = ax3 * x;\n // derivative notes ..\n // take away leading x -- this reduces each power by 1\n // multiply each coefficient by its original power:\n // 0.1==>0.5\n // 1/72==> 9/72 = 1/8\n // 1/208==>13/208=1/16\n // 1/2176==>17/2176= 1/128\n const ds = (1.0 + ax4 * (0.5 + ax4 * (-1.0 / 8.0 + ax4 * (1.0 / 16.0 - 5.0 * ax4 / 128.0))));\n return ds;\n }\n\n /** Invert the xToApproximateDistance function. */\n public static approximateDistanceAlongToX(s: number, radius1: number, length1: number): number | undefined {\n const root = SimpleNewton.runNewton1D(s,\n (x: number) => (this.xToApproximateDistance(x, radius1, length1) - s),\n (x: number) => this.xToApproximateDistanceDerivative(x, radius1, length1));\n return root;\n }\n}\n"]}
1
+ {"version":3,"file":"PolishCubicSpiralEvaluator.js","sourceRoot":"","sources":["../../../../src/curve/spiral/PolishCubicSpiralEvaluator.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IAC/C,cAAc,CAAS;IACvB,cAAc,CAAS;IAC9B,uEAAuE;IACvE,YAAoB,OAAe,EAAE,OAAe,EAAE,UAAkB,EAAE,MAAc;QACtF,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IACD,wCAAwC;IACjC,MAAM,CAAC,aAAa,CAAC,OAAe,EAAE,OAAe;QAC1D,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IACzC,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,OAAe,EAAE,OAAe;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,SAAS;YACjB,OAAO,SAAS,CAAC;QACnB,MAAM,IAAI,GAAG,oBAAoB,CAAC,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACzF,IAAI,IAAI,KAAK,SAAS;YACpB,OAAO,SAAS,CAAC;QACnB,OAAO,IAAI,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IACe,YAAY,CAAC,WAAmB;QAC9C,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC;QACnC,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC;QACnC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IACD,2CAA2C;IACpC,KAAK;QACV,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1G,CAAC;IACD,gCAAgC;IACzB,aAAa,CAAC,KAAU;QAC7B,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAC1C,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC;mBACtE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,4EAA4E;IACrE,MAAM,CAAC,0BAA0B,CAAC,OAAe,EAAE,OAAe;QACvE,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,sBAAsB,CAAC,CAAS,EAAE,OAAe,EAAE,OAAe;QAC9E,mFAAmF;QACnF,MAAM,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,OAAO,EAAE,CAAC;IACZ,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,gCAAgC,CAAC,CAAS,EAAE,OAAe,EAAE,OAAe;QACxF,mFAAmF;QACnF,MAAM,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,oBAAoB;QACpB,sDAAsD;QACtD,mDAAmD;QACnD,cAAc;QACd,uBAAuB;QACvB,0BAA0B;QAC1B,6BAA6B;QAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,kDAAkD;IAC3C,MAAM,CAAC,2BAA2B,CAAC,CAAS,EAAE,OAAe,EAAE,OAAe;QACnF,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,EACrC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EACrE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\nimport { Geometry } from \"../../Geometry\";\nimport { SimpleNewton } from \"../../numerics/Newton\";\nimport { CubicEvaluator } from \"./CubicEvaluator\";\n\n/**\n * Polish Cubic.\n * * Construction takes nominal length and end radius.\n * curve is is y= m*x^3 with\n * * x any point on the x axis.\n * * m is (1/6RL).\n * * Lx = x length is along the axis, determined by inversion of a distance series at nominal length.\n * @internal\n */\nexport class PolishCubicEvaluator extends CubicEvaluator {\n public nominalLength1: number;\n public nominalRadius1: number;\n /** Constructor is private. Caller responsible for cubicM validity. */\n private constructor(length1: number, radius1: number, axisLength: number, cubicM: number) {\n super(axisLength, cubicM);\n this.nominalLength1 = length1;\n this.nominalRadius1 = radius1;\n }\n /** Compute the czech cubic constant. */\n public static computeCubicM(length1: number, radius1: number): number {\n return 1.0 / (6.0 * length1 * radius1);\n }\n public static create(length1: number, radius1: number): PolishCubicEvaluator | undefined {\n const m = this.computeCubicM(length1, radius1);\n if (m === undefined)\n return undefined;\n const xMax = PolishCubicEvaluator.approximateDistanceAlongToX(length1, radius1, length1);\n if (xMax === undefined)\n return undefined;\n return new PolishCubicEvaluator(length1, radius1, xMax, m);\n }\n public override scaleInPlace(scaleFactor: number) {\n this.nominalLength1 *= scaleFactor;\n this.nominalRadius1 *= scaleFactor;\n super.scaleInPlace(scaleFactor);\n }\n /** Return a deep copy of the evaluator. */\n public clone(): PolishCubicEvaluator {\n return new PolishCubicEvaluator(this.nominalLength1, this.nominalRadius1, this.axisLength, this.cubicM);\n }\n /** Member by member matchup. */\n public isAlmostEqual(other: any): boolean {\n if (other instanceof PolishCubicEvaluator) {\n return Geometry.isSameCoordinate(this.nominalLength1, other.nominalLength1)\n && Geometry.isSameCoordinate(this.nominalRadius1, other.nominalRadius1);\n }\n return false;\n }\n /** Compute the coefficient of x^4 in the x-to-distance series expansion. */\n public static computeX4SeriesCoefficient(length1: number, radius1: number): number {\n return 1.0 / (4.0 * length1 * length1 * radius1 * radius1);\n }\n /**\n * Evaluate a series approximation of distance along the true curve.\n * @param x distance along x axis.\n * @param radius1 nominal end radius.\n * @param length1 nominal length along curve.\n * @returns\n */\n public static xToApproximateDistance(x: number, radius1: number, length1: number): number {\n // C31 * ( 1 + 1 / 10 * E31 - 1 / 72 * E31^2 + 1 / 208 * E31^3 - 5 / 2176 * E31^4 )\n const a4 = this.computeX4SeriesCoefficient(length1, radius1);\n const ax2 = a4 * x * x;\n const ax3 = ax2 * x;\n const ax4 = ax3 * x;\n const s0 = x * (1.0 + ax4 * (0.1 + ax4 * (-1.0 / 72.0 + ax4 * (1.0 / 208.0 - 5.0 * ax4 / 2176.0))));\n return s0;\n }\n /**\n * Evaluate the derivative of the x-to-distance series.\n * @param x distance along x axis.\n * @param radius1 nominal end radius.\n * @param length1 nominal length along curve.\n * @returns\n */\n public static xToApproximateDistanceDerivative(x: number, radius1: number, length1: number): number {\n // C31 * ( 1 + 1 / 10 * E31 - 1 / 72 * E31^2 + 1 / 208 * E31^3 - 5 / 2176 * E31^4 )\n const a4 = this.computeX4SeriesCoefficient(length1, radius1);\n const ax2 = a4 * x * x;\n const ax3 = ax2 * x;\n const ax4 = ax3 * x;\n // derivative notes:\n // take away leading x -- this reduces each power by 1\n // multiply each coefficient by its original power:\n // 0.1 ==> 0.5\n // 1/72 ==> 9/72 = 1/8\n // 1/208 ==> 13/208 = 1/16\n // 1/2176 ==> 17/2176 = 1/128\n const ds = (1.0 + ax4 * (0.5 + ax4 * (-1.0 / 8.0 + ax4 * (1.0 / 16.0 - 5.0 * ax4 / 128.0))));\n return ds;\n }\n /** Invert the xToApproximateDistance function. */\n public static approximateDistanceAlongToX(s: number, radius1: number, length1: number): number | undefined {\n const root = SimpleNewton.runNewton1D(s,\n (x: number) => (this.xToApproximateDistance(x, radius1, length1) - s),\n (x: number) => this.xToApproximateDistanceDerivative(x, radius1, length1));\n return root;\n }\n}\n"]}