@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.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.d.ts +10 -13
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +23 -22
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.d.ts +5 -5
- package/lib/cjs/curve/spiral/ClothoidSeries.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js +28 -16
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.d.ts +7 -6
- package/lib/cjs/curve/spiral/CubicEvaluator.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js +29 -14
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.d.ts +30 -40
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +43 -49
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts +2 -2
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +17 -7
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +103 -95
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js +132 -106
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +70 -52
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +97 -65
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts +7 -11
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +10 -12
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.d.ts +29 -24
- package/lib/cjs/curve/spiral/NormalizedTransition.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js +53 -35
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.d.ts +12 -17
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +20 -23
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts +25 -23
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +34 -29
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +43 -33
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +56 -38
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.d.ts +27 -21
- package/lib/cjs/curve/spiral/XYCurveEvaluator.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js +23 -18
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.d.ts +10 -13
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.d.ts.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +23 -22
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.d.ts +5 -5
- package/lib/esm/curve/spiral/ClothoidSeries.d.ts.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js +28 -16
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.d.ts +7 -6
- package/lib/esm/curve/spiral/CubicEvaluator.d.ts.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js +29 -14
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.d.ts +30 -40
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.d.ts.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +43 -49
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts +2 -2
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +17 -7
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +103 -95
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js +132 -106
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +70 -52
- package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js +97 -65
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts +7 -11
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +10 -12
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.d.ts +29 -24
- package/lib/esm/curve/spiral/NormalizedTransition.d.ts.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js +53 -35
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.d.ts +12 -17
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.d.ts.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +20 -23
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts +25 -23
- package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js +34 -29
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +43 -33
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +56 -38
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.d.ts +27 -21
- package/lib/esm/curve/spiral/XYCurveEvaluator.d.ts.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js +23 -18
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- 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
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
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
|
-
/**
|
|
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;
|
|
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"}
|
|
@@ -22,7 +22,7 @@ exports.NormalizedCosineTransition = exports.NormalizedSineTransition = exports.
|
|
|
22
22
|
* @internal
|
|
23
23
|
*/
|
|
24
24
|
class NormalizedTransition {
|
|
25
|
-
/** Constructor initializes with 0..1 values
|
|
25
|
+
/** Constructor initializes with 0..1 values. Call "setBearingCurvatureLengthCurvature" to apply real values. */
|
|
26
26
|
constructor() { }
|
|
27
27
|
static _clothoidEvaluator;
|
|
28
28
|
static _biquadraticEvaluator;
|
|
@@ -64,10 +64,15 @@ exports.NormalizedTransition = NormalizedTransition;
|
|
|
64
64
|
class NormalizedClothoidTransition extends NormalizedTransition {
|
|
65
65
|
constructor() { super(); }
|
|
66
66
|
/** At fractional position on the x axis, return the (normalized) curvature fraction. */
|
|
67
|
-
fractionToCurvatureFraction(fractionX) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
/** Return the
|
|
67
|
+
fractionToCurvatureFraction(fractionX) {
|
|
68
|
+
return fractionX;
|
|
69
|
+
}
|
|
70
|
+
/** Return the derivative of the (normalized) curvature fraction. */
|
|
71
|
+
fractionToCurvatureFractionDerivative(_u) {
|
|
72
|
+
return 1.0;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Return the integrated area under the curve.
|
|
71
76
|
* * This fraction is the angular change fraction.
|
|
72
77
|
*/
|
|
73
78
|
fractionToArea(fractionX) {
|
|
@@ -77,24 +82,27 @@ class NormalizedClothoidTransition extends NormalizedTransition {
|
|
|
77
82
|
exports.NormalizedClothoidTransition = NormalizedClothoidTransition;
|
|
78
83
|
/**
|
|
79
84
|
* Transition functions for bloss spiral.
|
|
80
|
-
* * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1
|
|
85
|
+
* * curvature variation is cubic from (0,0) with slope 0 to (1,1) with slope 1.
|
|
81
86
|
* @internal
|
|
82
87
|
*/
|
|
83
88
|
class NormalizedBlossTransition extends NormalizedTransition {
|
|
84
89
|
// bloss curve is (3 - 2x) x ^2 = 3 x^2 - 2 x^3
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
+
// derivative 6x (1-x)
|
|
91
|
+
// 2nd derivative 6 - 12 x
|
|
92
|
+
// derivatives zero at 0,1
|
|
93
|
+
// inflection zero at 0.5
|
|
94
|
+
// integral is x^3 - x^4 / 2 = x^3 ( 1-x/2)
|
|
90
95
|
constructor() { super(); }
|
|
91
96
|
/** At fractional position on the x axis, return the (normalized) curvature fraction. */
|
|
92
|
-
fractionToCurvatureFraction(u) {
|
|
93
|
-
|
|
97
|
+
fractionToCurvatureFraction(u) {
|
|
98
|
+
return u * u * (3 - 2 * u);
|
|
99
|
+
}
|
|
100
|
+
/** Return the derivative of the (normalized) curvature fraction. */
|
|
94
101
|
fractionToCurvatureFractionDerivative(u) {
|
|
95
102
|
return 6.0 * u * (1.0 - u);
|
|
96
103
|
}
|
|
97
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Return the integrated area under the curve.
|
|
98
106
|
* * This fraction is the angular change fraction.
|
|
99
107
|
*/
|
|
100
108
|
fractionToArea(u) {
|
|
@@ -103,31 +111,41 @@ class NormalizedBlossTransition extends NormalizedTransition {
|
|
|
103
111
|
}
|
|
104
112
|
exports.NormalizedBlossTransition = NormalizedBlossTransition;
|
|
105
113
|
/**
|
|
106
|
-
* Transition functions for biquadratic transition
|
|
114
|
+
* Transition functions for biquadratic transition.
|
|
107
115
|
* * Curvature is a pair of joining quadratics.
|
|
108
|
-
* * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin
|
|
109
|
-
* * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1
|
|
116
|
+
* * In lower half of the interval, the quadratic is from (0,0) to (0.5, 0.5) with zero slope at origin.
|
|
117
|
+
* * In upper half of the interval, the quadratic is from (0.5,0.5) to (1,1) with zero slope at 1.
|
|
110
118
|
* @internal
|
|
111
119
|
*/
|
|
112
120
|
class NormalizedBiQuadraticTransition extends NormalizedTransition {
|
|
113
|
-
constructor() {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
constructor() {
|
|
122
|
+
super();
|
|
123
|
+
}
|
|
124
|
+
integratedBasis(u) {
|
|
125
|
+
return u * u * u * (2.0 / 3.0);
|
|
126
|
+
}
|
|
127
|
+
basis(u) {
|
|
128
|
+
return 2 * u * u;
|
|
129
|
+
}
|
|
130
|
+
basisDerivative(u) {
|
|
131
|
+
return 4 * u;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* At fractional position on the x axis, return the (normalized) curvature fraction.
|
|
135
|
+
* * For [u <= 0.5, u >= 0.5]
|
|
136
|
+
* * f(u) = [2 u^2, 1 - 2 (1-u)^2]
|
|
137
|
+
* * f'(u) = [4 u, 4 (1-u)]
|
|
138
|
+
* * If(u) = [2 u^3 / 3, 0.5 (1 -u )^3/3]
|
|
122
139
|
*/
|
|
123
140
|
fractionToCurvatureFraction(u) {
|
|
124
141
|
return u <= 0.5 ? this.basis(u) : 1.0 - this.basis(1.0 - u);
|
|
125
142
|
}
|
|
126
|
-
/** Return the derivative of the (normalized) curvature fraction */
|
|
143
|
+
/** Return the derivative of the (normalized) curvature fraction. */
|
|
127
144
|
fractionToCurvatureFractionDerivative(u) {
|
|
128
145
|
return u < 0.5 ? this.basisDerivative(u) : this.basisDerivative(1 - u);
|
|
129
146
|
}
|
|
130
|
-
/**
|
|
147
|
+
/**
|
|
148
|
+
* Return the integrated area under the curve.
|
|
131
149
|
* * This fraction is the angular change fraction.
|
|
132
150
|
*/
|
|
133
151
|
fractionToArea(u) {
|
|
@@ -139,10 +157,10 @@ class NormalizedBiQuadraticTransition extends NormalizedTransition {
|
|
|
139
157
|
}
|
|
140
158
|
exports.NormalizedBiQuadraticTransition = NormalizedBiQuadraticTransition;
|
|
141
159
|
/**
|
|
142
|
-
* Transition functions for sine transition
|
|
160
|
+
* Transition functions for sine transition.
|
|
143
161
|
* * curvature variation is the sum of
|
|
144
|
-
* * straight line from (0,0) to (1,1), like clothoid
|
|
145
|
-
* * additional full period of a sine wave, producing 0 slope at both ends
|
|
162
|
+
* * straight line from (0,0) to (1,1), like clothoid.
|
|
163
|
+
* * additional full period of a sine wave, producing 0 slope at both ends.
|
|
146
164
|
* @internal
|
|
147
165
|
*/
|
|
148
166
|
class NormalizedSineTransition extends NormalizedTransition {
|
|
@@ -152,7 +170,7 @@ class NormalizedSineTransition extends NormalizedTransition {
|
|
|
152
170
|
const a = 2.0 * Math.PI;
|
|
153
171
|
return u - Math.sin(u * a) / a;
|
|
154
172
|
}
|
|
155
|
-
/** Return the derivative of the (normalized) curvature fraction */
|
|
173
|
+
/** Return the derivative of the (normalized) curvature fraction. */
|
|
156
174
|
fractionToCurvatureFractionDerivative(u) {
|
|
157
175
|
const a = 2.0 * Math.PI;
|
|
158
176
|
return 1 - Math.cos(u * a);
|
|
@@ -167,8 +185,8 @@ class NormalizedSineTransition extends NormalizedTransition {
|
|
|
167
185
|
}
|
|
168
186
|
exports.NormalizedSineTransition = NormalizedSineTransition;
|
|
169
187
|
/**
|
|
170
|
-
* Transition functions for cosine
|
|
171
|
-
* * curvature variation is a half period of a cosine
|
|
188
|
+
* Transition functions for cosine.
|
|
189
|
+
* * curvature variation is a half period of a cosine.
|
|
172
190
|
* @internal
|
|
173
191
|
*/
|
|
174
192
|
class NormalizedCosineTransition extends NormalizedTransition {
|
|
@@ -178,7 +196,7 @@ class NormalizedCosineTransition extends NormalizedTransition {
|
|
|
178
196
|
const a = Math.PI;
|
|
179
197
|
return 0.5 * (1 - Math.cos(u * a));
|
|
180
198
|
}
|
|
181
|
-
/** Return the derivative of the (normalized) curvature fraction */
|
|
199
|
+
/** Return the derivative of the (normalized) curvature fraction. */
|
|
182
200
|
fractionToCurvatureFractionDerivative(u) {
|
|
183
201
|
const a = Math.PI;
|
|
184
202
|
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":"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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/**\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
|
-
/**
|
|
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;
|
|
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"}
|
|
@@ -15,14 +15,9 @@ const CubicEvaluator_1 = require("./CubicEvaluator");
|
|
|
15
15
|
* Polish Cubic.
|
|
16
16
|
* * Construction takes nominal length and end radius.
|
|
17
17
|
* curve is is y= m*x^3 with
|
|
18
|
-
* * x any point on the x axis
|
|
19
|
-
* * m is (1/6RL)
|
|
20
|
-
* * Lx = x length is along the axis, determined by inversion of a distance series at nominal length
|
|
21
|
-
* *
|
|
22
|
-
* @param localToWorld
|
|
23
|
-
* @param nominalL1
|
|
24
|
-
* @param nominalR1
|
|
25
|
-
* @param activeInterval
|
|
18
|
+
* * x any point on the x axis.
|
|
19
|
+
* * m is (1/6RL).
|
|
20
|
+
* * Lx = x length is along the axis, determined by inversion of a distance series at nominal length.
|
|
26
21
|
* @internal
|
|
27
22
|
*/
|
|
28
23
|
class PolishCubicEvaluator extends CubicEvaluator_1.CubicEvaluator {
|
|
@@ -52,9 +47,11 @@ class PolishCubicEvaluator extends CubicEvaluator_1.CubicEvaluator {
|
|
|
52
47
|
this.nominalRadius1 *= scaleFactor;
|
|
53
48
|
super.scaleInPlace(scaleFactor);
|
|
54
49
|
}
|
|
55
|
-
/**
|
|
56
|
-
clone() {
|
|
57
|
-
|
|
50
|
+
/** Return a deep copy of the evaluator. */
|
|
51
|
+
clone() {
|
|
52
|
+
return new PolishCubicEvaluator(this.nominalLength1, this.nominalRadius1, this.axisLength, this.cubicM);
|
|
53
|
+
}
|
|
54
|
+
/** Member by member matchup. */
|
|
58
55
|
isAlmostEqual(other) {
|
|
59
56
|
if (other instanceof PolishCubicEvaluator) {
|
|
60
57
|
return Geometry_1.Geometry.isSameCoordinate(this.nominalLength1, other.nominalLength1)
|
|
@@ -62,15 +59,15 @@ class PolishCubicEvaluator extends CubicEvaluator_1.CubicEvaluator {
|
|
|
62
59
|
}
|
|
63
60
|
return false;
|
|
64
61
|
}
|
|
65
|
-
/** Compute the coefficient of x^4 in the x-to-distance series expansion */
|
|
62
|
+
/** Compute the coefficient of x^4 in the x-to-distance series expansion. */
|
|
66
63
|
static computeX4SeriesCoefficient(length1, radius1) {
|
|
67
64
|
return 1.0 / (4.0 * length1 * length1 * radius1 * radius1);
|
|
68
65
|
}
|
|
69
66
|
/**
|
|
70
67
|
* Evaluate a series approximation of distance along the true curve.
|
|
71
|
-
* @param x distance along x axis
|
|
72
|
-
* @param radius1 nominal end radius
|
|
73
|
-
* @param length1 nominal length along curve
|
|
68
|
+
* @param x distance along x axis.
|
|
69
|
+
* @param radius1 nominal end radius.
|
|
70
|
+
* @param length1 nominal length along curve.
|
|
74
71
|
* @returns
|
|
75
72
|
*/
|
|
76
73
|
static xToApproximateDistance(x, radius1, length1) {
|
|
@@ -84,9 +81,9 @@ class PolishCubicEvaluator extends CubicEvaluator_1.CubicEvaluator {
|
|
|
84
81
|
}
|
|
85
82
|
/**
|
|
86
83
|
* Evaluate the derivative of the x-to-distance series.
|
|
87
|
-
* @param x distance along x axis
|
|
88
|
-
* @param radius1 nominal end radius
|
|
89
|
-
* @param length1 nominal length along curve
|
|
84
|
+
* @param x distance along x axis.
|
|
85
|
+
* @param radius1 nominal end radius.
|
|
86
|
+
* @param length1 nominal length along curve.
|
|
90
87
|
* @returns
|
|
91
88
|
*/
|
|
92
89
|
static xToApproximateDistanceDerivative(x, radius1, length1) {
|
|
@@ -95,13 +92,13 @@ class PolishCubicEvaluator extends CubicEvaluator_1.CubicEvaluator {
|
|
|
95
92
|
const ax2 = a4 * x * x;
|
|
96
93
|
const ax3 = ax2 * x;
|
|
97
94
|
const ax4 = ax3 * x;
|
|
98
|
-
// derivative notes
|
|
95
|
+
// derivative notes:
|
|
99
96
|
// take away leading x -- this reduces each power by 1
|
|
100
97
|
// multiply each coefficient by its original power:
|
|
101
|
-
//
|
|
102
|
-
// 1/72==>
|
|
103
|
-
// 1/208==>13/208=1/16
|
|
104
|
-
// 1/2176==>17/2176= 1/128
|
|
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
|
|
105
102
|
const ds = (1.0 + ax4 * (0.5 + ax4 * (-1.0 / 8.0 + ax4 * (1.0 / 16.0 - 5.0 * ax4 / 128.0))));
|
|
106
103
|
return ds;
|
|
107
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolishCubicSpiralEvaluator.js","sourceRoot":"","sources":["../../../../src/curve/spiral/PolishCubicSpiralEvaluator.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,6CAA0C;AAC1C,kDAAqD;AACrD,qDAAkD;
|
|
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/**\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"]}
|