@itwin/core-geometry 4.0.0-dev.55 → 4.0.0-dev.56

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 (97) hide show
  1. package/lib/cjs/Geometry.d.ts +5 -1
  2. package/lib/cjs/Geometry.d.ts.map +1 -1
  3. package/lib/cjs/Geometry.js +5 -1
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/geometry3d/Angle.d.ts +29 -34
  6. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  7. package/lib/cjs/geometry3d/Angle.js +31 -36
  8. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  9. package/lib/cjs/geometry3d/AngleSweep.d.ts +48 -43
  10. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  11. package/lib/cjs/geometry3d/AngleSweep.js +48 -43
  12. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  13. package/lib/cjs/geometry3d/Matrix3d.d.ts +5 -8
  14. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  15. package/lib/cjs/geometry3d/Matrix3d.js +5 -8
  16. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  17. package/lib/cjs/geometry3d/OrderedRotationAngles.d.ts +3 -3
  18. package/lib/cjs/geometry3d/OrderedRotationAngles.d.ts.map +1 -1
  19. package/lib/cjs/geometry3d/OrderedRotationAngles.js +3 -3
  20. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  21. package/lib/cjs/geometry3d/Point2dArrayCarrier.d.ts +8 -10
  22. package/lib/cjs/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
  23. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +8 -10
  24. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  25. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +37 -34
  26. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  27. package/lib/cjs/geometry3d/Point2dVector2d.js +38 -35
  28. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  29. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts +17 -21
  30. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  31. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +16 -20
  32. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  33. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +84 -67
  34. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  35. package/lib/cjs/geometry3d/Point3dVector3d.js +84 -67
  36. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  37. package/lib/cjs/geometry3d/Transform.d.ts +76 -66
  38. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  39. package/lib/cjs/geometry3d/Transform.js +88 -77
  40. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  41. package/lib/cjs/geometry3d/YawPitchRollAngles.d.ts +15 -16
  42. package/lib/cjs/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
  43. package/lib/cjs/geometry3d/YawPitchRollAngles.js +14 -15
  44. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  45. package/lib/cjs/serialization/GeometrySamples.d.ts +72 -58
  46. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  47. package/lib/cjs/serialization/GeometrySamples.js +132 -108
  48. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  49. package/lib/esm/Geometry.d.ts +5 -1
  50. package/lib/esm/Geometry.d.ts.map +1 -1
  51. package/lib/esm/Geometry.js +5 -1
  52. package/lib/esm/Geometry.js.map +1 -1
  53. package/lib/esm/geometry3d/Angle.d.ts +29 -34
  54. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  55. package/lib/esm/geometry3d/Angle.js +31 -36
  56. package/lib/esm/geometry3d/Angle.js.map +1 -1
  57. package/lib/esm/geometry3d/AngleSweep.d.ts +48 -43
  58. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  59. package/lib/esm/geometry3d/AngleSweep.js +48 -43
  60. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  61. package/lib/esm/geometry3d/Matrix3d.d.ts +5 -8
  62. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  63. package/lib/esm/geometry3d/Matrix3d.js +5 -8
  64. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  65. package/lib/esm/geometry3d/OrderedRotationAngles.d.ts +3 -3
  66. package/lib/esm/geometry3d/OrderedRotationAngles.d.ts.map +1 -1
  67. package/lib/esm/geometry3d/OrderedRotationAngles.js +3 -3
  68. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  69. package/lib/esm/geometry3d/Point2dArrayCarrier.d.ts +8 -10
  70. package/lib/esm/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
  71. package/lib/esm/geometry3d/Point2dArrayCarrier.js +8 -10
  72. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  73. package/lib/esm/geometry3d/Point2dVector2d.d.ts +37 -34
  74. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  75. package/lib/esm/geometry3d/Point2dVector2d.js +38 -35
  76. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  77. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts +17 -21
  78. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  79. package/lib/esm/geometry3d/Point3dArrayCarrier.js +16 -20
  80. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  81. package/lib/esm/geometry3d/Point3dVector3d.d.ts +84 -67
  82. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  83. package/lib/esm/geometry3d/Point3dVector3d.js +84 -67
  84. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  85. package/lib/esm/geometry3d/Transform.d.ts +76 -66
  86. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  87. package/lib/esm/geometry3d/Transform.js +88 -77
  88. package/lib/esm/geometry3d/Transform.js.map +1 -1
  89. package/lib/esm/geometry3d/YawPitchRollAngles.d.ts +15 -16
  90. package/lib/esm/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
  91. package/lib/esm/geometry3d/YawPitchRollAngles.js +14 -15
  92. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  93. package/lib/esm/serialization/GeometrySamples.d.ts +72 -58
  94. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  95. package/lib/esm/serialization/GeometrySamples.js +132 -108
  96. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  97. package/package.json +3 -3
@@ -9,10 +9,11 @@ exports.Vector2d = exports.Point2d = exports.XY = void 0;
9
9
  * @module CartesianGeometry
10
10
  */
11
11
  // cspell:word JSONXY
12
- // cspell:word CWXY
12
+ // cspell:word CWXY CCWXY
13
13
  const Geometry_1 = require("../Geometry");
14
14
  const Angle_1 = require("./Angle");
15
- /** Minimal object containing x,y and operations that are meaningful without change in both point and vector.
15
+ /**
16
+ * Minimal object containing x,y and operations that are meaningful without change in both point and vector.
16
17
  * * `XY` is not instantiable.
17
18
  * * The derived (instantiable) classes are
18
19
  * * `Point2d`
@@ -57,11 +58,11 @@ class XY {
57
58
  isAlmostEqualXY(x, y, tol) {
58
59
  return Geometry_1.Geometry.isSameCoordinate(this.x, x, tol) && Geometry_1.Geometry.isSameCoordinate(this.y, y, tol);
59
60
  }
60
- /** return a json array `[x,y]` */
61
+ /** Return a json array `[x,y]` */
61
62
  toJSON() {
62
63
  return [this.x, this.y];
63
64
  }
64
- /** return a json object `{x: 1, y:2}` */
65
+ /** Return a json object `{x: 1, y:2}` */
65
66
  toJSONXY() {
66
67
  return { x: this.x, y: this.y };
67
68
  }
