plotboilerplate 1.23.3 → 1.24.0

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 (159) hide show
  1. package/README.md +6 -0
  2. package/dist/index.esm.js +1390 -265
  3. package/dist/index.esm.js.map +1 -1
  4. package/dist/index.esm.min.js +1 -1
  5. package/dist/index.esm.min.js.map +1 -1
  6. package/dist/plotboilerplate.browser.min.js +1 -1
  7. package/dist/plotboilerplate.browser.min.js.map +1 -1
  8. package/dist/plotboilerplate.js +1264 -99
  9. package/dist/plotboilerplate.min.js +1 -1
  10. package/package.json +1 -1
  11. package/src/cjs/BezierPath.d.ts +41 -5
  12. package/src/cjs/BezierPath.js +52 -2
  13. package/src/cjs/BezierPath.js.map +1 -1
  14. package/src/cjs/Bounds.d.ts +67 -3
  15. package/src/cjs/Bounds.js +101 -3
  16. package/src/cjs/Bounds.js.map +1 -1
  17. package/src/cjs/Circle.d.ts +46 -4
  18. package/src/cjs/Circle.js +82 -3
  19. package/src/cjs/Circle.js.map +1 -1
  20. package/src/cjs/CircleSector.d.ts +51 -2
  21. package/src/cjs/CircleSector.js +112 -3
  22. package/src/cjs/CircleSector.js.map +1 -1
  23. package/src/cjs/CubicBezierCurve.d.ts +113 -7
  24. package/src/cjs/CubicBezierCurve.js +281 -33
  25. package/src/cjs/CubicBezierCurve.js.map +1 -1
  26. package/src/cjs/Line.d.ts +38 -3
  27. package/src/cjs/Line.js +64 -1
  28. package/src/cjs/Line.js.map +1 -1
  29. package/src/cjs/PlotBoilerplate.js +2 -9
  30. package/src/cjs/PlotBoilerplate.js.map +1 -1
  31. package/src/cjs/Polygon.d.ts +48 -4
  32. package/src/cjs/Polygon.js +91 -16
  33. package/src/cjs/Polygon.js.map +1 -1
  34. package/src/cjs/Triangle.d.ts +52 -3
  35. package/src/cjs/Triangle.js +80 -1
  36. package/src/cjs/Triangle.js.map +1 -1
  37. package/src/cjs/VEllipse.d.ts +62 -3
  38. package/src/cjs/VEllipse.js +181 -17
  39. package/src/cjs/VEllipse.js.map +1 -1
  40. package/src/cjs/VEllipseSector.d.ts +86 -2
  41. package/src/cjs/VEllipseSector.js +148 -4
  42. package/src/cjs/VEllipseSector.js.map +1 -1
  43. package/src/cjs/Vector.d.ts +12 -2
  44. package/src/cjs/Vector.js +15 -2
  45. package/src/cjs/Vector.js.map +1 -1
  46. package/src/cjs/VertTuple.d.ts +28 -4
  47. package/src/cjs/VertTuple.js +36 -3
  48. package/src/cjs/VertTuple.js.map +1 -1
  49. package/src/cjs/Vertex.d.ts +17 -2
  50. package/src/cjs/Vertex.js +18 -1
  51. package/src/cjs/Vertex.js.map +1 -1
  52. package/src/cjs/interfaces/core.d.ts +39 -0
  53. package/src/cjs/interfaces/core.js +2 -0
  54. package/src/cjs/interfaces/core.js.map +1 -1
  55. package/src/cjs/utils/algorithms/convexPolygonIncircle.d.ts +2 -1
  56. package/src/cjs/utils/algorithms/convexPolygonIncircle.js +14 -6
  57. package/src/cjs/utils/algorithms/convexPolygonIncircle.js.map +1 -1
  58. package/src/cjs/utils/createRandomizedPolygon.d.ts +14 -0
  59. package/src/cjs/utils/createRandomizedPolygon.js +32 -0
  60. package/src/cjs/utils/createRandomizedPolygon.js.map +1 -0
  61. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +9 -7
  62. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +37 -23
  63. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  64. package/src/cjs/utils/helpers/CircleSectorHelper.d.ts +10 -1
  65. package/src/cjs/utils/helpers/CircleSectorHelper.js +19 -20
  66. package/src/cjs/utils/helpers/CircleSectorHelper.js.map +1 -1
  67. package/src/cjs/utils/helpers/VEllipseHelper.d.ts +30 -0
  68. package/src/cjs/utils/helpers/VEllipseHelper.js +86 -0
  69. package/src/cjs/utils/helpers/VEllipseHelper.js.map +1 -0
  70. package/src/cjs/utils/helpers/VEllipseSectorHelper.d.ts +42 -3
  71. package/src/cjs/utils/helpers/VEllipseSectorHelper.js +107 -25
  72. package/src/cjs/utils/helpers/VEllipseSectorHelper.js.map +1 -1
  73. package/src/createDemoDrawables.js +3 -1
  74. package/src/esm/BezierPath.d.ts +41 -5
  75. package/src/esm/BezierPath.js +50 -2
  76. package/src/esm/BezierPath.js.map +1 -1
  77. package/src/esm/Bounds.d.ts +67 -3
  78. package/src/esm/Bounds.js +101 -3
  79. package/src/esm/Bounds.js.map +1 -1
  80. package/src/esm/Circle.d.ts +46 -4
  81. package/src/esm/Circle.js +79 -3
  82. package/src/esm/Circle.js.map +1 -1
  83. package/src/esm/CircleSector.d.ts +51 -2
  84. package/src/esm/CircleSector.js +108 -3
  85. package/src/esm/CircleSector.js.map +1 -1
  86. package/src/esm/CubicBezierCurve.d.ts +113 -7
  87. package/src/esm/CubicBezierCurve.js +277 -33
  88. package/src/esm/CubicBezierCurve.js.map +1 -1
  89. package/src/esm/Line.d.ts +38 -3
  90. package/src/esm/Line.js +62 -1
  91. package/src/esm/Line.js.map +1 -1
  92. package/src/esm/PlotBoilerplate.js +2 -9
  93. package/src/esm/PlotBoilerplate.js.map +1 -1
  94. package/src/esm/Polygon.d.ts +48 -4
  95. package/src/esm/Polygon.js +89 -16
  96. package/src/esm/Polygon.js.map +1 -1
  97. package/src/esm/Triangle.d.ts +52 -3
  98. package/src/esm/Triangle.js +77 -1
  99. package/src/esm/Triangle.js.map +1 -1
  100. package/src/esm/VEllipse.d.ts +62 -3
  101. package/src/esm/VEllipse.js +178 -17
  102. package/src/esm/VEllipse.js.map +1 -1
  103. package/src/esm/VEllipseSector.d.ts +86 -2
  104. package/src/esm/VEllipseSector.js +146 -7
  105. package/src/esm/VEllipseSector.js.map +1 -1
  106. package/src/esm/Vector.d.ts +12 -2
  107. package/src/esm/Vector.js +15 -2
  108. package/src/esm/Vector.js.map +1 -1
  109. package/src/esm/VertTuple.d.ts +28 -4
  110. package/src/esm/VertTuple.js +36 -3
  111. package/src/esm/VertTuple.js.map +1 -1
  112. package/src/esm/Vertex.d.ts +17 -2
  113. package/src/esm/Vertex.js +18 -1
  114. package/src/esm/Vertex.js.map +1 -1
  115. package/src/esm/interfaces/core.d.ts +39 -0
  116. package/src/esm/interfaces/core.js +2 -0
  117. package/src/esm/interfaces/core.js.map +1 -1
  118. package/src/esm/utils/algorithms/convexPolygonIncircle.d.ts +2 -1
  119. package/src/esm/utils/algorithms/convexPolygonIncircle.js +15 -7
  120. package/src/esm/utils/algorithms/convexPolygonIncircle.js.map +1 -1
  121. package/src/esm/utils/algorithms/createRandomizedPolygon.d.ts +14 -0
  122. package/src/esm/utils/algorithms/createRandomizedPolygon.js +28 -0
  123. package/src/esm/utils/algorithms/createRandomizedPolygon.js.map +1 -0
  124. package/src/esm/utils/createRandomizedPolygon.d.ts +14 -0
  125. package/src/esm/utils/createRandomizedPolygon.js +28 -0
  126. package/src/esm/utils/createRandomizedPolygon.js.map +1 -0
  127. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +9 -7
  128. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +35 -22
  129. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  130. package/src/esm/utils/helpers/CircleSectorHelper.d.ts +10 -1
  131. package/src/esm/utils/helpers/CircleSectorHelper.js +19 -20
  132. package/src/esm/utils/helpers/CircleSectorHelper.js.map +1 -1
  133. package/src/esm/utils/helpers/VEllipseHelper.d.ts +30 -0
  134. package/src/esm/utils/helpers/VEllipseHelper.js +81 -0
  135. package/src/esm/utils/helpers/VEllipseHelper.js.map +1 -0
  136. package/src/esm/utils/helpers/VEllipseSectorHelper.d.ts +42 -3
  137. package/src/esm/utils/helpers/VEllipseSectorHelper.js +106 -24
  138. package/src/esm/utils/helpers/VEllipseSectorHelper.js.map +1 -1
  139. package/src/ts/BezierPath.ts +58 -5
  140. package/src/ts/Bounds.ts +110 -6
  141. package/src/ts/Circle.ts +87 -5
  142. package/src/ts/CircleSector.ts +115 -5
  143. package/src/ts/CubicBezierCurve.ts +332 -42
  144. package/src/ts/Line.ts +66 -3
  145. package/src/ts/PlotBoilerplate.ts +3 -9
  146. package/src/ts/Polygon.ts +103 -22
  147. package/src/ts/Triangle.ts +85 -3
  148. package/src/ts/VEllipse.ts +214 -19
  149. package/src/ts/VEllipseSector.ts +154 -8
  150. package/src/ts/Vector.ts +16 -2
  151. package/src/ts/VertTuple.ts +39 -4
  152. package/src/ts/Vertex.ts +20 -2
  153. package/src/ts/interfaces/core.ts +42 -0
  154. package/src/ts/utils/algorithms/convexPolygonIncircle.ts +82 -78
  155. package/src/ts/utils/createRandomizedPolygon.ts +31 -0
  156. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +45 -29
  157. package/src/ts/utils/helpers/CircleSectorHelper.ts +115 -125
  158. package/src/ts/utils/helpers/VEllipseHelper.ts +113 -0
  159. package/src/ts/utils/helpers/VEllipseSectorHelper.ts +142 -25