@@ -69,7 +70,7 @@ class XY {
69
70
  * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
70
71
  * * If no JSON input is provided, 0 would be used as default values for x and y.
71
72
  * @param json the JSON input
72
- * */
73
+ */
73
74
  setFromJSON(json) {
74
75
  if (Array.isArray(json)) {
75
76
  this.set(json[0] || 0, json[1] || 0);
@@ -97,17 +98,13 @@ class XY {
97
98
  maxDiff(other) {
98
99
  return Math.max(Math.abs(this.x - other.x), Math.abs(this.y - other.y));
99
100
  }
100
- /**
101
- * Return the x,y component corresponding to 0,1.
102
- */
101
+ /** Return the x,y component corresponding to 0,1 */
103
102
  at(index) {
104
103
  if (index < 0.5)
105
104
  return this.x;
106
105
  return this.y;
107
106
  }
108
- /**
109
- * Set value at index 0 or 1.
110
- */
107
+ /** Set value at index 0 or 1 */
111
108
  setAt(index, value) {
112
109
  if (index < 0.5)
113
110
  this.x = value;
@@ -124,7 +121,7 @@ class XY {
124
121
  }
125
122
  return index;
126
123
  }
127
- /** returns true if the x,y components are both small by metric metric tolerance */
124
+ /** Returns true if the x,y components are both small by metric metric tolerance */
128
125
  get isAlmostZero() {
129
126
  return Geometry_1.Geometry.isSmallMetricDistance(this.x) && Geometry_1.Geometry.isSmallMetricDistance(this.y);
130
127
  }
@@ -140,11 +137,11 @@ class XY {
140
137
  magnitudeSquared() {
141
138
  return this.x * this.x + this.y * this.y;
142
139
  }
143
- /** returns true if the x,y components are exactly equal. */
140
+ /** Returns true if the x,y components are exactly equal. */
144
141
  isExactEqual(other) {
145
142
  return this.x === other.x && this.y === other.y;
146
143
  }
147
- /** returns true if x,y match `other` within metric tolerance */
144
+ /** Returns true if x,y match `other` within metric tolerance */
148
145
  isAlmostEqualMetric(other, distanceTol = Geometry_1.Geometry.smallMetricDistance) {
149
146
  return this.maxDiff(other) <= distanceTol;
150
147
  }
@@ -156,7 +153,7 @@ class XY {
156
153
  unitVectorTo(other, result) {
157
154
  return this.vectorTo(other, result).normalize(result);
158
155
  }
159
- /** cross product of vectors from origin to targets */
156
+ /** Cross product of vectors from origin to targets */
160
157
  static crossProductToPoints(origin, targetA, targetB) {
161
158
  return Geometry_1.Geometry.crossProductXYXY(targetA.x - origin.x, targetA.y - origin.y, targetB.x - origin.x, targetB.y - origin.y);
162
159
  }
@@ -170,7 +167,7 @@ class Point2d extends XY {
170
167
  constructor(x = 0, y = 0) {
171
168
  super(x, y);
172
169
  }
173
- /** return a new Point2d with x,y coordinates from this. */
170
+ /** Return a new Point2d with x,y coordinates from this. */
174
171
  clone(result) {
175
172
  return Point2d.create(this.x, this.y, result);
176
173
  }
@@ -192,7 +189,7 @@ class Point2d extends XY {
192
189
  * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
193
190
  * * If no JSON input is provided, 0 would be used as default values for x and y.
194
191
  * @param json the JSON input
195
- * */
192
+ */
196
193
  static fromJSON(json) {
197
194
  const val = new Point2d();
198
195
  val.setFromJSON(json);
@@ -208,7 +205,8 @@ class Point2d extends XY {
208
205
  static createZero(result) {
209
206
  return Point2d.create(0, 0, result);
210
207
  }
211
- /** Starting at this point, move along vector by tangentFraction of the vector length, and then
208
+ /**
209
+ * Starting at this point, move along vector by tangentFraction of the vector length, and then
212
210
  * to the left by leftFraction of the perpendicular vector length.
213
211
  * @param tangentFraction distance to move along the vector, as a fraction of vector
214
212
  * @param leftFraction distance to move perpendicular to the vector, as a fraction of the rotated vector
@@ -219,7 +217,8 @@ class Point2d extends XY {
219
217
  const dy = vector.y;
220
218
  return Point2d.create(this.x + tangentFraction * dx - leftFraction * dy, this.y + tangentFraction * dy + leftFraction * dx);
221
219
  }
222
- /** Interpolate at tangentFraction between this instance and point, and then Move by leftFraction
220
+ /**
221
+ * Interpolate at tangentFraction between this instance and point, and then Move by leftFraction
223
222
  * along the xy perpendicular of the vector between the points.
224
223
  */
225
224
  forwardLeftInterpolate(tangentFraction, leftFraction, point) {
@@ -282,7 +281,8 @@ class Point2d extends XY {
282
281
  const y2 = target2.y - this.y;
283
282
  return x1 * y2 - y1 * x2;
284
283
  }
285
- /** Return the fractional coordinate of the projection of this instance x,y onto the
284
+ /**
285
+ * Return the fractional coordinate of the projection of this instance x,y onto the
286
286
  * line from startPoint to endPoint.
287
287
  * @param startPoint start point of line
288
288
  * @param endPoint end point of line
@@ -297,7 +297,8 @@ class Point2d extends XY {
297
297
  }
298
298
  }
299
299
  exports.Point2d = Point2d;
300
- /** 2D vector with `x`,`y` as properties
300
+ /**
301
+ * 2D vector with `x`,`y` as properties
301
302
  * @public
302
303
  */
303
304
  class Vector2d extends XY {
@@ -335,7 +336,7 @@ class Vector2d extends XY {
335
336
  static createZero(result) {
336
337
  return Vector2d.create(0, 0, result);
337
338
  }
338
- /** copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */
339
+ /** Copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */
339
340
  static createFrom(data, result) {
340
341
  if (data instanceof Float64Array) {
341
342
  if (data.length >= 2)
@@ -350,7 +351,7 @@ class Vector2d extends XY {
350
351
  * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
351
352
  * * If no JSON input is provided, 0 would be used as default values for x and y.
352
353
  * @param json the JSON input
353
- * */
354
+ */
354
355
  static fromJSON(json) {
355
356
  const val = new Vector2d();
356
357
  val.setFromJSON(json);
@@ -382,7 +383,8 @@ class Vector2d extends XY {
382
383
  }
383
384
  return undefined;
384
385
  }
385
- /** Return a (new or optionally reused) vector which is `this` divided by `denominator`
386
+ /**
387
+ * Return a (new or optionally reused) vector which is `this` divided by `denominator`
386
388
  * * return undefined if denominator is zero.
387
389
  */
388
390
  safeDivideOrNull(denominator, result) {
@@ -403,7 +405,7 @@ class Vector2d extends XY {
403
405
  * it's returning the length of the projection as a fraction of the target magnitude.
404
406
  * @param target the target vector
405
407
  * @param defaultFraction the returned value in case magnitude square of target vector is very small
406
- * */
408
+ */
407
409
  fractionOfProjectionToVector(target, defaultFraction) {
408
410
  /*
409
411
  * projection length is (this.target)/||target||
@@ -458,7 +460,7 @@ class Vector2d extends XY {
458
460
  }
459
461
  return result;
460
462
  }
461
- /** return a new Vector2d rotated CCW by given angle */
463
+ /** Return a new Vector2d rotated CCW by given angle */
462
464
  rotateXY(angle, result) {
463
465
  const s = angle.sin();
464
466
  const c = angle.cos();
@@ -470,7 +472,8 @@ class Vector2d extends XY {
470
472
  result.y = xx * s + yy * c;
471
473
  return result;
472
474
  }
473
- /** Return a vector computed at fractional position between this vector and vectorB
475
+ /**
476
+ * Return a vector computed at fractional position between this vector and vectorB
474
477
  * @param fraction fractional position. 0 is at `this`. 1 is at `vectorB`.
475
478
  * True fractions are "between", negatives are "before this", beyond 1 is "beyond vectorB".
476
479
  * @param vectorB second vector
@@ -493,14 +496,14 @@ class Vector2d extends XY {
493
496
  }
494
497
  return result;
495
498
  }
496
- /** return {this + vector}. */
499
+ /** Return {this + vector}. */
497
500
  plus(vector, result) {
498
501
  result = result ? result : new Vector2d();
499
502
  result.x = this.x + vector.x;
500
503
  result.y = this.y + vector.y;
501
504
  return result;
502
505
  }
503
- /** return {this - vector}. */
506
+ /** Return {this - vector}. */
504
507
  minus(vector, result) {
505
508
  result = result ? result : new Vector2d();
506
509
  result.x = this.x - vector.x;
@@ -535,34 +538,34 @@ class Vector2d extends XY {
535
538
  result.y = this.y * scale;
536
539
  return result;
537
540
  }
538
- /** return a vector parallel to this but with specified length */
541
+ /** Return a vector parallel to this but with specified length */
539
542
  scaleToLength(length, result) {
540
543
  const mag = Geometry_1.Geometry.correctSmallMetricDistance(this.magnitude());
541
544
  if (mag === 0)
542
545
  return undefined;
543
546
  return this.scale(length / mag, result);
544
547
  }
545
- /** return the dot product of this with vectorB */
548
+ /** Return the dot product of this with vectorB */
546
549
  dotProduct(vectorB) {
547
550
  return this.x * vectorB.x + this.y * vectorB.y;
548
551
  }
549
- /** dot product with vector from pointA to pointB */
552
+ /** Dot product with vector from pointA to pointB */
550
553
  dotProductStartEnd(pointA, pointB) {
551
554
  return this.x * (pointB.x - pointA.x) + this.y * (pointB.y - pointA.y);
552
555
  }
553
- /** vector cross product {this CROSS vectorB} */
556
+ /** Vector cross product {this CROSS vectorB} */
554
557
  crossProduct(vectorB) {
555
558
  return this.x * vectorB.y - this.y * vectorB.x;
556
559
  }
557
560
  /**
558
- * return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.
561
+ * Return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.
559
562
  * This is positive if the shortest turn is counterclockwise, negative if clockwise.
560
563
  */
561
564
  radiansTo(vectorB) {
562
565
  return Math.atan2(this.crossProduct(vectorB), this.dotProduct(vectorB));
563
566
  }
564
567
  /**
565
- * return the (strongly typed) signed angle from this to vectorB.
568
+ * Return the (strongly typed) signed angle from this to vectorB.
566
569
  * This is positive if the shortest turn is counterclockwise, negative if clockwise.
567
570
  */
568
571
  angleTo(vectorB) {
@@ -1 +1 @@
1
- {"version":3,"file":"Point2dVector2d.js","sourceRoot":"","sources":["../../../src/geometry3d/Point2dVector2d.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,qBAAqB;AACrB,mBAAmB;AAEnB,0CAA6E;AAC7E,mCAAgC;AAGhC;;;;;;GAMG;AACH,MAAa,EAAE;IAKb,wBAAwB;IACjB,GAAG,CAAC,IAAY,CAAC,EAAE,IAAY,CAAC;QACrC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IACD,+BAA+B;IACxB,OAAO;QACZ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IACD,YAAsB,IAAY,CAAC,EAAE,IAAY,CAAC;QAChD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IACD,mCAAmC;IAC5B,OAAO,CAAC,KAAa;QAC1B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;SAClB;aAAM;YACL,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACZ;IACH,CAAC;IACD,8CAA8C;IACvC,MAAM;QACX,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,+FAA+F;IACxF,aAAa,CAAC,KAAY,EAAE,GAAY;QAC7C,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5G,CAAC;IACD,+FAA+F;IACxF,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,GAAY;QACvD,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAChG,CAAC;IACD,qCAAqC;IAC9B,MAAM;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,0CAA0C;IACnC,QAAQ;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAClC,CAAC;IACD;;;;SAIK;IACE,WAAW,CAAC,IAAc;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,OAAO;SACR;QACD,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,OAAO;SACR;QACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,mDAAmD;IAC5C,QAAQ,CAAC,KAAY;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,uDAAuD;IAChD,eAAe,CAAC,KAAY;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/B,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACvC,CAAC;IACD,4EAA4E;IACrE,OAAO,CAAC,KAAY;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD;;OAEG;IACI,EAAE,CAAC,KAAa;QACrB,IAAI,KAAK,GAAG,GAAG;YACb,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;IACD;;OAEG;IACI,KAAK,CAAC,KAAa,EAAE,KAAa;QACvC,IAAI,KAAK,GAAG,GAAG;YACb,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;;YAEf,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,8EAA8E;IACvE,aAAa;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,KAAK,GAAG,CAAC,CAAC;SACX;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,mFAAmF;IACnF,IAAW,YAAY;QACrB,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,mBAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,yDAAyD;IAClD,MAAM;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,yCAAyC;IAClC,SAAS;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,mDAAmD;IAC5C,gBAAgB;QACrB,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,4DAA4D;IACrD,YAAY,CAAC,KAAY;QAC9B,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,gEAAgE;IACzD,mBAAmB,CAAC,KAAY,EAAE,cAAsB,mBAAQ,CAAC,mBAAmB;QACzF,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;IAC5C,CAAC;IACD,6DAA6D;IACtD,QAAQ,CAAC,KAAY,EAAE,MAAiB;QAC7C,OAAO,QAAQ,CAAC,MAAM,CACpB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAChB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAChB,MAAM,CAAC,CAAC;IACZ,CAAC;IACD,oDAAoD;IAC7C,YAAY,CAAC,KAAY,EAAE,MAAiB;QACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IACD,sDAAsD;IAC/C,MAAM,CAAC,oBAAoB,CAAC,MAAa,EAAE,OAAc,EAAE,OAAc;QAC9E,OAAO,mBAAQ,CAAC,gBAAgB,CAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;CACF;AApJD,gBAoJC;AAED;;GAEG;AACH,MAAa,OAAQ,SAAQ,EAAE;IAC7B,8BAA8B;IAC9B,YAAY,IAAY,CAAC,EAAE,IAAY,CAAC;QACtC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,CAAC;IACD,2DAA2D;IACpD,KAAK,CAAC,MAAgB;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,MAAM,CAAC,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,MAAgB;QACjE,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD;;;;SAIK;IACE,MAAM,CAAC,QAAQ,CAAC,IAAc;QACnC,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,qFAAqF;IAC9E,MAAM,CAAC,UAAU,CAAC,EAAqB,EAAE,MAAgB;QAC9D,IAAI,EAAE;YACJ,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,mDAAmD;IAC5C,MAAM,CAAC,UAAU,CAAC,MAAgB;QACvC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD;;;;;OAKG;IACI,cAAc,CAAC,eAAuB,EAAE,YAAoB,EAAE,MAAgB;QACnF,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;QACpB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,eAAe,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,EACjD,IAAI,CAAC,CAAC,GAAG,eAAe,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,CAClD,CAAC;IACJ,CAAC;IACD;;OAEG;IACI,sBAAsB,CAAC,eAAuB,EAAE,YAAoB,EAAE,KAAY;QACvF,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,eAAe,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,EACjD,IAAI,CAAC,CAAC,GAAG,eAAe,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,CAClD,CAAC;IACJ,CAAC;IACD,0EAA0E;IACnE,WAAW,CAAC,QAAgB,EAAE,KAAY,EAAE,MAAgB;QACjE,IAAI,QAAQ,IAAI,GAAG;YACjB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EACtC,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EACtC,MAAM,CACP,CAAC;QACJ,MAAM,CAAC,GAAW,QAAQ,GAAG,GAAG,CAAC;QACjC,OAAO,OAAO,CAAC,MAAM,CACnB,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAChC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAChC,MAAM,CACP,CAAC;IACJ,CAAC;IACD,oEAAoE;IAC7D,aAAa,CAAC,SAAiB,EAAE,SAAiB,EAAE,KAAY,EAAE,MAAgB;QACvF,OAAO,OAAO,CAAC,MAAM,CACnB,mBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAChD,mBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAChD,MAAM,CACP,CAAC;IACJ,CAAC;IACD,qCAAqC;IAC9B,KAAK,CAAC,MAAa,EAAE,MAAgB;QAC1C,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EACjB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EACjB,MAAM,CACP,CAAC;IACJ,CAAC;IACD,+BAA+B;IACxB,IAAI,CAAC,MAAa,EAAE,MAAgB;QACzC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EACjB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EACjB,MAAM,CACP,CAAC;IACJ,CAAC;IACD,+BAA+B;IACxB,MAAM,CAAC,KAAa,CAAC,EAAE,KAAa,CAAC,EAAE,MAAgB;QAC5D,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,EAAE,EACX,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CACpB,CAAC;IACJ,CAAC;IACD,qCAAqC;IAC9B,UAAU,CAAC,MAAa,EAAE,WAAmB,EAAE,MAAgB;QACpE,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,EAC/B,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,EAC/B,MAAM,CACP,CAAC;IACJ,CAAC;IACD,2DAA2D;IACpD,WAAW,CAAC,OAAc,EAAE,OAAe,EAAE,OAAc,EAAE,OAAe,EAAE,MAAgB;QACnG,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,EAClD,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,EAClD,MAAM,CACP,CAAC;IACJ,CAAC;IACD,+EAA+E;IACxE,WAAW,CAAC,OAAc,EAAE,OAAe,EAAE,OAAc,EAAE,OAAe,EACjF,OAAc,EAAE,OAAe,EAAE,MAAgB;QACjD,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,EACxE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,EACxE,MAAM,CACP,CAAC;IACJ,CAAC;IACD;;;;OAIG;IACI,mBAAmB,CAAC,OAAc,EAAE,OAAc;QACvD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC;IACD;;;;OAIG;IACI,oBAAoB,CAAC,OAAc,EAAE,OAAc;QACxD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC3B,CAAC;IACD;;;;;OAKG;IACI,0BAA0B,CAAC,UAAmB,EAAE,QAAiB,EAAE,kBAA0B,CAAC;QACnG,MAAM,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,WAAW,GAAG,mBAAQ,CAAC,0BAA0B;YACnD,OAAO,eAAe,CAAC;QACzB,MAAM,SAAS,GAAG,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO,SAAS,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AA5KD,0BA4KC;AAED;;GAEG;AACH,MAAa,QAAS,SAAQ,EAAE;IAC9B,YAAY,IAAY,CAAC,EAAE,IAAY,CAAC;QACtC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,CAAC;IACD,8CAA8C;IACvC,KAAK,CAAC,MAAiB;QAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,+CAA+C;IACxC,MAAM,CAAC,MAAM,CAAC,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,MAAiB;QAClE,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,QAAgB,CAAC;QACnC,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,QAAgB,CAAC;QACnC,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,4CAA4C;IACrC,MAAM,CAAC,UAAU,CAAC,MAAiB;QACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,6GAA6G;IACtG,MAAM,CAAC,UAAU,CAAC,IAA0B,EAAE,MAAiB;QACpE,IAAI,IAAI,YAAY,YAAY,EAAE;YAChC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAClB,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAClB,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9B;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IACD;;;;SAIK;IACE,MAAM,CAAC,QAAQ,CAAC,IAAc;QACnC,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,oFAAoF;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAS,EAAE,KAAY;QAC/C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,4DAA4D;IACrD,MAAM,CAAC,cAAc,CAAC,MAAa,EAAE,MAAa,EAAE,MAAiB;QAC1E,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,oBAAoB,CAAC,SAAmB,EAAE,SAAmB,EAAE,MAAc;QACzF,IAAI,QAAQ,GAAyB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,QAAQ,EAAE;YACZ,MAAM,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACzC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACjC,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;SACrC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;OAEG;IACI,gBAAgB,CAAC,WAAmB,EAAE,MAAiB;QAC5D,IAAI,WAAW,KAAK,GAAG,EAAE;YACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC;SAC9C;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,2GAA2G;IACpG,SAAS,CAAC,MAAiB;QAChC,MAAM,GAAG,GAAG,mBAAQ,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAClE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD;;;;;;SAMK;IACE,4BAA4B,CAAC,MAAgB,EAAE,eAAwB;QAC5E;;;WAGG;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC9C,IAAI,WAAW,GAAG,mBAAQ,CAAC,0BAA0B;YACnD,OAAO,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,SAAS,GAAG,WAAW,CAAC;IACjC,CAAC;IACD,sEAAsE;IAC/D,MAAM,CAAC,MAAiB;QAC7B,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,mFAAmF;IAC5E,aAAa,CAAC,MAAiB;QACpC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,gFAAgF;QAChF,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2EAA2E;IACpE,YAAY,CAAC,MAAiB;QACnC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,gFAAgF;QAChF,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2DAA2D;IACpD,mBAAmB,CAAC,MAAiB;QAC1C,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,gFAAgF;QAChF,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,GAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACrC,IAAI,EAAE,KAAK,GAAG,EAAE;YACd,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;SACf;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,uDAAuD;IAChD,QAAQ,CAAC,KAAY,EAAE,MAAiB;QAC7C,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACtB,gFAAgF;QAChF,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;MAKE;IACK,WAAW,CAAC,QAAgB,EAAE,OAAiB,EAAE,MAAiB;QACvE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C;;;WAGG;QACH,IAAI,QAAQ,IAAI,GAAG,EAAE;YACnB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACrD;aAAM;YACL,MAAM,CAAC,GAAW,QAAQ,GAAG,GAAG,CAAC;YACjC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACjD;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,8BAA8B;IACvB,IAAI,CAAC,MAAa,EAAE,MAAiB;QAC1C,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,8BAA8B;IACvB,KAAK,CAAC,MAAa,EAAE,MAAiB;QAC3C,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,wCAAwC;IACjC,UAAU,CAAC,MAAa,EAAE,WAAmB,EAAE,MAAiB;QACrE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC;QAC3C,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,+DAA+D;IACxD,WAAW,CAAC,OAAc,EAAE,OAAe,EAAE,OAAc,EAAE,OAAe,EAAE,MAAiB;QACpG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;QAC9D,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,mFAAmF;IAC5E,WAAW,CAAC,OAAc,EAAE,OAAe,EAAE,OAAc,EAAE,OAAe,EAAE,OAAc,EAAE,OAAe,EAAE,MAAiB;QACrI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;QACpF,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;QACpF,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,4BAA4B;IACrB,KAAK,CAAC,KAAa,EAAE,MAAiB;QAC3C,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QAC1B,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,iEAAiE;IAC1D,aAAa,CAAC,MAAc,EAAE,MAAiB;QACpD,MAAM,GAAG,GAAG,mBAAQ,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAClE,IAAI,GAAG,KAAK,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IACD,kDAAkD;IAC3C,UAAU,CAAC,OAAc;QAC9B,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,oDAAoD;IAC7C,kBAAkB,CAAC,MAAa,EAAE,MAAa;QACpD,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,gDAAgD;IACzC,YAAY,CAAC,OAAc;QAChC,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IACD;;;OAGG;IACI,SAAS,CAAC,OAAc;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD;;;OAGG;IACI,OAAO,CAAC,OAAc;QAC3B,OAAO,aAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IACD;;;;;;;OAOG;IACI,YAAY,CAAC,KAAe,EAAE,qBAA8B,KAAK,EACtE,mCAA4C,KAAK,EAAE,OAA6B;QAChF,MAAM,gBAAgB,GAAW,OAAO,EAAE,gBAAgB,IAAI,mBAAQ,CAAC,wBAAwB,CAAC;QAChG,MAAM,kBAAkB,GAAW,OAAO,EAAE,kBAAkB,IAAI,mBAAQ,CAAC,0BAA0B,CAAC;QACtG,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,EAAE,GAAG,kBAAkB,IAAI,EAAE,GAAG,kBAAkB;YACpD,OAAO,gCAAgC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,kBAAkB;YAClC,OAAO,KAAK,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,4DAA4D;QAC5D,qCAAqC;QACrC,4CAA4C;QAC5C,OAAO,KAAK,GAAG,KAAK,IAAI,gBAAgB,GAAG,EAAE,GAAG,EAAE,CAAC;IACrD,CAAC;IACD;;;;;;;OAOG;IACI,iBAAiB,CAAC,KAAe,EAAE,mCAA4C,KAAK,EAAE,OAA6B;QACxH,MAAM,gBAAgB,GAAW,OAAO,EAAE,gBAAgB,IAAI,mBAAQ,CAAC,wBAAwB,CAAC;QAChG,MAAM,kBAAkB,GAAW,OAAO,EAAE,kBAAkB,IAAI,mBAAQ,CAAC,0BAA0B,CAAC;QACtG,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,EAAE,GAAG,kBAAkB,IAAI,EAAE,GAAG,kBAAkB;YACpD,OAAO,gCAAgC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,IAAI,gBAAgB,GAAG,EAAE,GAAG,EAAE,CAAC;IAC/C,CAAC;CACF;AAtTD,4BAsTC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n// cspell:word JSONXY\r\n// cspell:word CWXY\r\n\r\nimport { BeJSONFunctions, Geometry, PerpParallelOptions } from \"../Geometry\";\r\nimport { Angle } from \"./Angle\";\r\nimport { XAndY, XYProps } from \"./XYZProps\";\r\n\r\n/** Minimal object containing x,y and operations that are meaningful without change in both point and vector.\r\n * * `XY` is not instantiable.\r\n * * The derived (instantiable) classes are\r\n * * `Point2d`\r\n * * `Vector2d`\r\n * @public\r\n */\r\nexport class XY implements XAndY {\r\n /** x component */\r\n public x: number;\r\n /** y component */\r\n public y: number;\r\n /** Set both x and y. */\r\n public set(x: number = 0, y: number = 0) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n /** Set both x and y to zero */\r\n public setZero() {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n protected constructor(x: number = 0, y: number = 0) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n /** Set both x and y from other. */\r\n public setFrom(other?: XAndY) {\r\n if (other) {\r\n this.x = other.x;\r\n this.y = other.y;\r\n } else {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n }\r\n /** Freeze this instance so it is read-only */\r\n public freeze(): Readonly<this> {\r\n return Object.freeze(this);\r\n }\r\n /** Returns true if this and other have equal x,y parts within Geometry.smallMetricDistance. */\r\n public isAlmostEqual(other: XAndY, tol?: number): boolean {\r\n return Geometry.isSameCoordinate(this.x, other.x, tol) && Geometry.isSameCoordinate(this.y, other.y, tol);\r\n }\r\n /** Returns true if this and other have equal x,y parts within Geometry.smallMetricDistance. */\r\n public isAlmostEqualXY(x: number, y: number, tol?: number): boolean {\r\n return Geometry.isSameCoordinate(this.x, x, tol) && Geometry.isSameCoordinate(this.y, y, tol);\r\n }\r\n /** return a json array `[x,y]` */\r\n public toJSON(): XYProps {\r\n return [this.x, this.y];\r\n }\r\n /** return a json object `{x: 1, y:2}` */\r\n public toJSONXY(): XYProps {\r\n return { x: this.x, y: this.y };\r\n }\r\n /**\r\n * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`\r\n * * If no JSON input is provided, 0 would be used as default values for x and y.\r\n * @param json the JSON input\r\n * */\r\n public setFromJSON(json?: XYProps): void {\r\n if (Array.isArray(json)) {\r\n this.set(json[0] || 0, json[1] || 0);\r\n return;\r\n }\r\n if (json) {\r\n this.set(json.x || 0, json.y || 0);\r\n return;\r\n }\r\n this.set(0, 0);\r\n }\r\n /** Return the distance from this point to other */\r\n public distance(other: XAndY): number {\r\n const xDist = other.x - this.x;\r\n const yDist = other.y - this.y;\r\n return Math.sqrt(xDist * xDist + yDist * yDist);\r\n }\r\n /** Return squared distance from this point to other */\r\n public distanceSquared(other: XAndY): number {\r\n const xDist = other.x - this.x;\r\n const yDist = other.y - this.y;\r\n return xDist * xDist + yDist * yDist;\r\n }\r\n /** Return the largest absolute distance between corresponding components */\r\n public maxDiff(other: XAndY): number {\r\n return Math.max(Math.abs(this.x - other.x), Math.abs(this.y - other.y));\r\n }\r\n /**\r\n * Return the x,y component corresponding to 0,1.\r\n */\r\n public at(index: number): number {\r\n if (index < 0.5)\r\n return this.x;\r\n return this.y;\r\n }\r\n /**\r\n * Set value at index 0 or 1.\r\n */\r\n public setAt(index: number, value: number): void {\r\n if (index < 0.5)\r\n this.x = value;\r\n else\r\n this.y = value;\r\n }\r\n /** Return the index (0,1) of the x,y component with largest absolute value */\r\n public indexOfMaxAbs(): number {\r\n let index = 0;\r\n const a = Math.abs(this.x);\r\n const b = Math.abs(this.y);\r\n if (b > a) {\r\n index = 1;\r\n }\r\n return index;\r\n }\r\n /** returns true if the x,y components are both small by metric metric tolerance */\r\n public get isAlmostZero(): boolean {\r\n return Geometry.isSmallMetricDistance(this.x) && Geometry.isSmallMetricDistance(this.y);\r\n }\r\n /** Return the largest absolute value of any component */\r\n public maxAbs(): number {\r\n return Math.max(Math.abs(this.x), Math.abs(this.y));\r\n }\r\n /** Return the magnitude of the vector */\r\n public magnitude(): number {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n /** Return the squared magnitude of the vector. */\r\n public magnitudeSquared(): number {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n /** returns true if the x,y components are exactly equal. */\r\n public isExactEqual(other: XAndY): boolean {\r\n return this.x === other.x && this.y === other.y;\r\n }\r\n /** returns true if x,y match `other` within metric tolerance */\r\n public isAlmostEqualMetric(other: XAndY, distanceTol: number = Geometry.smallMetricDistance): boolean {\r\n return this.maxDiff(other) <= distanceTol;\r\n }\r\n /** Return a (full length) vector from this point to other */\r\n public vectorTo(other: XAndY, result?: Vector2d): Vector2d {\r\n return Vector2d.create(\r\n other.x - this.x,\r\n other.y - this.y,\r\n result);\r\n }\r\n /** Return a unit vector from this point to other */\r\n public unitVectorTo(other: XAndY, result?: Vector2d): Vector2d | undefined {\r\n return this.vectorTo(other, result).normalize(result);\r\n }\r\n /** cross product of vectors from origin to targets */\r\n public static crossProductToPoints(origin: XAndY, targetA: XAndY, targetB: XAndY): number {\r\n return Geometry.crossProductXYXY(\r\n targetA.x - origin.x, targetA.y - origin.y, targetB.x - origin.x, targetB.y - origin.y);\r\n }\r\n}\r\n\r\n/** 2D point with `x`,`y` as properties\r\n * @public\r\n */\r\nexport class Point2d extends XY implements BeJSONFunctions {\r\n /** Constructor for Point2d */\r\n constructor(x: number = 0, y: number = 0) {\r\n super(x, y);\r\n }\r\n /** return a new Point2d with x,y coordinates from this. */\r\n public clone(result?: Point2d): Point2d {\r\n return Point2d.create(this.x, this.y, result);\r\n }\r\n /**\r\n * Return a point (newly created unless result provided) with given x,y coordinates\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @param result optional result\r\n */\r\n public static create(x: number = 0, y: number = 0, result?: Point2d): Point2d {\r\n if (result) {\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n }\r\n return new Point2d(x, y);\r\n }\r\n /**\r\n * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`\r\n * * If no JSON input is provided, 0 would be used as default values for x and y.\r\n * @param json the JSON input\r\n * */\r\n public static fromJSON(json?: XYProps): Point2d {\r\n const val = new Point2d();\r\n val.setFromJSON(json);\r\n return val;\r\n }\r\n /** Create (or optionally reuse) a Point2d from another object with fields x and y */\r\n public static createFrom(xy: XAndY | undefined, result?: Point2d): Point2d {\r\n if (xy)\r\n return Point2d.create(xy.x, xy.y, result);\r\n return Point2d.create(0, 0, result);\r\n }\r\n /** Create a Point2d with both coordinates zero. */\r\n public static createZero(result?: Point2d): Point2d {\r\n return Point2d.create(0, 0, result);\r\n }\r\n /** Starting at this point, move along vector by tangentFraction of the vector length, and then\r\n * to the left by leftFraction of the perpendicular vector length.\r\n * @param tangentFraction distance to move along the vector, as a fraction of vector\r\n * @param leftFraction distance to move perpendicular to the vector, as a fraction of the rotated vector\r\n * @param vector the other vector\r\n */\r\n public addForwardLeft(tangentFraction: number, leftFraction: number, vector: Vector2d): Point2d {\r\n const dx = vector.x;\r\n const dy = vector.y;\r\n return Point2d.create(\r\n this.x + tangentFraction * dx - leftFraction * dy,\r\n this.y + tangentFraction * dy + leftFraction * dx\r\n );\r\n }\r\n /** Interpolate at tangentFraction between this instance and point, and then Move by leftFraction\r\n * along the xy perpendicular of the vector between the points.\r\n */\r\n public forwardLeftInterpolate(tangentFraction: number, leftFraction: number, point: XAndY): Point2d {\r\n const dx = point.x - this.x;\r\n const dy = point.y - this.y;\r\n return Point2d.create(\r\n this.x + tangentFraction * dx - leftFraction * dy,\r\n this.y + tangentFraction * dy + leftFraction * dx\r\n );\r\n }\r\n /** Return a point interpolated between this point and the right param. */\r\n public interpolate(fraction: number, other: XAndY, result?: Point2d): Point2d {\r\n if (fraction <= 0.5)\r\n return Point2d.create(\r\n this.x + fraction * (other.x - this.x),\r\n this.y + fraction * (other.y - this.y),\r\n result\r\n );\r\n const t: number = fraction - 1.0;\r\n return Point2d.create(\r\n other.x + t * (other.x - this.x),\r\n other.y + t * (other.y - this.y),\r\n result\r\n );\r\n }\r\n /** Return a point with independent x,y fractional interpolation. */\r\n public interpolateXY(fractionX: number, fractionY: number, other: XAndY, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n Geometry.interpolate(this.x, fractionX, other.x),\r\n Geometry.interpolate(this.y, fractionY, other.y),\r\n result\r\n );\r\n }\r\n /** Return this point minus vector */\r\n public minus(vector: XAndY, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x - vector.x,\r\n this.y - vector.y,\r\n result\r\n );\r\n }\r\n /** Return point plus vector */\r\n public plus(vector: XAndY, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vector.x,\r\n this.y + vector.y,\r\n result\r\n );\r\n }\r\n /** Return point plus vector */\r\n public plusXY(dx: number = 0, dy: number = 0, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + dx,\r\n this.y + dy, result\r\n );\r\n }\r\n /** Return point + vector * scalar */\r\n public plusScaled(vector: XAndY, scaleFactor: number, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vector.x * scaleFactor,\r\n this.y + vector.y * scaleFactor,\r\n result\r\n );\r\n }\r\n /** Return point + vectorA * scalarA + vectorB * scalarB */\r\n public plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vectorA.x * scalarA + vectorB.x * scalarB,\r\n this.y + vectorA.y * scalarA + vectorB.y * scalarB,\r\n result\r\n );\r\n }\r\n /** Return point + vectorA * scalarA + vectorB * scalarB + vectorC * scalarC */\r\n public plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number,\r\n vectorC: XAndY, scalarC: number, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vectorA.x * scalarA + vectorB.x * scalarB + vectorC.x * scalarC,\r\n this.y + vectorA.y * scalarA + vectorB.y * scalarB + vectorC.y * scalarC,\r\n result\r\n );\r\n }\r\n /**\r\n * Return the dot product of vector from this to targetA and vector from this to targetB\r\n * @param targetA target of first vector\r\n * @param targetB target of second vector\r\n */\r\n public dotVectorsToTargets(targetA: XAndY, targetB: XAndY): number {\r\n return (targetA.x - this.x) * (targetB.x - this.x) + (targetA.y - this.y) * (targetB.y - this.y);\r\n }\r\n /**\r\n * Returns the (scalar) cross product of vector from this to targetA and vector from this to targetB\r\n * @param target1 target of first vector\r\n * @param target2 target of second vector\r\n */\r\n public crossProductToPoints(target1: XAndY, target2: XAndY): number {\r\n const x1 = target1.x - this.x;\r\n const y1 = target1.y - this.y;\r\n const x2 = target2.x - this.x;\r\n const y2 = target2.y - this.y;\r\n return x1 * y2 - y1 * x2;\r\n }\r\n /** Return the fractional coordinate of the projection of this instance x,y onto the\r\n * line from startPoint to endPoint.\r\n * @param startPoint start point of line\r\n * @param endPoint end point of line\r\n * @param defaultFraction fraction to return if startPoint and endPoint are equal.\r\n */\r\n public fractionOfProjectionToLine(startPoint: Point2d, endPoint: Point2d, defaultFraction: number = 0): number {\r\n const denominator = startPoint.distanceSquared(endPoint);\r\n if (denominator < Geometry.smallMetricDistanceSquared)\r\n return defaultFraction;\r\n const numerator = startPoint.dotVectorsToTargets(endPoint, this);\r\n return numerator / denominator;\r\n }\r\n}\r\n\r\n/** 2D vector with `x`,`y` as properties\r\n * @public\r\n */\r\nexport class Vector2d extends XY implements BeJSONFunctions {\r\n constructor(x: number = 0, y: number = 0) {\r\n super(x, y);\r\n }\r\n /** Return a new Vector2d with the same x,y */\r\n public clone(result?: Vector2d): Vector2d {\r\n return Vector2d.create(this.x, this.y, result);\r\n }\r\n /** Return a new Vector2d with given x and y */\r\n public static create(x: number = 0, y: number = 0, result?: Vector2d): Vector2d {\r\n if (result) {\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n }\r\n return new Vector2d(x, y);\r\n }\r\n /**\r\n * Return a (new) Vector2d with components scale,0\r\n * If scale is not given default value 1 is used.\r\n */\r\n public static unitX(scale: number = 1): Vector2d {\r\n return new Vector2d(scale, 0);\r\n }\r\n /**\r\n * Return a (new) Vector2d with components 0,scale\r\n * If scale is not given default value 1 is used.\r\n */\r\n public static unitY(scale: number = 1): Vector2d {\r\n return new Vector2d(0, scale);\r\n }\r\n /** Return a Vector2d with components 0,0 */\r\n public static createZero(result?: Vector2d): Vector2d {\r\n return Vector2d.create(0, 0, result);\r\n }\r\n /** copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */\r\n public static createFrom(data: XAndY | Float64Array, result?: Vector2d): Vector2d {\r\n if (data instanceof Float64Array) {\r\n if (data.length >= 2)\r\n return Vector2d.create(data[0], data[1]);\r\n if (data.length >= 1)\r\n return Vector2d.create(data[0], 0);\r\n return Vector2d.create(0, 0);\r\n }\r\n return Vector2d.create(data.x, data.y, result);\r\n }\r\n /**\r\n * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`\r\n * * If no JSON input is provided, 0 would be used as default values for x and y.\r\n * @param json the JSON input\r\n * */\r\n public static fromJSON(json?: XYProps): Vector2d {\r\n const val = new Vector2d();\r\n val.setFromJSON(json);\r\n return val;\r\n }\r\n /** Return a new Vector2d from polar coordinates for radius and Angle from x axis */\r\n public static createPolar(r: number, theta: Angle): Vector2d {\r\n return Vector2d.create(r * theta.cos(), r * theta.sin());\r\n }\r\n /** Return a new Vector2d extending from point0 to point1 */\r\n public static createStartEnd(point0: XAndY, point1: XAndY, result?: Vector2d): Vector2d {\r\n return Vector2d.create(point1.x - point0.x, point1.y - point0.y, result);\r\n }\r\n /**\r\n * Return a vector that bisects the angle between two normals and extends to the intersection of two offset lines\r\n * * returns `undefined` if `unitPerpA = -unitPerpB` (i.e., are opposite)\r\n * * math details can be found at docs/learning/geometry/PointVector.md\r\n * @param unitPerpA unit perpendicular to incoming direction\r\n * @param unitPerpB unit perpendicular to outgoing direction\r\n * @param offset offset distance\r\n */\r\n public static createOffsetBisector(unitPerpA: Vector2d, unitPerpB: Vector2d, offset: number): Vector2d | undefined {\r\n let bisector: Vector2d | undefined = unitPerpA.plus(unitPerpB);\r\n bisector = bisector.normalize();\r\n if (bisector) {\r\n const c = bisector.dotProduct(unitPerpA);\r\n bisector.scale(offset, bisector);\r\n return bisector.safeDivideOrNull(c);\r\n }\r\n return undefined;\r\n }\r\n /** Return a (new or optionally reused) vector which is `this` divided by `denominator`\r\n * * return undefined if denominator is zero.\r\n */\r\n public safeDivideOrNull(denominator: number, result?: Vector2d): Vector2d | undefined {\r\n if (denominator !== 0.0) {\r\n return this.scale(1.0 / denominator, result);\r\n }\r\n return undefined;\r\n }\r\n /** Return a unit vector in direction of this instance (undefined if this instance has near zero length) */\r\n public normalize(result?: Vector2d): Vector2d | undefined {\r\n const mag = Geometry.correctSmallMetricDistance(this.magnitude());\r\n result = result ? result : new Vector2d();\r\n return this.safeDivideOrNull(mag, result);\r\n }\r\n /**\r\n * Return fractional projection of target vector onto this\r\n * * It's returning the signed projection magnitude divided by the target magnitude. In other words,\r\n * it's returning the length of the projection as a fraction of the target magnitude.\r\n * @param target the target vector\r\n * @param defaultFraction the returned value in case magnitude square of target vector is very small\r\n * */\r\n public fractionOfProjectionToVector(target: Vector2d, defaultFraction?: number): number {\r\n /*\r\n * projection length is (this.target)/||target||\r\n * but here we return (this.target)/||target||^2\r\n */\r\n const denominator = target.magnitudeSquared();\r\n if (denominator < Geometry.smallMetricDistanceSquared)\r\n return defaultFraction ? defaultFraction : 0;\r\n const numerator = this.dotProduct(target);\r\n return numerator / denominator;\r\n }\r\n /** Return a new vector with components negated from this instance. */\r\n public negate(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = -this.x;\r\n result.y = -this.y;\r\n return result;\r\n }\r\n /** Return a vector same length as this but rotated 90 degrees counter clockwise */\r\n public rotate90CCWXY(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n result.x = -yy;\r\n result.y = xx;\r\n return result;\r\n }\r\n /** Return a vector same length as this but rotated 90 degrees clockwise */\r\n public rotate90CWXY(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n result.x = yy;\r\n result.y = -xx;\r\n return result;\r\n }\r\n /** Return a unit vector perpendicular to this instance. */\r\n public unitPerpendicularXY(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n result.x = -yy;\r\n result.y = xx;\r\n const d2: number = xx * xx + yy * yy;\r\n if (d2 !== 0.0) {\r\n const a = 1.0 / Math.sqrt(d2);\r\n result.x *= a;\r\n result.y *= a;\r\n }\r\n return result;\r\n }\r\n /** return a new Vector2d rotated CCW by given angle */\r\n public rotateXY(angle: Angle, result?: Vector2d): Vector2d {\r\n const s = angle.sin();\r\n const c = angle.cos();\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n result = result ? result : new Vector2d();\r\n result.x = xx * c - yy * s;\r\n result.y = xx * s + yy * c;\r\n return result;\r\n }\r\n /** Return a vector computed at fractional position between this vector and vectorB\r\n * @param fraction fractional position. 0 is at `this`. 1 is at `vectorB`.\r\n * True fractions are \"between\", negatives are \"before this\", beyond 1 is \"beyond vectorB\".\r\n * @param vectorB second vector\r\n * @param result optional preallocated result.\r\n */\r\n public interpolate(fraction: number, vectorB: Vector2d, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n /*\r\n * For best last-bit behavior, if fraction is below 0.5, use this as base point.\r\n * If above 0.5, use vectorB as base point.\r\n */\r\n if (fraction <= 0.5) {\r\n result.x = this.x + fraction * (vectorB.x - this.x);\r\n result.y = this.y + fraction * (vectorB.y - this.y);\r\n } else {\r\n const t: number = fraction - 1.0;\r\n result.x = vectorB.x + t * (vectorB.x - this.x);\r\n result.y = vectorB.y + t * (vectorB.y - this.y);\r\n }\r\n return result;\r\n }\r\n /** return {this + vector}. */\r\n public plus(vector: XAndY, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vector.x;\r\n result.y = this.y + vector.y;\r\n return result;\r\n }\r\n /** return {this - vector}. */\r\n public minus(vector: XAndY, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x - vector.x;\r\n result.y = this.y - vector.y;\r\n return result;\r\n }\r\n /** Return {point + vector \\* scalar} */\r\n public plusScaled(vector: XAndY, scaleFactor: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vector.x * scaleFactor;\r\n result.y = this.y + vector.y * scaleFactor;\r\n return result;\r\n }\r\n /** Return {point + vectorA \\* scalarA + vectorB \\* scalarB} */\r\n public plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vectorA.x * scalarA + vectorB.x * scalarB;\r\n result.y = this.y + vectorA.y * scalarA + vectorB.y * scalarB;\r\n return result;\r\n }\r\n /** Return {this + vectorA \\* scalarA + vectorB \\* scalarB + vectorC \\* scalarC} */\r\n public plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, vectorC: XAndY, scalarC: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vectorA.x * scalarA + vectorB.x * scalarB + vectorC.x * scalarC;\r\n result.y = this.y + vectorA.y * scalarA + vectorB.y * scalarB + vectorC.y * scalarC;\r\n return result;\r\n }\r\n /** Return {this * scale} */\r\n public scale(scale: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x * scale;\r\n result.y = this.y * scale;\r\n return result;\r\n }\r\n /** return a vector parallel to this but with specified length */\r\n public scaleToLength(length: number, result?: Vector2d): Vector2d | undefined {\r\n const mag = Geometry.correctSmallMetricDistance(this.magnitude());\r\n if (mag === 0)\r\n return undefined;\r\n return this.scale(length / mag, result);\r\n }\r\n /** return the dot product of this with vectorB */\r\n public dotProduct(vectorB: XAndY): number {\r\n return this.x * vectorB.x + this.y * vectorB.y;\r\n }\r\n /** dot product with vector from pointA to pointB */\r\n public dotProductStartEnd(pointA: XAndY, pointB: XAndY): number {\r\n return this.x * (pointB.x - pointA.x) + this.y * (pointB.y - pointA.y);\r\n }\r\n /** vector cross product {this CROSS vectorB} */\r\n public crossProduct(vectorB: XAndY): number {\r\n return this.x * vectorB.y - this.y * vectorB.x;\r\n }\r\n /**\r\n * return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.\r\n * This is positive if the shortest turn is counterclockwise, negative if clockwise.\r\n */\r\n public radiansTo(vectorB: XAndY): number {\r\n return Math.atan2(this.crossProduct(vectorB), this.dotProduct(vectorB));\r\n }\r\n /**\r\n * return the (strongly typed) signed angle from this to vectorB.\r\n * This is positive if the shortest turn is counterclockwise, negative if clockwise.\r\n */\r\n public angleTo(vectorB: XAndY): Angle {\r\n return Angle.createRadians(this.radiansTo(vectorB));\r\n }\r\n /**\r\n * Test if this vector is parallel to other.\r\n * * The input tolerances in `options`, if given, are considered to be squared for efficiency's sake,\r\n * so if you have a distance or angle tolerance t, you should pass in t * t.\r\n * @param other second vector for comparison.\r\n * @param oppositeIsParallel whether to consider diametrically opposed vectors as parallel.\r\n * @param options optional radian and distance tolerances.\r\n */\r\n public isParallelTo(other: Vector2d, oppositeIsParallel: boolean = false,\r\n returnValueIfAnInputIsZeroLength: boolean = false, options?: PerpParallelOptions): boolean {\r\n const radianSquaredTol: number = options?.radianSquaredTol ?? Geometry.smallAngleRadiansSquared;\r\n const distanceSquaredTol: number = options?.distanceSquaredTol ?? Geometry.smallMetricDistanceSquared;\r\n const a2 = this.magnitudeSquared();\r\n const b2 = other.magnitudeSquared();\r\n if (a2 < distanceSquaredTol || b2 < distanceSquaredTol)\r\n return returnValueIfAnInputIsZeroLength;\r\n const dot = this.dotProduct(other);\r\n if (dot < 0.0 && !oppositeIsParallel)\r\n return false;\r\n const cross = this.crossProduct(other);\r\n /* a2,b2,cross2 are squared lengths of respective vectors */\r\n /* cross2 = sin^2(theta) * a2 * b2 */\r\n /* For small theta, sin^2(theta)~~theta^2 */\r\n return cross * cross <= radianSquaredTol * a2 * b2;\r\n }\r\n /**\r\n * Test if this vector is perpendicular to other.\r\n * * The input tolerances in `options`, if given, are considered to be squared for efficiency's sake,\r\n * so if you have a distance or angle tolerance t, you should pass in t * t.\r\n * @param other second vector in comparison.\r\n * @param returnValueIfAnInputIsZeroLength if either vector is near zero length, return this value.\r\n * @param options optional radian and distance tolerances.\r\n */\r\n public isPerpendicularTo(other: Vector2d, returnValueIfAnInputIsZeroLength: boolean = false, options?: PerpParallelOptions): boolean {\r\n const radianSquaredTol: number = options?.radianSquaredTol ?? Geometry.smallAngleRadiansSquared;\r\n const distanceSquaredTol: number = options?.distanceSquaredTol ?? Geometry.smallMetricDistanceSquared;\r\n const aa = this.magnitudeSquared();\r\n const bb = other.magnitudeSquared();\r\n if (aa < distanceSquaredTol || bb < distanceSquaredTol)\r\n return returnValueIfAnInputIsZeroLength;\r\n const ab = this.dotProduct(other);\r\n return ab * ab <= radianSquaredTol * aa * bb;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Point2dVector2d.js","sourceRoot":"","sources":["../../../src/geometry3d/Point2dVector2d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n// cspell:word JSONXY\r\n// cspell:word CWXY CCWXY\r\n\r\nimport { BeJSONFunctions, Geometry, PerpParallelOptions } from \"../Geometry\";\r\nimport { Angle } from \"./Angle\";\r\nimport { XAndY, XYProps } from \"./XYZProps\";\r\n\r\n/**\r\n * Minimal object containing x,y and operations that are meaningful without change in both point and vector.\r\n * * `XY` is not instantiable.\r\n * * The derived (instantiable) classes are\r\n * * `Point2d`\r\n * * `Vector2d`\r\n * @public\r\n */\r\nexport class XY implements XAndY {\r\n /** x component */\r\n public x: number;\r\n /** y component */\r\n public y: number;\r\n /** Set both x and y. */\r\n public set(x: number = 0, y: number = 0) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n /** Set both x and y to zero */\r\n public setZero() {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n protected constructor(x: number = 0, y: number = 0) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n /** Set both x and y from other. */\r\n public setFrom(other?: XAndY) {\r\n if (other) {\r\n this.x = other.x;\r\n this.y = other.y;\r\n } else {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n }\r\n /** Freeze this instance so it is read-only */\r\n public freeze(): Readonly<this> {\r\n return Object.freeze(this);\r\n }\r\n /** Returns true if this and other have equal x,y parts within Geometry.smallMetricDistance. */\r\n public isAlmostEqual(other: XAndY, tol?: number): boolean {\r\n return Geometry.isSameCoordinate(this.x, other.x, tol) && Geometry.isSameCoordinate(this.y, other.y, tol);\r\n }\r\n /** Returns true if this and other have equal x,y parts within Geometry.smallMetricDistance. */\r\n public isAlmostEqualXY(x: number, y: number, tol?: number): boolean {\r\n return Geometry.isSameCoordinate(this.x, x, tol) && Geometry.isSameCoordinate(this.y, y, tol);\r\n }\r\n /** Return a json array `[x,y]` */\r\n public toJSON(): XYProps {\r\n return [this.x, this.y];\r\n }\r\n /** Return a json object `{x: 1, y:2}` */\r\n public toJSONXY(): XYProps {\r\n return { x: this.x, y: this.y };\r\n }\r\n /**\r\n * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`\r\n * * If no JSON input is provided, 0 would be used as default values for x and y.\r\n * @param json the JSON input\r\n */\r\n public setFromJSON(json?: XYProps): void {\r\n if (Array.isArray(json)) {\r\n this.set(json[0] || 0, json[1] || 0);\r\n return;\r\n }\r\n if (json) {\r\n this.set(json.x || 0, json.y || 0);\r\n return;\r\n }\r\n this.set(0, 0);\r\n }\r\n /** Return the distance from this point to other */\r\n public distance(other: XAndY): number {\r\n const xDist = other.x - this.x;\r\n const yDist = other.y - this.y;\r\n return Math.sqrt(xDist * xDist + yDist * yDist);\r\n }\r\n /** Return squared distance from this point to other */\r\n public distanceSquared(other: XAndY): number {\r\n const xDist = other.x - this.x;\r\n const yDist = other.y - this.y;\r\n return xDist * xDist + yDist * yDist;\r\n }\r\n /** Return the largest absolute distance between corresponding components */\r\n public maxDiff(other: XAndY): number {\r\n return Math.max(Math.abs(this.x - other.x), Math.abs(this.y - other.y));\r\n }\r\n /** Return the x,y component corresponding to 0,1 */\r\n public at(index: number): number {\r\n if (index < 0.5)\r\n return this.x;\r\n return this.y;\r\n }\r\n /** Set value at index 0 or 1 */\r\n public setAt(index: number, value: number): void {\r\n if (index < 0.5)\r\n this.x = value;\r\n else\r\n this.y = value;\r\n }\r\n /** Return the index (0,1) of the x,y component with largest absolute value */\r\n public indexOfMaxAbs(): number {\r\n let index = 0;\r\n const a = Math.abs(this.x);\r\n const b = Math.abs(this.y);\r\n if (b > a) {\r\n index = 1;\r\n }\r\n return index;\r\n }\r\n /** Returns true if the x,y components are both small by metric metric tolerance */\r\n public get isAlmostZero(): boolean {\r\n return Geometry.isSmallMetricDistance(this.x) && Geometry.isSmallMetricDistance(this.y);\r\n }\r\n /** Return the largest absolute value of any component */\r\n public maxAbs(): number {\r\n return Math.max(Math.abs(this.x), Math.abs(this.y));\r\n }\r\n /** Return the magnitude of the vector */\r\n public magnitude(): number {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n /** Return the squared magnitude of the vector. */\r\n public magnitudeSquared(): number {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n /** Returns true if the x,y components are exactly equal. */\r\n public isExactEqual(other: XAndY): boolean {\r\n return this.x === other.x && this.y === other.y;\r\n }\r\n /** Returns true if x,y match `other` within metric tolerance */\r\n public isAlmostEqualMetric(other: XAndY, distanceTol: number = Geometry.smallMetricDistance): boolean {\r\n return this.maxDiff(other) <= distanceTol;\r\n }\r\n /** Return a (full length) vector from this point to other */\r\n public vectorTo(other: XAndY, result?: Vector2d): Vector2d {\r\n return Vector2d.create(\r\n other.x - this.x,\r\n other.y - this.y,\r\n result);\r\n }\r\n /** Return a unit vector from this point to other */\r\n public unitVectorTo(other: XAndY, result?: Vector2d): Vector2d | undefined {\r\n return this.vectorTo(other, result).normalize(result);\r\n }\r\n /** Cross product of vectors from origin to targets */\r\n public static crossProductToPoints(origin: XAndY, targetA: XAndY, targetB: XAndY): number {\r\n return Geometry.crossProductXYXY(\r\n targetA.x - origin.x, targetA.y - origin.y, targetB.x - origin.x, targetB.y - origin.y);\r\n }\r\n}\r\n\r\n/** 2D point with `x`,`y` as properties\r\n * @public\r\n */\r\nexport class Point2d extends XY implements BeJSONFunctions {\r\n /** Constructor for Point2d */\r\n constructor(x: number = 0, y: number = 0) {\r\n super(x, y);\r\n }\r\n /** Return a new Point2d with x,y coordinates from this. */\r\n public clone(result?: Point2d): Point2d {\r\n return Point2d.create(this.x, this.y, result);\r\n }\r\n /**\r\n * Return a point (newly created unless result provided) with given x,y coordinates\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @param result optional result\r\n */\r\n public static create(x: number = 0, y: number = 0, result?: Point2d): Point2d {\r\n if (result) {\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n }\r\n return new Point2d(x, y);\r\n }\r\n /**\r\n * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`\r\n * * If no JSON input is provided, 0 would be used as default values for x and y.\r\n * @param json the JSON input\r\n */\r\n public static fromJSON(json?: XYProps): Point2d {\r\n const val = new Point2d();\r\n val.setFromJSON(json);\r\n return val;\r\n }\r\n /** Create (or optionally reuse) a Point2d from another object with fields x and y */\r\n public static createFrom(xy: XAndY | undefined, result?: Point2d): Point2d {\r\n if (xy)\r\n return Point2d.create(xy.x, xy.y, result);\r\n return Point2d.create(0, 0, result);\r\n }\r\n /** Create a Point2d with both coordinates zero. */\r\n public static createZero(result?: Point2d): Point2d {\r\n return Point2d.create(0, 0, result);\r\n }\r\n /**\r\n * Starting at this point, move along vector by tangentFraction of the vector length, and then\r\n * to the left by leftFraction of the perpendicular vector length.\r\n * @param tangentFraction distance to move along the vector, as a fraction of vector\r\n * @param leftFraction distance to move perpendicular to the vector, as a fraction of the rotated vector\r\n * @param vector the other vector\r\n */\r\n public addForwardLeft(tangentFraction: number, leftFraction: number, vector: Vector2d): Point2d {\r\n const dx = vector.x;\r\n const dy = vector.y;\r\n return Point2d.create(\r\n this.x + tangentFraction * dx - leftFraction * dy,\r\n this.y + tangentFraction * dy + leftFraction * dx\r\n );\r\n }\r\n /**\r\n * Interpolate at tangentFraction between this instance and point, and then Move by leftFraction\r\n * along the xy perpendicular of the vector between the points.\r\n */\r\n public forwardLeftInterpolate(tangentFraction: number, leftFraction: number, point: XAndY): Point2d {\r\n const dx = point.x - this.x;\r\n const dy = point.y - this.y;\r\n return Point2d.create(\r\n this.x + tangentFraction * dx - leftFraction * dy,\r\n this.y + tangentFraction * dy + leftFraction * dx\r\n );\r\n }\r\n /** Return a point interpolated between this point and the right param. */\r\n public interpolate(fraction: number, other: XAndY, result?: Point2d): Point2d {\r\n if (fraction <= 0.5)\r\n return Point2d.create(\r\n this.x + fraction * (other.x - this.x),\r\n this.y + fraction * (other.y - this.y),\r\n result\r\n );\r\n const t: number = fraction - 1.0;\r\n return Point2d.create(\r\n other.x + t * (other.x - this.x),\r\n other.y + t * (other.y - this.y),\r\n result\r\n );\r\n }\r\n /** Return a point with independent x,y fractional interpolation. */\r\n public interpolateXY(fractionX: number, fractionY: number, other: XAndY, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n Geometry.interpolate(this.x, fractionX, other.x),\r\n Geometry.interpolate(this.y, fractionY, other.y),\r\n result\r\n );\r\n }\r\n /** Return this point minus vector */\r\n public minus(vector: XAndY, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x - vector.x,\r\n this.y - vector.y,\r\n result\r\n );\r\n }\r\n /** Return point plus vector */\r\n public plus(vector: XAndY, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vector.x,\r\n this.y + vector.y,\r\n result\r\n );\r\n }\r\n /** Return point plus vector */\r\n public plusXY(dx: number = 0, dy: number = 0, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + dx,\r\n this.y + dy, result\r\n );\r\n }\r\n /** Return point + vector * scalar */\r\n public plusScaled(vector: XAndY, scaleFactor: number, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vector.x * scaleFactor,\r\n this.y + vector.y * scaleFactor,\r\n result\r\n );\r\n }\r\n /** Return point + vectorA * scalarA + vectorB * scalarB */\r\n public plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vectorA.x * scalarA + vectorB.x * scalarB,\r\n this.y + vectorA.y * scalarA + vectorB.y * scalarB,\r\n result\r\n );\r\n }\r\n /** Return point + vectorA * scalarA + vectorB * scalarB + vectorC * scalarC */\r\n public plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number,\r\n vectorC: XAndY, scalarC: number, result?: Point2d): Point2d {\r\n return Point2d.create(\r\n this.x + vectorA.x * scalarA + vectorB.x * scalarB + vectorC.x * scalarC,\r\n this.y + vectorA.y * scalarA + vectorB.y * scalarB + vectorC.y * scalarC,\r\n result\r\n );\r\n }\r\n /**\r\n * Return the dot product of vector from this to targetA and vector from this to targetB\r\n * @param targetA target of first vector\r\n * @param targetB target of second vector\r\n */\r\n public dotVectorsToTargets(targetA: XAndY, targetB: XAndY): number {\r\n return (targetA.x - this.x) * (targetB.x - this.x) + (targetA.y - this.y) * (targetB.y - this.y);\r\n }\r\n /**\r\n * Returns the (scalar) cross product of vector from this to targetA and vector from this to targetB\r\n * @param target1 target of first vector\r\n * @param target2 target of second vector\r\n */\r\n public crossProductToPoints(target1: XAndY, target2: XAndY): number {\r\n const x1 = target1.x - this.x;\r\n const y1 = target1.y - this.y;\r\n const x2 = target2.x - this.x;\r\n const y2 = target2.y - this.y;\r\n return x1 * y2 - y1 * x2;\r\n }\r\n /**\r\n * Return the fractional coordinate of the projection of this instance x,y onto the\r\n * line from startPoint to endPoint.\r\n * @param startPoint start point of line\r\n * @param endPoint end point of line\r\n * @param defaultFraction fraction to return if startPoint and endPoint are equal.\r\n */\r\n public fractionOfProjectionToLine(startPoint: Point2d, endPoint: Point2d, defaultFraction: number = 0): number {\r\n const denominator = startPoint.distanceSquared(endPoint);\r\n if (denominator < Geometry.smallMetricDistanceSquared)\r\n return defaultFraction;\r\n const numerator = startPoint.dotVectorsToTargets(endPoint, this);\r\n return numerator / denominator;\r\n }\r\n}\r\n\r\n/**\r\n * 2D vector with `x`,`y` as properties\r\n * @public\r\n */\r\nexport class Vector2d extends XY implements BeJSONFunctions {\r\n constructor(x: number = 0, y: number = 0) {\r\n super(x, y);\r\n }\r\n /** Return a new Vector2d with the same x,y */\r\n public clone(result?: Vector2d): Vector2d {\r\n return Vector2d.create(this.x, this.y, result);\r\n }\r\n /** Return a new Vector2d with given x and y */\r\n public static create(x: number = 0, y: number = 0, result?: Vector2d): Vector2d {\r\n if (result) {\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n }\r\n return new Vector2d(x, y);\r\n }\r\n /**\r\n * Return a (new) Vector2d with components scale,0\r\n * If scale is not given default value 1 is used.\r\n */\r\n public static unitX(scale: number = 1): Vector2d {\r\n return new Vector2d(scale, 0);\r\n }\r\n /**\r\n * Return a (new) Vector2d with components 0,scale\r\n * If scale is not given default value 1 is used.\r\n */\r\n public static unitY(scale: number = 1): Vector2d {\r\n return new Vector2d(0, scale);\r\n }\r\n /** Return a Vector2d with components 0,0 */\r\n public static createZero(result?: Vector2d): Vector2d {\r\n return Vector2d.create(0, 0, result);\r\n }\r\n /** Copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */\r\n public static createFrom(data: XAndY | Float64Array, result?: Vector2d): Vector2d {\r\n if (data instanceof Float64Array) {\r\n if (data.length >= 2)\r\n return Vector2d.create(data[0], data[1]);\r\n if (data.length >= 1)\r\n return Vector2d.create(data[0], 0);\r\n return Vector2d.create(0, 0);\r\n }\r\n return Vector2d.create(data.x, data.y, result);\r\n }\r\n /**\r\n * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`\r\n * * If no JSON input is provided, 0 would be used as default values for x and y.\r\n * @param json the JSON input\r\n */\r\n public static fromJSON(json?: XYProps): Vector2d {\r\n const val = new Vector2d();\r\n val.setFromJSON(json);\r\n return val;\r\n }\r\n /** Return a new Vector2d from polar coordinates for radius and Angle from x axis */\r\n public static createPolar(r: number, theta: Angle): Vector2d {\r\n return Vector2d.create(r * theta.cos(), r * theta.sin());\r\n }\r\n /** Return a new Vector2d extending from point0 to point1 */\r\n public static createStartEnd(point0: XAndY, point1: XAndY, result?: Vector2d): Vector2d {\r\n return Vector2d.create(point1.x - point0.x, point1.y - point0.y, result);\r\n }\r\n /**\r\n * Return a vector that bisects the angle between two normals and extends to the intersection of two offset lines\r\n * * returns `undefined` if `unitPerpA = -unitPerpB` (i.e., are opposite)\r\n * * math details can be found at docs/learning/geometry/PointVector.md\r\n * @param unitPerpA unit perpendicular to incoming direction\r\n * @param unitPerpB unit perpendicular to outgoing direction\r\n * @param offset offset distance\r\n */\r\n public static createOffsetBisector(unitPerpA: Vector2d, unitPerpB: Vector2d, offset: number): Vector2d | undefined {\r\n let bisector: Vector2d | undefined = unitPerpA.plus(unitPerpB);\r\n bisector = bisector.normalize();\r\n if (bisector) {\r\n const c = bisector.dotProduct(unitPerpA);\r\n bisector.scale(offset, bisector);\r\n return bisector.safeDivideOrNull(c);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Return a (new or optionally reused) vector which is `this` divided by `denominator`\r\n * * return undefined if denominator is zero.\r\n */\r\n public safeDivideOrNull(denominator: number, result?: Vector2d): Vector2d | undefined {\r\n if (denominator !== 0.0) {\r\n return this.scale(1.0 / denominator, result);\r\n }\r\n return undefined;\r\n }\r\n /** Return a unit vector in direction of this instance (undefined if this instance has near zero length) */\r\n public normalize(result?: Vector2d): Vector2d | undefined {\r\n const mag = Geometry.correctSmallMetricDistance(this.magnitude());\r\n result = result ? result : new Vector2d();\r\n return this.safeDivideOrNull(mag, result);\r\n }\r\n /**\r\n * Return fractional projection of target vector onto this\r\n * * It's returning the signed projection magnitude divided by the target magnitude. In other words,\r\n * it's returning the length of the projection as a fraction of the target magnitude.\r\n * @param target the target vector\r\n * @param defaultFraction the returned value in case magnitude square of target vector is very small\r\n */\r\n public fractionOfProjectionToVector(target: Vector2d, defaultFraction?: number): number {\r\n /*\r\n * projection length is (this.target)/||target||\r\n * but here we return (this.target)/||target||^2\r\n */\r\n const denominator = target.magnitudeSquared();\r\n if (denominator < Geometry.smallMetricDistanceSquared)\r\n return defaultFraction ? defaultFraction : 0;\r\n const numerator = this.dotProduct(target);\r\n return numerator / denominator;\r\n }\r\n /** Return a new vector with components negated from this instance. */\r\n public negate(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = -this.x;\r\n result.y = -this.y;\r\n return result;\r\n }\r\n /** Return a vector same length as this but rotated 90 degrees counter clockwise */\r\n public rotate90CCWXY(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n result.x = -yy;\r\n result.y = xx;\r\n return result;\r\n }\r\n /** Return a vector same length as this but rotated 90 degrees clockwise */\r\n public rotate90CWXY(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n result.x = yy;\r\n result.y = -xx;\r\n return result;\r\n }\r\n /** Return a unit vector perpendicular to this instance. */\r\n public unitPerpendicularXY(result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n result.x = -yy;\r\n result.y = xx;\r\n const d2: number = xx * xx + yy * yy;\r\n if (d2 !== 0.0) {\r\n const a = 1.0 / Math.sqrt(d2);\r\n result.x *= a;\r\n result.y *= a;\r\n }\r\n return result;\r\n }\r\n /** Return a new Vector2d rotated CCW by given angle */\r\n public rotateXY(angle: Angle, result?: Vector2d): Vector2d {\r\n const s = angle.sin();\r\n const c = angle.cos();\r\n // save x,y to allow aliasing (\"this\" can be passed to the function as \"result\")\r\n const xx: number = this.x;\r\n const yy: number = this.y;\r\n result = result ? result : new Vector2d();\r\n result.x = xx * c - yy * s;\r\n result.y = xx * s + yy * c;\r\n return result;\r\n }\r\n /**\r\n * Return a vector computed at fractional position between this vector and vectorB\r\n * @param fraction fractional position. 0 is at `this`. 1 is at `vectorB`.\r\n * True fractions are \"between\", negatives are \"before this\", beyond 1 is \"beyond vectorB\".\r\n * @param vectorB second vector\r\n * @param result optional preallocated result.\r\n */\r\n public interpolate(fraction: number, vectorB: Vector2d, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n /*\r\n * For best last-bit behavior, if fraction is below 0.5, use this as base point.\r\n * If above 0.5, use vectorB as base point.\r\n */\r\n if (fraction <= 0.5) {\r\n result.x = this.x + fraction * (vectorB.x - this.x);\r\n result.y = this.y + fraction * (vectorB.y - this.y);\r\n } else {\r\n const t: number = fraction - 1.0;\r\n result.x = vectorB.x + t * (vectorB.x - this.x);\r\n result.y = vectorB.y + t * (vectorB.y - this.y);\r\n }\r\n return result;\r\n }\r\n /** Return {this + vector}. */\r\n public plus(vector: XAndY, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vector.x;\r\n result.y = this.y + vector.y;\r\n return result;\r\n }\r\n /** Return {this - vector}. */\r\n public minus(vector: XAndY, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x - vector.x;\r\n result.y = this.y - vector.y;\r\n return result;\r\n }\r\n /** Return {point + vector \\* scalar} */\r\n public plusScaled(vector: XAndY, scaleFactor: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vector.x * scaleFactor;\r\n result.y = this.y + vector.y * scaleFactor;\r\n return result;\r\n }\r\n /** Return {point + vectorA \\* scalarA + vectorB \\* scalarB} */\r\n public plus2Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vectorA.x * scalarA + vectorB.x * scalarB;\r\n result.y = this.y + vectorA.y * scalarA + vectorB.y * scalarB;\r\n return result;\r\n }\r\n /** Return {this + vectorA \\* scalarA + vectorB \\* scalarB + vectorC \\* scalarC} */\r\n public plus3Scaled(vectorA: XAndY, scalarA: number, vectorB: XAndY, scalarB: number, vectorC: XAndY, scalarC: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x + vectorA.x * scalarA + vectorB.x * scalarB + vectorC.x * scalarC;\r\n result.y = this.y + vectorA.y * scalarA + vectorB.y * scalarB + vectorC.y * scalarC;\r\n return result;\r\n }\r\n /** Return {this * scale} */\r\n public scale(scale: number, result?: Vector2d): Vector2d {\r\n result = result ? result : new Vector2d();\r\n result.x = this.x * scale;\r\n result.y = this.y * scale;\r\n return result;\r\n }\r\n /** Return a vector parallel to this but with specified length */\r\n public scaleToLength(length: number, result?: Vector2d): Vector2d | undefined {\r\n const mag = Geometry.correctSmallMetricDistance(this.magnitude());\r\n if (mag === 0)\r\n return undefined;\r\n return this.scale(length / mag, result);\r\n }\r\n /** Return the dot product of this with vectorB */\r\n public dotProduct(vectorB: XAndY): number {\r\n return this.x * vectorB.x + this.y * vectorB.y;\r\n }\r\n /** Dot product with vector from pointA to pointB */\r\n public dotProductStartEnd(pointA: XAndY, pointB: XAndY): number {\r\n return this.x * (pointB.x - pointA.x) + this.y * (pointB.y - pointA.y);\r\n }\r\n /** Vector cross product {this CROSS vectorB} */\r\n public crossProduct(vectorB: XAndY): number {\r\n return this.x * vectorB.y - this.y * vectorB.x;\r\n }\r\n /**\r\n * Return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.\r\n * This is positive if the shortest turn is counterclockwise, negative if clockwise.\r\n */\r\n public radiansTo(vectorB: XAndY): number {\r\n return Math.atan2(this.crossProduct(vectorB), this.dotProduct(vectorB));\r\n }\r\n /**\r\n * Return the (strongly typed) signed angle from this to vectorB.\r\n * This is positive if the shortest turn is counterclockwise, negative if clockwise.\r\n */\r\n public angleTo(vectorB: XAndY): Angle {\r\n return Angle.createRadians(this.radiansTo(vectorB));\r\n }\r\n /**\r\n * Test if this vector is parallel to other.\r\n * * The input tolerances in `options`, if given, are considered to be squared for efficiency's sake,\r\n * so if you have a distance or angle tolerance t, you should pass in t * t.\r\n * @param other second vector for comparison.\r\n * @param oppositeIsParallel whether to consider diametrically opposed vectors as parallel.\r\n * @param options optional radian and distance tolerances.\r\n */\r\n public isParallelTo(other: Vector2d, oppositeIsParallel: boolean = false,\r\n returnValueIfAnInputIsZeroLength: boolean = false, options?: PerpParallelOptions): boolean {\r\n const radianSquaredTol: number = options?.radianSquaredTol ?? Geometry.smallAngleRadiansSquared;\r\n const distanceSquaredTol: number = options?.distanceSquaredTol ?? Geometry.smallMetricDistanceSquared;\r\n const a2 = this.magnitudeSquared();\r\n const b2 = other.magnitudeSquared();\r\n if (a2 < distanceSquaredTol || b2 < distanceSquaredTol)\r\n return returnValueIfAnInputIsZeroLength;\r\n const dot = this.dotProduct(other);\r\n if (dot < 0.0 && !oppositeIsParallel)\r\n return false;\r\n const cross = this.crossProduct(other);\r\n /* a2,b2,cross2 are squared lengths of respective vectors */\r\n /* cross2 = sin^2(theta) * a2 * b2 */\r\n /* For small theta, sin^2(theta)~~theta^2 */\r\n return cross * cross <= radianSquaredTol * a2 * b2;\r\n }\r\n /**\r\n * Test if this vector is perpendicular to other.\r\n * * The input tolerances in `options`, if given, are considered to be squared for efficiency's sake,\r\n * so if you have a distance or angle tolerance t, you should pass in t * t.\r\n * @param other second vector in comparison.\r\n * @param returnValueIfAnInputIsZeroLength if either vector is near zero length, return this value.\r\n * @param options optional radian and distance tolerances.\r\n */\r\n public isPerpendicularTo(\r\n other: Vector2d, returnValueIfAnInputIsZeroLength: boolean = false, options?: PerpParallelOptions\r\n ): boolean {\r\n const radianSquaredTol: number = options?.radianSquaredTol ?? Geometry.smallAngleRadiansSquared;\r\n const distanceSquaredTol: number = options?.distanceSquaredTol ?? Geometry.smallMetricDistanceSquared;\r\n const aa = this.magnitudeSquared();\r\n const bb = other.magnitudeSquared();\r\n if (aa < distanceSquaredTol || bb < distanceSquaredTol)\r\n return returnValueIfAnInputIsZeroLength;\r\n const ab = this.dotProduct(other);\r\n return ab * ab <= radianSquaredTol * aa * bb;\r\n }\r\n}\r\n"]}
@@ -12,11 +12,11 @@ import { XYAndZ } from "./XYZProps";
12
12
  * @public
13
13
  */
14
14
  export declare class Point3dArrayCarrier extends IndexedReadWriteXYZCollection {
15
- /** reference to array being queried. */
15
+ /** Reference to array being queried. */
16
16
  data: Point3d[];
17
17
  /** CAPTURE caller supplied array ... */
18
18
  constructor(data: Point3d[]);
19
- /** test if `index` is a valid index into the array. */
19
+ /** Test if `index` is a valid index into the array. */
20
20
  isValidIndex(index: number): boolean;
21
21
  /**
22
22
  * Access by index, returning strongly typed Point3d
@@ -41,19 +41,19 @@ export declare class Point3dArrayCarrier extends IndexedReadWriteXYZCollection {
41
41
  */
42
42
  getVector3dAtCheckedVectorIndex(index: number, result?: Vector3d): Vector3d | undefined;
43
43
  /**
44
- * access x of indexed point
44
+ * Access x of indexed point
45
45
  * * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
46
- * */
46
+ */
47
47
  getXAtUncheckedPointIndex(pointIndex: number): number;
48
48
  /**
49
- * access y of indexed point
49
+ * Access y of indexed point
50
50
  * * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
51
- * */
51
+ */
52
52
  getYAtUncheckedPointIndex(pointIndex: number): number;
53
53
  /**
54
- * access z of indexed point
54
+ * Access z of indexed point
55
55
  * * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
56
- * */
56
+ */
57
57
  getZAtUncheckedPointIndex(pointIndex: number): number;
58
58
  /**
59
59
  * Return a vector from the point at indexA to the point at indexB
@@ -98,33 +98,29 @@ export declare class Point3dArrayCarrier extends IndexedReadWriteXYZCollection {
98
98
  * @returns return true if indexA, indexB both valid
99
99
  */
100
100
  accumulateCrossProductIndexIndexIndex(originIndex: number, indexA: number, indexB: number, result: Vector3d): void;
101
- /**
102
- * Accumulate scale times the x,y,z values at index to the sum.
103
- * No action if index is out of bounds.
104
- */
101
+ /** Accumulate scale times the x,y,z values at index to the sum. No action if index is out of bounds */
105
102
  accumulateScaledXYZ(index: number, scale: number, sum: Point3d): void;
106
- /**
107
- * read-only property for number of XYZ in the collection.
108
- */
103
+ /** Read-only property for number of XYZ in the collection */
109
104
  get length(): number;
110
- /** push a (clone of) point onto the collection
105
+ /**
106
+ * Push a (clone of) point onto the collection
111
107
  * * point itself is not pushed -- xyz data is extracted into the native form of the collection.
112
108
  */
113
109
  push(data: Point3d): void;
114
110
  /**
115
- * push a new point (given by coordinates) onto the collection
111
+ * Push a new point (given by coordinates) onto the collection
116
112
  * @param x x coordinate
117
113
  * @param y y coordinate
118
114
  * @param z z coordinate
119
115
  */
120
116
  pushXYZ(x?: number, y?: number, z?: number): void;
121
- /** extract (copy) the final point */
117
+ /** Extract (copy) the final point */
122
118
  back(result?: Point3d): Point3d | undefined;
123
- /** extract (copy) the first point */
119
+ /** Extract (copy) the first point */
124
120
  front(result?: Point3d): Point3d | undefined;
125
- /** remove the final point. */
121
+ /** Remove the final point. */
126
122
  pop(): void;
127
- /** remove all points. */
123
+ /** Remove all points. */
128
124
  clear(): void;
129
125
  /** Reverse the points in place */
130
126
  reverseInPlace(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Point3dArrayCarrier.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Point3dArrayCarrier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Point3dArrayCarrier.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Point3dArrayCarrier.ts"],"names":[],"mappings":"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"}