@@ -16,7 +16,11 @@
16
16
  * @modified 2021-03-19 Added the `VEllipse.rotate` function.
17
17
  * @modified 2022-02-02 Added the `destroy` method.
18
18
  * @modified 2022-02-02 Cleared the `VEllipse.toSVGString` function (deprecated). Use `drawutilssvg` instead.
19
- * @version 1.3.0
19
+ * @modified 2025-03-31 ATTENTION: modified the winding direction of the `tangentAt` method to match with the Circle method. This is a breaking change!
20
+ * @modified 2025-03-31 Adding the `VEllipse.move(amount: XYCoords)` method.
21
+ * @modified 2025-04-19 Adding the `VEllipse.getBounds()` method.
22
+ * @modified 2025-04-24 Adding the `VEllipse.getExtremePoints()` method for calculating minima and maxima.
23
+ * @version 1.4.0
20
24
  *
21
25
  * @file VEllipse
22
26
  * @fileoverview Ellipses with a center and an x- and a y-axis (stored as a vertex).
@@ -28,6 +32,8 @@ var Vector_1 = require("./Vector");
28
32
  var Vertex_1 = require("./Vertex");
29
33
  var UIDGenerator_1 = require("./UIDGenerator");
30
34
  var CubicBezierCurve_1 = require("./CubicBezierCurve");
35
+ var Circle_1 = require("./Circle");
36
+ var Bounds_1 = require("./Bounds");
31
37
  /**
32
38
  * @classdesc An ellipse class based on two vertices [centerX,centerY] and [radiusX,radiusY].
33
39
  *
@@ -109,11 +115,96 @@ var VEllipse = /** @class */ (function () {
109
115
  * @return {number} The signed vertical radius of this ellipse.
110
116
  */
111
117
  VEllipse.prototype.signedRadiusV = function () {
112
- // return Math.abs(this.axis.y - this.center.y);
113
118
  // Rotate axis back to origin before calculating radius
114
- // return Math.abs(new Vertex(this.axis).rotate(-this.rotation,this.center).y - this.center.y);
115
119
  return new Vertex_1.Vertex(this.axis).rotate(-this.rotation, this.center).y - this.center.y;
116
120
  };
121
+ /**
122
+ * Get the the minima and maxima (points) of this (rotated) ellipse.
123
+ *
124
+ * @method getExtremePoints
125
+ * @instance
126
+ * @memberof VEllipse
127
+ * @return {[Vertex, Vertex, Vertex, Vertex]} Get the the minima and maxima (points) of this (rotated) ellipse.
128
+ */
129
+ VEllipse.prototype.getExtremePoints = function () {
130
+ var a = this.radiusH();
131
+ var b = this.radiusV();
132
+ // Calculate t_x values
133
+ var t_x1 = Math.atan2(-b * Math.sin(this.rotation), a * Math.cos(this.rotation));
134
+ var t_x2 = t_x1 + Math.PI;
135
+ // Calculate x values at t_x
136
+ var x_x1 = this.center.x + a * Math.cos(t_x1) * Math.cos(this.rotation) - b * Math.sin(t_x1) * Math.sin(this.rotation);
137
+ var y_x1 = this.center.y + a * Math.cos(t_x1) * Math.sin(this.rotation) + b * Math.sin(t_x1) * Math.cos(this.rotation);
138
+ var x_x2 = this.center.x + a * Math.cos(t_x2) * Math.cos(this.rotation) - b * Math.sin(t_x2) * Math.sin(this.rotation);
139
+ var y_x2 = this.center.y + a * Math.cos(t_x2) * Math.sin(this.rotation) + b * Math.sin(t_x2) * Math.cos(this.rotation);
140
+ var x_max, x_min;
141
+ if (x_x1 > x_x2) {
142
+ x_max = new Vertex_1.Vertex(x_x1, y_x1);
143
+ x_min = new Vertex_1.Vertex(x_x2, y_x2);
144
+ }
145
+ else {
146
+ x_max = new Vertex_1.Vertex(x_x2, y_x2);
147
+ x_min = new Vertex_1.Vertex(x_x1, y_x1);
148
+ }
149
+ // Calculate t_y values
150
+ var t_y1 = Math.atan2(b * Math.cos(this.rotation), a * Math.sin(this.rotation));
151
+ var t_y2 = t_y1 + Math.PI;
152
+ // Calculate y values at t_y
153
+ var x_y1 = this.center.x + a * Math.cos(t_y1) * Math.cos(this.rotation) - b * Math.sin(t_y1) * Math.sin(this.rotation);
154
+ var y_y1 = this.center.y + a * Math.cos(t_y1) * Math.sin(this.rotation) + b * Math.sin(t_y1) * Math.cos(this.rotation);
155
+ var x_y2 = this.center.x + a * Math.cos(t_y2) * Math.cos(this.rotation) - b * Math.sin(t_y2) * Math.sin(this.rotation);
156
+ var y_y2 = this.center.y + a * Math.cos(t_y2) * Math.sin(this.rotation) + b * Math.sin(t_y2) * Math.cos(this.rotation);
157
+ var y_max, y_min;
158
+ if (y_y1 > y_y2) {
159
+ y_max = new Vertex_1.Vertex(x_y1, y_y1);
160
+ y_min = new Vertex_1.Vertex(x_y2, y_y2);
161
+ }
162
+ else {
163
+ y_max = new Vertex_1.Vertex(x_y2, y_y2);
164
+ y_min = new Vertex_1.Vertex(x_y1, y_y1);
165
+ }
166
+ return [x_max, x_min, y_max, y_min];
167
+ };
168
+ //--- BEGIN --- Implement interface `IBounded`
169
+ /**
170
+ * Get the bounds of this ellipse.
171
+ *
172
+ * The bounds are approximated by the underlying segment buffer; the more segment there are,
173
+ * the more accurate will be the returned bounds.
174
+ *
175
+ * @method getBounds
176
+ * @instance
177
+ * @memberof VEllipse
178
+ * @return {Bounds} The bounds of this ellipse.
179
+ **/
180
+ VEllipse.prototype.getBounds = function () {
181
+ // Thanks to Cuixiping
182
+ // https://stackoverflow.com/questions/87734/how-do-you-calculate-the-axis-aligned-bounding-box-of-an-ellipse
183
+ var r1 = this.radiusH();
184
+ var r2 = this.radiusV();
185
+ var ux = r1 * Math.cos(this.rotation);
186
+ var uy = r1 * Math.sin(this.rotation);
187
+ var vx = r2 * Math.cos(this.rotation + Math.PI / 2);
188
+ var vy = r2 * Math.sin(this.rotation + Math.PI / 2);
189
+ var bbox_halfwidth = Math.sqrt(ux * ux + vx * vx);
190
+ var bbox_halfheight = Math.sqrt(uy * uy + vy * vy);
191
+ return new Bounds_1.Bounds({ x: this.center.x - bbox_halfwidth, y: this.center.y - bbox_halfheight }, { x: this.center.x + bbox_halfwidth, y: this.center.y + bbox_halfheight });
192
+ };
193
+ //--- BEGIN --- Implement interface `IBounded`
194
+ /**
195
+ * Move the ellipse by the given amount. This is equivalent by moving the `center` and `axis` points.
196
+ *
197
+ * @method move
198
+ * @param {XYCoords} amount - The amount to move.
199
+ * @instance
200
+ * @memberof VEllipse
201
+ * @return {VEllipse} this for chaining
202
+ **/
203
+ VEllipse.prototype.move = function (amount) {
204
+ this.center.add(amount);
205
+ this.axis.add(amount);
206
+ return this;
207
+ };
117
208
  /**
118
209
  * Scale this ellipse by the given factor from the center point. The factor will be applied to both radii.
119
210
  *
@@ -171,7 +262,7 @@ var VEllipse = /** @class */ (function () {
171
262
  * @param {number=1.0} length - [optional, default=1] The length of the returned vector.
172
263
  */
173
264
  VEllipse.prototype.normalAt = function (angle, length) {
174
- var point = this.vertAt(angle);
265
+ var point = this.vertAt(angle - this.rotation); // HERE IS THE CORRECT BEHAVIOR!
175
266
  var foci = this.getFoci();
176
267
  // Calculate the angle between [point,focusA] and [point,focusB]
177
268
  var angleA = new Line_1.Line(point, foci[0]).angle();
@@ -183,12 +274,13 @@ var VEllipse = /** @class */ (function () {
183
274
  .addX(50)
184
275
  .clone()
185
276
  .rotate(Math.PI + centerAngle, point);
186
- if (this.center.distance(endPointA) < this.center.distance(endPointB)) {
187
- return new Vector_1.Vector(point, endPointB);
188
- }
189
- else {
190
- return new Vector_1.Vector(point, endPointA);
277
+ var resultVector = this.center.distance(endPointA) < this.center.distance(endPointB)
278
+ ? new Vector_1.Vector(point, endPointB)
279
+ : new Vector_1.Vector(point, endPointA);
280
+ if (typeof length === "number") {
281
+ resultVector.setLength(length);
191
282
  }
283
+ return resultVector;
192
284
  };
193
285
  /**
194
286
  * Get the tangent vector at the given angle.
@@ -207,9 +299,7 @@ var VEllipse = /** @class */ (function () {
207
299
  */
208
300
  VEllipse.prototype.tangentAt = function (angle, length) {
209
301
  var normal = this.normalAt(angle, length);
210
- // Rotate the normal by 90 degrees, then it is the tangent.
211
- normal.b.rotate(Math.PI / 2, normal.a);
212
- return normal;
302
+ return normal.inv().perp();
213
303
  };
214
304
  /**
215
305
  * Get the perimeter of this ellipse.
@@ -260,6 +350,8 @@ var VEllipse = /** @class */ (function () {
260
350
  /**
261
351
  * Get equally distributed points on the outline of this ellipse.
262
352
  *
353
+ * @method getEquidistantVertices
354
+ * @instance
263
355
  * @param {number} pointCount - The number of points.
264
356
  * @returns {Array<Vertex>}
265
357
  */
@@ -271,6 +363,78 @@ var VEllipse = /** @class */ (function () {
271
363
  }
272
364
  return result;
273
365
  };
366
+ //--- BEGIN --- Implement interface `Intersectable`
367
+ /**
368
+ * Get the line intersections as vectors with this ellipse.
369
+ *
370
+ * @method lineIntersections
371
+ * @instance
372
+ * @param {VertTuple<Vector> ray - The line/ray to intersect this ellipse with.
373
+ * @param {boolean} inVectorBoundsOnly - (default=false) Set to true if only intersections within the vector bounds are of interest.
374
+ * @returns
375
+ */
376
+ VEllipse.prototype.lineIntersections = function (ray, inVectorBoundsOnly) {
377
+ // Question: what happens to extreme versions when ellipse is a line (width or height is zero)?
378
+ // This would result in a Division_by_Zero exception!
379
+ if (inVectorBoundsOnly === void 0) { inVectorBoundsOnly = false; }
380
+ // Step A: create clones for operations (keep originals unchanged)
381
+ var ellipseCopy = this.clone(); // VEllipse
382
+ var rayCopy = ray.clone(); // Vector
383
+ // Step B: move both so ellipse's center is located at (0,0)
384
+ var moveAmount = ellipseCopy.center.clone().inv();
385
+ ellipseCopy.move(moveAmount);
386
+ rayCopy.add(moveAmount);
387
+ // Step C: rotate eclipse backwards it's rotation, so that rotation is zero (0.0).
388
+ // Rotate together with ray!
389
+ var rotationAmount = -ellipseCopy.rotation;
390
+ ellipseCopy.rotate(rotationAmount); // Rotation around (0,0) = center of translated ellipse
391
+ rayCopy.a.rotate(rotationAmount, ellipseCopy.center);
392
+ rayCopy.b.rotate(rotationAmount, ellipseCopy.center);
393
+ // Step D: find x/y factors to use for scaling to transform the ellipse to a circle.
394
+ // Scale together with vector ray.
395
+ var radiusH = ellipseCopy.radiusH();
396
+ var radiusV = ellipseCopy.radiusV();
397
+ var scalingFactors = radiusH > radiusV ? { x: radiusV / radiusH, y: 1.0 } : { x: 1.0, y: radiusH / radiusV };
398
+ // Step E: scale ellipse AND ray by calculated factors.
399
+ ellipseCopy.axis.scaleXY(scalingFactors);
400
+ rayCopy.a.scaleXY(scalingFactors);
401
+ rayCopy.b.scaleXY(scalingFactors);
402
+ // Intermediate result: now the ellipse is transformed to a circle and we can calculate intersections :)
403
+ // Step F: calculate circle+line intersecions
404
+ var tmpCircle = new Circle_1.Circle(new Vertex_1.Vertex(), ellipseCopy.radiusH()); // radiusH() === radiusV()
405
+ var intersections = tmpCircle.lineIntersections(rayCopy, inVectorBoundsOnly);
406
+ // Step G: transform intersecions back to original configuration
407
+ intersections.forEach(function (intersectionPoint) {
408
+ // Reverse transformation from above.
409
+ intersectionPoint.scaleXY({ x: 1 / scalingFactors.x, y: 1 / scalingFactors.y }, ellipseCopy.center);
410
+ intersectionPoint.rotate(-rotationAmount, ellipseCopy.center);
411
+ intersectionPoint.sub(moveAmount);
412
+ });
413
+ return intersections;
414
+ };
415
+ /**
416
+ * Get all line intersections of this polygon and their tangents along the shape.
417
+ *
418
+ * This method returns all intersection tangents (as vectors) with this shape. The returned array of vectors is in no specific order.
419
+ *
420
+ * @param line
421
+ * @param lineIntersectionTangents
422
+ * @returns
423
+ */
424
+ VEllipse.prototype.lineIntersectionTangents = function (line, inVectorBoundsOnly) {
425
+ var _this = this;
426
+ if (inVectorBoundsOnly === void 0) { inVectorBoundsOnly = false; }
427
+ // Find the intersections of all lines plus their tangents inside the circle bounds
428
+ var interSectionPoints = this.lineIntersections(line, inVectorBoundsOnly);
429
+ return interSectionPoints.map(function (vert) {
430
+ // Calculate angle
431
+ var lineFromCenter = new Line_1.Line(_this.center, vert);
432
+ var angle = lineFromCenter.angle();
433
+ // Calculate tangent at angle
434
+ return _this.tangentAt(angle);
435
+ });
436
+ };
437
+ //--- END --- Implement interface `Intersectable`
274
438
  /**
275
439
  * Convert this ellipse into cubic Bézier curves.
276
440
  *
@@ -283,7 +447,7 @@ var VEllipse = /** @class */ (function () {
283
447
  // Math by Luc Maisonobe
284
448
  // http://www.spaceroots.org/documents/ellipse/node22.html
285
449
  // Note that ellipses with radiusH=0 or radiusV=0 cannot be represented as Bézier curves.
286
- // Return a single line here (as a Bézier curve)
450
+ // Return a single line here (as a Bézier curve)?
287
451
  // if (Math.abs(this.radiusV()) < 0.00001) {
288
452
  // const radiusH = this.radiusH();
289
453
  // return [
@@ -313,10 +477,10 @@ var VEllipse = /** @class */ (function () {
313
477
  var radiusV = this.radiusV();
314
478
  var curves = [];
315
479
  var angles = VEllipse.utils.equidistantVertAngles(radiusH, radiusV, segmentCount);
316
- var curAngle = angles[0];
480
+ var curAngle = angles[0] + this.rotation;
317
481
  var startPoint = this.vertAt(curAngle);
318
482
  for (var i = 0; i < angles.length; i++) {
319
- var nextAngle = angles[(i + 1) % angles.length];
483
+ var nextAngle = angles[(i + 1) % angles.length] + this.rotation;
320
484
  var endPoint = this.vertAt(nextAngle);
321
485
  if (Math.abs(radiusV) < 0.0001 || Math.abs(radiusH) < 0.0001) {
322
486
  // Distorted ellipses can only be approximated by linear Bézier segments
@@ -325,8 +489,8 @@ var VEllipse = /** @class */ (function () {
325
489
  curves.push(curve);
326
490
  }
327
491
  else {
328
- var startTangent = this.tangentAt(curAngle);
329
- var endTangent = this.tangentAt(nextAngle);
492
+ var startTangent = this.tangentAt(curAngle + this.rotation);
493
+ var endTangent = this.tangentAt(nextAngle + this.rotation);
330
494
  // Find intersection (ignore that the result might be null in some extreme cases)
331
495
  var intersection = startTangent.intersection(endTangent);
332
496
  // What if intersection is undefined?
@@ -1 +1 @@
1
- {"version":3,"file":"VEllipse.js","sourceRoot":"","sources":["../ts/VEllipse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VEllipse.js","sourceRoot":"","sources":["../ts/VEllipse.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,22 @@
6
6
  * @date 2021-02-26
7
7
  * @modified 2022-02-02 Added the `destroy` method.
8
8
  * @modified 2022-11-01 Tweaked the `endpointToCenterParameters` function to handle negative values, too, without errors.
9
- * @version 1.1.1
9
+ * @modified 2025-04-01 Adapting a the `toCubicBezier` calculation to match an underlying change in the vertAt and tangentAt calculation of ellipses (was required to hamonize both methods with circles).
10
+ * @modified 2025-04-02 Adding `VEllipseSector.containsAngle` method.
11
+ * @modified 2025-04-02 Adding `VEllipseSector.lineIntersections` and `VEllipseSector.lineIntersectionTangents` and implementing `Intersectable`.
12
+ * @modified 2025-04-07 Adding value wrapping (0 to TWO_PI) to the `VEllipseSector.containsAngle` method.
13
+ * @modified 2025-04-09 Adding the `VEllipseSector.move` method.
14
+ * @modified 2025-04-19 Added the `VEllipseSector.getStartPoint` and `getEndPoint` methods.
15
+ * @modified 2025-04-23 Added the `VEllipseSector.getBounds` method.
16
+ * @version 1.2.0
10
17
  */
18
+ import { Bounds } from "./Bounds";
11
19
  import { CubicBezierCurve } from "./CubicBezierCurve";
12
- import { SVGPathParams, UID } from "./interfaces";
20
+ import { SVGPathParams, UID, XYCoords } from "./interfaces";
21
+ import { Vector } from "./Vector";
13
22
  import { VEllipse } from "./VEllipse";
23
+ import { Vertex } from "./Vertex";
24
+ import { VertTuple } from "./VertTuple";
14
25
  /**
15
26
  * @classdesc A class for elliptic sectors.
16
27
  *
@@ -74,6 +85,79 @@ export declare class VEllipseSector {
74
85
  * @param {numner} endAngle - The end angle of the sector.
75
86
  */
76
87
  constructor(ellipse: VEllipse, startAngle: number, endAngle: number);
88
+ /**
89
+ * Move the ellipse sector by the given amount.
90
+ *
91
+ * @method move
92
+ * @param {XYCoords} amount - The amount to move.
93
+ * @instance
94
+ * @memberof VEllipseSector
95
+ * @return {VEllipseSector} this for chaining
96
+ **/
97
+ move(amount: XYCoords): VEllipseSector;
98
+ /**
99
+ * Checks wether the given angle (must be inside 0 and PI*2) is contained inside this sector.
100
+ *
101
+ * @param {number} angle - The numeric angle to check.
102
+ * @method containsAngle
103
+ * @instance
104
+ * @memberof VEllipseSectpr
105
+ * @return {boolean} True if (and only if) this sector contains the given angle.
106
+ */
107
+ containsAngle(angle: number): boolean;
108
+ /**
109
+ * Get the sectors starting point (on the underlying ellipse, located at the start angle).
110
+ *
111
+ * @method getStartPoint
112
+ * @instance
113
+ * @memberof VEllipseSector
114
+ * @return {Vertex} The sector's stating point.
115
+ */
116
+ getStartPoint(): Vertex;
117
+ /**
118
+ * Get the sectors ending point (on the underlying ellipse, located at the end angle).
119
+ *
120
+ * @method getEndPoint
121
+ * @instance
122
+ * @memberof VEllipseSector
123
+ * @return {Vertex} The sector's ending point.
124
+ */
125
+ getEndPoint(): Vertex;
126
+ /**
127
+ * Get the bounds of this elliptic sector.
128
+ *
129
+ * The bounds are approximated by the underlying segment buffer; the more segment there are,
130
+ * the more accurate will be the returned bounds.
131
+ *
132
+ * @method getBounds
133
+ * @instance
134
+ * @memberof VEllipse
135
+ * @return {Bounds} The bounds of this elliptic sector.
136
+ **/
137
+ getBounds(): Bounds;
138
+ /**
139
+ * Get the line intersections as vectors with this ellipse.
140
+ *
141
+ * @method lineIntersections
142
+ * @instance
143
+ * @memberof VEllipseSectpr
144
+ * @param {VertTuple<Vector>} ray - The line/ray to intersect this ellipse with.
145
+ * @param {boolean} inVectorBoundsOnly - (default=false) Set to true if only intersections within the vector bounds are of interest.
146
+ * @returns
147
+ */
148
+ lineIntersections(ray: VertTuple<Vector>, inVectorBoundsOnly?: boolean): Array<Vertex>;
149
+ /**
150
+ * Get all line intersections of this polygon and their tangents along the shape.
151
+ *
152
+ * This method returns all intersection tangents (as vectors) with this shape. The returned array of vectors is in no specific order.
153
+ *
154
+ * @method lineIntersections
155
+ * @memberof VEllipseSectpr
156
+ * @param line
157
+ * @param lineIntersectionTangents
158
+ * @returns
159
+ */
160
+ lineIntersectionTangents(line: VertTuple<any>, inVectorBoundsOnly?: boolean): Array<Vector>;
77
161
  /**
78
162
  * Convert this elliptic sector into cubic Bézier curves.
79
163
  *
@@ -7,10 +7,18 @@
7
7
  * @date 2021-02-26
8
8
  * @modified 2022-02-02 Added the `destroy` method.
9
9
  * @modified 2022-11-01 Tweaked the `endpointToCenterParameters` function to handle negative values, too, without errors.
10
- * @version 1.1.1
10
+ * @modified 2025-04-01 Adapting a the `toCubicBezier` calculation to match an underlying change in the vertAt and tangentAt calculation of ellipses (was required to hamonize both methods with circles).
11
+ * @modified 2025-04-02 Adding `VEllipseSector.containsAngle` method.
12
+ * @modified 2025-04-02 Adding `VEllipseSector.lineIntersections` and `VEllipseSector.lineIntersectionTangents` and implementing `Intersectable`.
13
+ * @modified 2025-04-07 Adding value wrapping (0 to TWO_PI) to the `VEllipseSector.containsAngle` method.
14
+ * @modified 2025-04-09 Adding the `VEllipseSector.move` method.
15
+ * @modified 2025-04-19 Added the `VEllipseSector.getStartPoint` and `getEndPoint` methods.
16
+ * @modified 2025-04-23 Added the `VEllipseSector.getBounds` method.
17
+ * @version 1.2.0
11
18
  */
12
19
  Object.defineProperty(exports, "__esModule", { value: true });
13
20
  exports.VEllipseSector = void 0;
21
+ var Bounds_1 = require("./Bounds");
14
22
  var CubicBezierCurve_1 = require("./CubicBezierCurve");
15
23
  var geomutils_1 = require("./geomutils");
16
24
  var Line_1 = require("./Line");
@@ -51,6 +59,142 @@ var VEllipseSector = /** @class */ (function () {
51
59
  this.startAngle = geomutils_1.geomutils.wrapMinMax(startAngle, 0, Math.PI * 2);
52
60
  this.endAngle = geomutils_1.geomutils.wrapMinMax(endAngle, 0, Math.PI * 2);
53
61
  }
62
+ /**
63
+ * Move the ellipse sector by the given amount.
64
+ *
65
+ * @method move
66
+ * @param {XYCoords} amount - The amount to move.
67
+ * @instance
68
+ * @memberof VEllipseSector
69
+ * @return {VEllipseSector} this for chaining
70
+ **/
71
+ VEllipseSector.prototype.move = function (amount) {
72
+ this.ellipse.move(amount);
73
+ return this;
74
+ };
75
+ /**
76
+ * Checks wether the given angle (must be inside 0 and PI*2) is contained inside this sector.
77
+ *
78
+ * @param {number} angle - The numeric angle to check.
79
+ * @method containsAngle
80
+ * @instance
81
+ * @memberof VEllipseSectpr
82
+ * @return {boolean} True if (and only if) this sector contains the given angle.
83
+ */
84
+ VEllipseSector.prototype.containsAngle = function (angle) {
85
+ angle = geomutils_1.geomutils.mapAngleTo2PI(angle); // wrapMinMax(angle, 0, Math.PI * 2);
86
+ var sAngle = geomutils_1.geomutils.mapAngleTo2PI(this.startAngle);
87
+ var eAngle = geomutils_1.geomutils.mapAngleTo2PI(this.endAngle);
88
+ // TODO: cleanup
89
+ // if (this.startAngle <= this.endAngle) {
90
+ // return angle >= this.startAngle && angle < this.endAngle;
91
+ // } else {
92
+ // // startAngle > endAngle
93
+ // return angle >= this.startAngle || angle < this.endAngle;
94
+ // }
95
+ if (sAngle <= eAngle) {
96
+ return angle >= sAngle && angle < eAngle;
97
+ }
98
+ else {
99
+ // startAngle > endAngle
100
+ return angle >= sAngle || angle < eAngle;
101
+ }
102
+ };
103
+ /**
104
+ * Get the sectors starting point (on the underlying ellipse, located at the start angle).
105
+ *
106
+ * @method getStartPoint
107
+ * @instance
108
+ * @memberof VEllipseSector
109
+ * @return {Vertex} The sector's stating point.
110
+ */
111
+ VEllipseSector.prototype.getStartPoint = function () {
112
+ return this.ellipse.vertAt(this.startAngle);
113
+ };
114
+ /**
115
+ * Get the sectors ending point (on the underlying ellipse, located at the end angle).
116
+ *
117
+ * @method getEndPoint
118
+ * @instance
119
+ * @memberof VEllipseSector
120
+ * @return {Vertex} The sector's ending point.
121
+ */
122
+ VEllipseSector.prototype.getEndPoint = function () {
123
+ return this.ellipse.vertAt(this.endAngle);
124
+ };
125
+ //--- BEGIN --- Implement interface `IBounded`
126
+ /**
127
+ * Get the bounds of this elliptic sector.
128
+ *
129
+ * The bounds are approximated by the underlying segment buffer; the more segment there are,
130
+ * the more accurate will be the returned bounds.
131
+ *
132
+ * @method getBounds
133
+ * @instance
134
+ * @memberof VEllipse
135
+ * @return {Bounds} The bounds of this elliptic sector.
136
+ **/
137
+ VEllipseSector.prototype.getBounds = function () {
138
+ var _this = this;
139
+ // Calculage angles from east, west, north and south box points and check if they are inside
140
+ var extremes = this.ellipse.getExtremePoints();
141
+ var candidates = extremes.filter(function (point) {
142
+ var angle = new Line_1.Line(_this.ellipse.center, point).angle() - _this.ellipse.rotation;
143
+ return _this.containsAngle(angle);
144
+ });
145
+ return Bounds_1.Bounds.computeFromVertices([this.getStartPoint(), this.getEndPoint()].concat(candidates));
146
+ };
147
+ //--- BEGIN --- Implement interface `Intersectable`
148
+ /**
149
+ * Get the line intersections as vectors with this ellipse.
150
+ *
151
+ * @method lineIntersections
152
+ * @instance
153
+ * @memberof VEllipseSectpr
154
+ * @param {VertTuple<Vector>} ray - The line/ray to intersect this ellipse with.
155
+ * @param {boolean} inVectorBoundsOnly - (default=false) Set to true if only intersections within the vector bounds are of interest.
156
+ * @returns
157
+ */
158
+ VEllipseSector.prototype.lineIntersections = function (ray, inVectorBoundsOnly) {
159
+ var _this = this;
160
+ if (inVectorBoundsOnly === void 0) { inVectorBoundsOnly = false; }
161
+ // First get all line intersections from underlying ellipse.
162
+ var ellipseIntersections = this.ellipse.lineIntersections(ray, inVectorBoundsOnly);
163
+ // Drop all intersection points that are not contained in the circle sectors bounds.
164
+ var tmpLine = new Line_1.Line(this.ellipse.center, new Vertex_1.Vertex());
165
+ return ellipseIntersections.filter(function (intersectionPoint) {
166
+ tmpLine.b.set(intersectionPoint);
167
+ var lineAngle = tmpLine.angle();
168
+ return _this.containsAngle(lineAngle - _this.ellipse.rotation);
169
+ });
170
+ };
171
+ /**
172
+ * Get all line intersections of this polygon and their tangents along the shape.
173
+ *
174
+ * This method returns all intersection tangents (as vectors) with this shape. The returned array of vectors is in no specific order.
175
+ *
176
+ * @method lineIntersections
177
+ * @memberof VEllipseSectpr
178
+ * @param line
179
+ * @param lineIntersectionTangents
180
+ * @returns
181
+ */
182
+ VEllipseSector.prototype.lineIntersectionTangents = function (line, inVectorBoundsOnly) {
183
+ var _this = this;
184
+ if (inVectorBoundsOnly === void 0) { inVectorBoundsOnly = false; }
185
+ // Find the intersections of all lines plus their tangents inside the circle bounds
186
+ var interSectionPoints = this.lineIntersections(line, inVectorBoundsOnly);
187
+ return interSectionPoints.map(function (vert) {
188
+ // Calculate angle
189
+ var lineFromCenter = new Line_1.Line(_this.ellipse.center, vert);
190
+ var angle = lineFromCenter.angle();
191
+ // console.log("angle", (angle / Math.PI) * 180.0);
192
+ // const angle = Math.random() * Math.PI * 2; // TODO
193
+ // Calculate tangent at angle
194
+ return _this.ellipse.tangentAt(angle);
195
+ });
196
+ };
197
+ //--- END --- Implement interface `Intersectable`
54
198
  /**
55
199
  * Convert this elliptic sector into cubic Bézier curves.
56
200
  *
@@ -78,8 +222,8 @@ var VEllipseSector = /** @class */ (function () {
78
222
  for (var i = 0; i + 1 < angles.length; i++) {
79
223
  var nextAngle = angles[(i + 1) % angles.length];
80
224
  var endPoint = this.ellipse.vertAt(nextAngle);
81
- var startTangent = this.ellipse.tangentAt(curAngle);
82
- var endTangent = this.ellipse.tangentAt(nextAngle);
225
+ var startTangent = this.ellipse.tangentAt(curAngle + this.ellipse.rotation);
226
+ var endTangent = this.ellipse.tangentAt(nextAngle + this.ellipse.rotation);
83
227
  // Distorted ellipses can only be approximated by linear Bézier segments
84
228
  if (Math.abs(radiusV) < 0.0001 || Math.abs(radiusH) < 0.0001) {
85
229
  var diff = startPoint.difference(endPoint);
@@ -189,7 +333,7 @@ var VEllipseSector = /** @class */ (function () {
189
333
  return angle >= startAngle || (angle <= endAngle && angle >= 0);
190
334
  };
191
335
  // Drop all angles outside the sector
192
- var ellipseAngles = ellipseAngles.filter(angleIsInRange);
336
+ ellipseAngles = ellipseAngles.filter(angleIsInRange);
193
337
  // Now we need to sort the angles to the first one in the array is the closest to startAngle.
194
338
  // --> find the angle that is closest to the start angle
195
339
  var startIndex = VEllipseSector.ellipseSectorUtils.findClosestToStartAngle(startAngle, endAngle, ellipseAngles);