plotboilerplate 1.23.2 → 1.23.3

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 (101) hide show
  1. package/dist/index.esm.js +7052 -6754
  2. package/dist/index.esm.js.map +1 -1
  3. package/dist/index.esm.min.js +1 -1
  4. package/dist/index.esm.min.js.map +1 -1
  5. package/dist/plotboilerplate.browser.min.js +1 -1
  6. package/dist/plotboilerplate.browser.min.js.map +1 -1
  7. package/dist/plotboilerplate.js +329 -27
  8. package/dist/plotboilerplate.min.js +1 -1
  9. package/package.json +4 -2
  10. package/src/cjs/PlotBoilerplate.d.ts +4 -2
  11. package/src/cjs/PlotBoilerplate.js +7 -3
  12. package/src/cjs/PlotBoilerplate.js.map +1 -1
  13. package/src/cjs/Polygon.d.ts +107 -4
  14. package/src/cjs/Polygon.js +215 -9
  15. package/src/cjs/Polygon.js.map +1 -1
  16. package/src/cjs/Triangle.d.ts +23 -3
  17. package/src/cjs/Triangle.js +15 -2
  18. package/src/cjs/Triangle.js.map +1 -1
  19. package/src/cjs/VertTuple.d.ts +12 -7
  20. package/src/cjs/VertTuple.js +14 -9
  21. package/src/cjs/VertTuple.js.map +1 -1
  22. package/src/cjs/Vertex.d.ts +2 -1
  23. package/src/cjs/Vertex.js +5 -2
  24. package/src/cjs/Vertex.js.map +1 -1
  25. package/src/cjs/draw.d.ts +1 -0
  26. package/src/cjs/draw.js +2 -1
  27. package/src/cjs/draw.js.map +1 -1
  28. package/src/cjs/drawutilssvg.js +24 -0
  29. package/src/cjs/drawutilssvg.js.map +1 -1
  30. package/src/cjs/geomutils.d.ts +32 -1
  31. package/src/cjs/geomutils.js +47 -1
  32. package/src/cjs/geomutils.js.map +1 -1
  33. package/src/cjs/utils/algorithms/PolygonInset.d.ts +184 -0
  34. package/src/cjs/utils/algorithms/PolygonInset.js +431 -0
  35. package/src/cjs/utils/algorithms/PolygonInset.js.map +1 -0
  36. package/src/cjs/utils/algorithms/clearDuplicateVertices.d.ts +5 -4
  37. package/src/cjs/utils/algorithms/clearDuplicateVertices.js +6 -3
  38. package/src/cjs/utils/algorithms/clearDuplicateVertices.js.map +1 -1
  39. package/src/cjs/utils/algorithms/findPolygonSelfIntersections.d.ts +2 -1
  40. package/src/cjs/utils/algorithms/findPolygonSelfIntersections.js +3 -3
  41. package/src/cjs/utils/algorithms/findPolygonSelfIntersections.js.map +1 -1
  42. package/src/cjs/utils/algorithms/splitPolygonToNonIntersecting.d.ts +3 -2
  43. package/src/cjs/utils/algorithms/splitPolygonToNonIntersecting.js +11 -9
  44. package/src/cjs/utils/algorithms/splitPolygonToNonIntersecting.js.map +1 -1
  45. package/src/cjs/utils/detectDarkMode.js.map +1 -1
  46. package/src/cjs/utils/dom/guiSizeToggler.d.ts +2 -1
  47. package/src/cjs/utils/dom/guiSizeToggler.js +5 -3
  48. package/src/cjs/utils/dom/guiSizeToggler.js.map +1 -1
  49. package/src/esm/PlotBoilerplate.d.ts +4 -2
  50. package/src/esm/PlotBoilerplate.js +7 -3
  51. package/src/esm/PlotBoilerplate.js.map +1 -1
  52. package/src/esm/Polygon.d.ts +107 -4
  53. package/src/esm/Polygon.js +214 -9
  54. package/src/esm/Polygon.js.map +1 -1
  55. package/src/esm/Triangle.d.ts +23 -3
  56. package/src/esm/Triangle.js +15 -2
  57. package/src/esm/Triangle.js.map +1 -1
  58. package/src/esm/VertTuple.d.ts +12 -7
  59. package/src/esm/VertTuple.js +14 -9
  60. package/src/esm/VertTuple.js.map +1 -1
  61. package/src/esm/Vertex.d.ts +2 -1
  62. package/src/esm/Vertex.js +5 -2
  63. package/src/esm/Vertex.js.map +1 -1
  64. package/src/esm/draw.d.ts +1 -0
  65. package/src/esm/draw.js +2 -1
  66. package/src/esm/draw.js.map +1 -1
  67. package/src/esm/drawutilssvg.js +24 -0
  68. package/src/esm/drawutilssvg.js.map +1 -1
  69. package/src/esm/geomutils.d.ts +32 -1
  70. package/src/esm/geomutils.js +47 -1
  71. package/src/esm/geomutils.js.map +1 -1
  72. package/src/esm/utils/algorithms/PolygonInset.d.ts +184 -0
  73. package/src/esm/utils/algorithms/PolygonInset.js +424 -0
  74. package/src/esm/utils/algorithms/PolygonInset.js.map +1 -0
  75. package/src/esm/utils/algorithms/clearDuplicateVertices.d.ts +5 -4
  76. package/src/esm/utils/algorithms/clearDuplicateVertices.js +6 -3
  77. package/src/esm/utils/algorithms/clearDuplicateVertices.js.map +1 -1
  78. package/src/esm/utils/algorithms/findPolygonSelfIntersections.d.ts +2 -1
  79. package/src/esm/utils/algorithms/findPolygonSelfIntersections.js +3 -3
  80. package/src/esm/utils/algorithms/findPolygonSelfIntersections.js.map +1 -1
  81. package/src/esm/utils/algorithms/splitPolygonToNonIntersecting.d.ts +3 -2
  82. package/src/esm/utils/algorithms/splitPolygonToNonIntersecting.js +11 -9
  83. package/src/esm/utils/algorithms/splitPolygonToNonIntersecting.js.map +1 -1
  84. package/src/esm/utils/detectDarkMode.js.map +1 -1
  85. package/src/esm/utils/dom/guiSizeToggler.d.ts +2 -1
  86. package/src/esm/utils/dom/guiSizeToggler.js +4 -2
  87. package/src/esm/utils/dom/guiSizeToggler.js.map +1 -1
  88. package/src/ts/PlotBoilerplate.ts +7 -3
  89. package/src/ts/Polygon.ts +230 -9
  90. package/src/ts/Triangle.ts +18 -4
  91. package/src/ts/VertTuple.ts +15 -10
  92. package/src/ts/Vertex.ts +5 -2
  93. package/src/ts/draw.ts +2 -1
  94. package/src/ts/drawutilssvg.ts +29 -0
  95. package/src/ts/geomutils.ts +49 -1
  96. package/src/ts/utils/algorithms/PolygonInset.ts +529 -0
  97. package/src/ts/utils/algorithms/clearDuplicateVertices.ts +11 -8
  98. package/src/ts/utils/algorithms/findPolygonSelfIntersections.ts +25 -26
  99. package/src/ts/utils/algorithms/splitPolygonToNonIntersecting.ts +92 -99
  100. package/src/ts/utils/detectDarkMode.ts +1 -3
  101. package/src/ts/utils/dom/guiSizeToggler.ts +4 -2
@@ -28,13 +28,18 @@
28
28
  * @modified 2023-09-25 Added the `Polygon.lineIntersections(Line,boolean)` function.
29
29
  * @modified 2023-09-29 Added the `Polygon.closestLineIntersection(Line,boolean)` function.
30
30
  * @modified 2023-11-24 Added the `Polygon.containsPolygon(Polygon)' function.
31
- * @version 1.12.0
31
+ * @modified 2024-10-12 Added the `getEdgeAt` method.
32
+ * @modified 2024-10-30 Added the `getEdges` method.
33
+ * @modified 2024-12-02 Added the `elimitateColinearEdges` method.
34
+ * @modified 2025-02-12 Added the `containsVerts` method to test multiple vertices for containment.
35
+ * @version 1.14.0
32
36
  *
33
37
  * @file Polygon
34
38
  * @public
35
39
  **/
36
40
  import { BezierPath } from "./BezierPath";
37
41
  import { Bounds } from "./Bounds";
42
+ import { Line } from "./Line";
38
43
  import { VertTuple } from "./VertTuple";
39
44
  import { Vertex } from "./Vertex";
40
45
  import { XYCoords, SVGSerializable, UID } from "./interfaces";
@@ -96,12 +101,66 @@ export declare class Polygon implements SVGSerializable {
96
101
  /**
97
102
  * Add a vertex to the end of the `vertices` array.
98
103
  *
99
- * @method addVert
104
+ * @method addVertex
100
105
  * @param {Vertex} vert - The vertex to add.
101
106
  * @instance
102
107
  * @memberof Polygon
103
108
  **/
104
109
  addVertex(vert: Vertex): void;
110
+ /**
111
+ * Add a vertex at a particular position of the `vertices` array.
112
+ *
113
+ * @method addVertexAt
114
+ * @param {Vertex} vert - The vertex to add.
115
+ * @param {number} index - The position to add the vertex at. Will be handled modulo.
116
+ * @instance
117
+ * @memberof Polygon
118
+ **/
119
+ addVertexAt(vert: Vertex, index: number): void;
120
+ /**
121
+ * Get a new instance of the line at the given start index. The returned line will consist
122
+ * of the vertex at `vertIndex` and `vertIndex+1` (will be handled modulo).
123
+ *
124
+ * @method getEdgeAt
125
+ * @param {number} vertIndex - The vertex index of the line to start.
126
+ * @instance
127
+ * @memberof Polygon
128
+ * @return {Line}
129
+ **/
130
+ getEdgeAt(vertIndex: number): Line;
131
+ /**
132
+ * Converts this polygon into a sequence of lines. Please note that each time
133
+ * this method is called new lines are created. The underlying line vertices are no clones
134
+ * (instances).
135
+ *
136
+ * @method getEdges
137
+ * @instance
138
+ * @memberof Polygon
139
+ * @return {Array<Line>}
140
+ */
141
+ getEdges(): Array<Line>;
142
+ /**
143
+ * Checks if the angle at the given polygon vertex (index) is acute. Please not that this is
144
+ * only working for clockwise polygons. If this polygon is not clockwise please use the
145
+ * `isClockwise` method and reverse polygon vertices if needed.
146
+ *
147
+ * @method isAngleAcute
148
+ * @instance
149
+ * @memberof Polygon
150
+ * @param {number} vertIndex - The index of the polygon vertex to check.
151
+ * @returns {boolean} `true` is angle is acute, `false` is obtuse.
152
+ */
153
+ getInnerAngleAt(vertIndex: number): number;
154
+ /**
155
+ * Checks if the angle at the given polygon vertex (index) is acute.
156
+ *
157
+ * @method isAngleAcute
158
+ * @instance
159
+ * @memberof Polygon
160
+ * @param {number} vertIndex - The index of the polygon vertex to check.
161
+ * @returns {boolean} `true` is angle is acute, `false` is obtuse.
162
+ */
163
+ isAngleAcute(vertIndex: number): boolean;
105
164
  /**
106
165
  * Get the polygon vertex at the given position (index).
107
166
  *
@@ -112,7 +171,7 @@ export declare class Polygon implements SVGSerializable {
112
171
  * - getVertexAt( vertices.length + k ) == getVertexAt( k )
113
172
  * - getVertexAt( -k ) == getVertexAt( vertices.length -k )
114
173
  *
115
- * @metho getVertexAt
174
+ * @method getVertexAt
116
175
  * @param {number} index - The index of the desired vertex.
117
176
  * @instance
118
177
  * @memberof Polygon
@@ -136,12 +195,24 @@ export declare class Polygon implements SVGSerializable {
136
195
  * https://stackoverflow.com/questions/22521982/check-if-point-inside-a-polygon
137
196
  *
138
197
  * @method containsVert
139
- * @param {XYCoords} vert - The vertex to check. The new x-component.
198
+ * @param {XYCoords} vert - The vertex to check.
140
199
  * @return {boolean} True if the passed vertex is inside this polygon. The polygon is considered closed.
141
200
  * @instance
142
201
  * @memberof Polygon
143
202
  **/
144
203
  containsVert(vert: XYCoords): boolean;
204
+ /**
205
+ * Check if all given vertices are inside this polygon.<br>
206
+ * <br>
207
+ * This method just uses the `Polygon.containsVert` method.
208
+ *
209
+ * @method containsVerts
210
+ * @param {XYCoords[]} verts - The vertices to check.
211
+ * @return {boolean} True if all passed vertices are inside this polygon. The polygon is considered closed.
212
+ * @instance
213
+ * @memberof Polygon
214
+ **/
215
+ containsVerts(verts: XYCoords[]): boolean;
145
216
  /**
146
217
  * Check if the passed polygon is completly contained inside this polygon.
147
218
  *
@@ -218,6 +289,17 @@ export declare class Polygon implements SVGSerializable {
218
289
  * @return {Polygon} this, for chaining.
219
290
  **/
220
291
  rotate(angle: number, center: Vertex): Polygon;
292
+ /**
293
+ * Get the mean `center` of this polygon by calculating the mean value of all vertices.
294
+ *
295
+ * Mean: (v[0] + v[1] + ... v[n-1]) / n
296
+ *
297
+ * @method getMeanCenter
298
+ * @instance
299
+ * @memberof Polygon
300
+ * @return {Vertex|null} `null` is no vertices are available.
301
+ */
302
+ getMeanCenter(): Vertex;
221
303
  /**
222
304
  * Get all line intersections with this polygon.
223
305
  *
@@ -266,9 +348,29 @@ export declare class Polygon implements SVGSerializable {
266
348
  /**
267
349
  * Create a deep copy of this polygon.
268
350
  *
351
+ * @method clone
352
+ * @instance
353
+ * @memberof Polygon
269
354
  * @return {Polygon} The cloned polygon.
270
355
  */
271
356
  clone(): Polygon;
357
+ /**
358
+ * Create a new polygon without colinear adjacent edges. This method does not midify the current polygon
359
+ * but creates a new one.
360
+ *
361
+ * Please note that this method does NOT create deep clones of the vertices. Use Polygon.clone() if you need to.
362
+ *
363
+ * Please also note that the `tolerance` may become really large here, as the denominator of two closely
364
+ * parallel lines is usually pretty large. See the demo `57-eliminate-colinear-polygon-edges` to get
365
+ * an impression of how denominators work.
366
+ *
367
+ * @method elimitateColinearEdges
368
+ * @instance
369
+ * @memberof Polygon
370
+ * @param {number?} tolerance - (default is 1.0) The epsilon to detect co-linear edges.
371
+ * @return {Polygon} A new polygon without co-linear adjacent edges – respective the given epsilon.
372
+ */
373
+ elimitateColinearEdges(tolerance?: number): Polygon;
272
374
  /**
273
375
  * Convert this polygon to a sequence of quadratic Bézier curves.<br>
274
376
  * <br>
@@ -342,6 +444,7 @@ export declare class Polygon implements SVGSerializable {
342
444
  * @return {number}
343
445
  */
344
446
  area(vertices: Array<XYCoords>): number;
447
+ isClockwise(vertices: Array<XYCoords>): boolean;
345
448
  /**
346
449
  * Calulate the signed polyon area by interpreting the polygon as a matrix
347
450
  * and calculating its determinant.
@@ -28,7 +28,11 @@
28
28
  * @modified 2023-09-25 Added the `Polygon.lineIntersections(Line,boolean)` function.
29
29
  * @modified 2023-09-29 Added the `Polygon.closestLineIntersection(Line,boolean)` function.
30
30
  * @modified 2023-11-24 Added the `Polygon.containsPolygon(Polygon)' function.
31
- * @version 1.12.0
31
+ * @modified 2024-10-12 Added the `getEdgeAt` method.
32
+ * @modified 2024-10-30 Added the `getEdges` method.
33
+ * @modified 2024-12-02 Added the `elimitateColinearEdges` method.
34
+ * @modified 2025-02-12 Added the `containsVerts` method to test multiple vertices for containment.
35
+ * @version 1.14.0
32
36
  *
33
37
  * @file Polygon
34
38
  * @public
@@ -36,8 +40,10 @@
36
40
  import { BezierPath } from "./BezierPath";
37
41
  import { Bounds } from "./Bounds";
38
42
  import { Line } from "./Line";
43
+ import { Triangle } from "./Triangle";
39
44
  import { UIDGenerator } from "./UIDGenerator";
40
45
  import { Vertex } from "./Vertex";
46
+ import { geomutils } from "./geomutils";
41
47
  /**
42
48
  * @classdesc A polygon class. Any polygon consists of an array of vertices; polygons can be open or closed.
43
49
  *
@@ -64,15 +70,16 @@ export class Polygon {
64
70
  **/
65
71
  this.className = "Polygon";
66
72
  this.uid = UIDGenerator.next();
67
- if (typeof vertices == "undefined")
73
+ if (typeof vertices == "undefined") {
68
74
  vertices = [];
75
+ }
69
76
  this.vertices = vertices;
70
77
  this.isOpen = isOpen || false;
71
78
  }
72
79
  /**
73
80
  * Add a vertex to the end of the `vertices` array.
74
81
  *
75
- * @method addVert
82
+ * @method addVertex
76
83
  * @param {Vertex} vert - The vertex to add.
77
84
  * @instance
78
85
  * @memberof Polygon
@@ -80,6 +87,108 @@ export class Polygon {
80
87
  addVertex(vert) {
81
88
  this.vertices.push(vert);
82
89
  }
90
+ /**
91
+ * Add a vertex at a particular position of the `vertices` array.
92
+ *
93
+ * @method addVertexAt
94
+ * @param {Vertex} vert - The vertex to add.
95
+ * @param {number} index - The position to add the vertex at. Will be handled modulo.
96
+ * @instance
97
+ * @memberof Polygon
98
+ **/
99
+ addVertexAt(vert, index) {
100
+ // var moduloIndex = index % (this.vertices.length + 1);
101
+ this.vertices.splice(index, 0, vert);
102
+ }
103
+ /**
104
+ * Get a new instance of the line at the given start index. The returned line will consist
105
+ * of the vertex at `vertIndex` and `vertIndex+1` (will be handled modulo).
106
+ *
107
+ * @method getEdgeAt
108
+ * @param {number} vertIndex - The vertex index of the line to start.
109
+ * @instance
110
+ * @memberof Polygon
111
+ * @return {Line}
112
+ **/
113
+ getEdgeAt(vertIndex) {
114
+ return new Line(this.getVertexAt(vertIndex), this.getVertexAt(vertIndex + 1));
115
+ }
116
+ /**
117
+ * Converts this polygon into a sequence of lines. Please note that each time
118
+ * this method is called new lines are created. The underlying line vertices are no clones
119
+ * (instances).
120
+ *
121
+ * @method getEdges
122
+ * @instance
123
+ * @memberof Polygon
124
+ * @return {Array<Line>}
125
+ */
126
+ getEdges() {
127
+ const lines = [];
128
+ for (var i = 0; i + 1 < this.vertices.length; i++) {
129
+ // var line = this.getLineAt(i).clone();
130
+ lines.push(this.getEdgeAt(i));
131
+ }
132
+ if (!this.isOpen && this.vertices.length > 0) {
133
+ lines.push(this.getEdgeAt(this.vertices.length - 1));
134
+ }
135
+ return lines;
136
+ }
137
+ /**
138
+ * Checks if the angle at the given polygon vertex (index) is acute. Please not that this is
139
+ * only working for clockwise polygons. If this polygon is not clockwise please use the
140
+ * `isClockwise` method and reverse polygon vertices if needed.
141
+ *
142
+ * @method isAngleAcute
143
+ * @instance
144
+ * @memberof Polygon
145
+ * @param {number} vertIndex - The index of the polygon vertex to check.
146
+ * @returns {boolean} `true` is angle is acute, `false` is obtuse.
147
+ */
148
+ getInnerAngleAt(vertIndex) {
149
+ const p2 = this.vertices[vertIndex];
150
+ const p1 = this.vertices[(vertIndex + this.vertices.length - 1) % this.vertices.length].clone();
151
+ const p3 = this.vertices[(vertIndex + 1) % this.vertices.length].clone();
152
+ // See
153
+ // https://math.stackexchange.com/questions/149959/how-to-find-the-interior-angle-of-an-irregular-pentagon-or-polygon
154
+ // π−arccos((P2−P1)⋅(P3−P2)|P2−P1||P3−P2|)
155
+ // Check if triangle is acute (will be used later)
156
+ // Acute angles and obtuse angles need to be handled differently.
157
+ const isAcute = this.isAngleAcute(vertIndex);
158
+ // Differences
159
+ const zero = new Vertex(0, 0);
160
+ const p2mp1 = new Vertex(p2.x - p1.x, p2.y - p1.y);
161
+ const p3mp2 = new Vertex(p3.x - p2.x, p3.y - p2.y);
162
+ const p2mp1_len = zero.distance(p2mp1);
163
+ const p3mp2_len = zero.distance(p3mp2);
164
+ // Dot products
165
+ const dotProduct = geomutils.dotProduct(p2mp1, p3mp2);
166
+ const lengthProduct = p2mp1_len * p3mp2_len;
167
+ if (isAcute) {
168
+ return Math.PI - Math.acos(dotProduct / lengthProduct);
169
+ }
170
+ else {
171
+ return Math.PI + Math.acos(dotProduct / lengthProduct);
172
+ }
173
+ }
174
+ /**
175
+ * Checks if the angle at the given polygon vertex (index) is acute.
176
+ *
177
+ * @method isAngleAcute
178
+ * @instance
179
+ * @memberof Polygon
180
+ * @param {number} vertIndex - The index of the polygon vertex to check.
181
+ * @returns {boolean} `true` is angle is acute, `false` is obtuse.
182
+ */
183
+ isAngleAcute(vertIndex) {
184
+ const A = this.vertices[(vertIndex + this.vertices.length - 1) % this.vertices.length].clone();
185
+ const B = this.vertices[vertIndex];
186
+ const C = this.vertices[(vertIndex + 1) % this.vertices.length].clone();
187
+ // Find local winding number for triangle A B C
188
+ const windingNumber = Triangle.utils.determinant(A, B, C);
189
+ // console.log("vertIndex", vertIndex, "windingNumber", windingNumber);
190
+ return windingNumber < 0;
191
+ }
83
192
  /**
84
193
  * Get the polygon vertex at the given position (index).
85
194
  *
@@ -90,17 +199,19 @@ export class Polygon {
90
199
  * - getVertexAt( vertices.length + k ) == getVertexAt( k )
91
200
  * - getVertexAt( -k ) == getVertexAt( vertices.length -k )
92
201
  *
93
- * @metho getVertexAt
202
+ * @method getVertexAt
94
203
  * @param {number} index - The index of the desired vertex.
95
204
  * @instance
96
205
  * @memberof Polygon
97
206
  * @return {Vertex} At the given index.
98
207
  **/
99
208
  getVertexAt(index) {
100
- if (index < 0)
209
+ if (index < 0) {
101
210
  return this.vertices[this.vertices.length - (Math.abs(index) % this.vertices.length)];
102
- else
211
+ }
212
+ else {
103
213
  return this.vertices[index % this.vertices.length];
214
+ }
104
215
  }
105
216
  /**
106
217
  * Move the polygon's vertices by the given amount.
@@ -124,7 +235,7 @@ export class Polygon {
124
235
  * https://stackoverflow.com/questions/22521982/check-if-point-inside-a-polygon
125
236
  *
126
237
  * @method containsVert
127
- * @param {XYCoords} vert - The vertex to check. The new x-component.
238
+ * @param {XYCoords} vert - The vertex to check.
128
239
  * @return {boolean} True if the passed vertex is inside this polygon. The polygon is considered closed.
129
240
  * @instance
130
241
  * @memberof Polygon
@@ -142,6 +253,20 @@ export class Polygon {
142
253
  }
143
254
  return inside;
144
255
  }
256
+ /**
257
+ * Check if all given vertices are inside this polygon.<br>
258
+ * <br>
259
+ * This method just uses the `Polygon.containsVert` method.
260
+ *
261
+ * @method containsVerts
262
+ * @param {XYCoords[]} verts - The vertices to check.
263
+ * @return {boolean} True if all passed vertices are inside this polygon. The polygon is considered closed.
264
+ * @instance
265
+ * @memberof Polygon
266
+ **/
267
+ containsVerts(verts) {
268
+ return verts.every((vert) => this.containsVert(vert));
269
+ }
145
270
  /**
146
271
  * Check if the passed polygon is completly contained inside this polygon.
147
272
  *
@@ -204,7 +329,8 @@ export class Polygon {
204
329
  * @return {boolean}
205
330
  */
206
331
  isClockwise() {
207
- return Polygon.utils.signedArea(this.vertices) < 0;
332
+ // return Polygon.utils.signedArea(this.vertices) < 0;
333
+ return Polygon.utils.isClockwise(this.vertices);
208
334
  }
209
335
  /**
210
336
  * Get the perimeter of this polygon.
@@ -263,6 +389,28 @@ export class Polygon {
263
389
  }
264
390
  return this;
265
391
  }
392
+ /**
393
+ * Get the mean `center` of this polygon by calculating the mean value of all vertices.
394
+ *
395
+ * Mean: (v[0] + v[1] + ... v[n-1]) / n
396
+ *
397
+ * @method getMeanCenter
398
+ * @instance
399
+ * @memberof Polygon
400
+ * @return {Vertex|null} `null` is no vertices are available.
401
+ */
402
+ getMeanCenter() {
403
+ if (this.vertices.length === 0) {
404
+ return null;
405
+ }
406
+ const center = this.vertices[0].clone();
407
+ for (var i = 1; i < this.vertices.length; i++) {
408
+ center.add(this.vertices[i]);
409
+ }
410
+ center.x /= this.vertices.length;
411
+ center.y /= this.vertices.length;
412
+ return center;
413
+ }
266
414
  /**
267
415
  * Get all line intersections with this polygon.
268
416
  *
@@ -403,11 +551,64 @@ export class Polygon {
403
551
  /**
404
552
  * Create a deep copy of this polygon.
405
553
  *
554
+ * @method clone
555
+ * @instance
556
+ * @memberof Polygon
406
557
  * @return {Polygon} The cloned polygon.
407
558
  */
408
559
  clone() {
409
560
  return new Polygon(this.vertices.map(vert => vert.clone()), this.isOpen);
410
561
  }
562
+ /**
563
+ * Create a new polygon without colinear adjacent edges. This method does not midify the current polygon
564
+ * but creates a new one.
565
+ *
566
+ * Please note that this method does NOT create deep clones of the vertices. Use Polygon.clone() if you need to.
567
+ *
568
+ * Please also note that the `tolerance` may become really large here, as the denominator of two closely
569
+ * parallel lines is usually pretty large. See the demo `57-eliminate-colinear-polygon-edges` to get
570
+ * an impression of how denominators work.
571
+ *
572
+ * @method elimitateColinearEdges
573
+ * @instance
574
+ * @memberof Polygon
575
+ * @param {number?} tolerance - (default is 1.0) The epsilon to detect co-linear edges.
576
+ * @return {Polygon} A new polygon without co-linear adjacent edges – respective the given epsilon.
577
+ */
578
+ elimitateColinearEdges(tolerance) {
579
+ const eps = typeof tolerance === "undefined" ? 1.0 : tolerance;
580
+ const verts = this.vertices.slice(); // Creates a shallow copy
581
+ let i = 0;
582
+ var lineA = new Line(new Vertex(), new Vertex());
583
+ var lineB = new Line(new Vertex(), new Vertex());
584
+ while (i + 1 < verts.length && verts.length > 2) {
585
+ const vertA = verts[i];
586
+ const vertB = verts[(i + 1) % verts.length];
587
+ lineA.a = vertA;
588
+ lineA.b = vertB;
589
+ lineB.a = vertB;
590
+ let areColinear = false;
591
+ let j = i + 2;
592
+ do {
593
+ let vertC = verts[j % verts.length];
594
+ lineB.b = vertC;
595
+ areColinear = lineA.colinear(lineB, eps);
596
+ // console.log("are colinear?", i, i + 1, j, areColinear);
597
+ if (areColinear) {
598
+ j++;
599
+ }
600
+ } while (areColinear);
601
+ // Now j points to the first vertex that's NOT colinear to the current lineA
602
+ // -> delete all vertices in between
603
+ if (j - i > 2) {
604
+ // Means: there have been 'colinear vertices' in between
605
+ // console.log("Splice", "i", i, "j", j, i + 1, j - i - 1);
606
+ verts.splice(i + 1, j - i - 2);
607
+ }
608
+ i++;
609
+ }
610
+ return new Polygon(verts, this.isOpen);
611
+ }
411
612
  /**
412
613
  * Convert this polygon to a sequence of quadratic Bézier curves.<br>
413
614
  * <br>
@@ -507,8 +708,9 @@ export class Polygon {
507
708
  **/
508
709
  toCubicBezierSVGString(threshold) {
509
710
  var qdata = this.toCubicBezierData(threshold);
510
- if (qdata.length == 0)
711
+ if (qdata.length == 0) {
511
712
  return "";
713
+ }
512
714
  var buffer = ["M " + qdata[0].x + " " + qdata[0].y];
513
715
  for (var i = 1; i < qdata.length; i += 3) {
514
716
  buffer.push("C " +
@@ -579,6 +781,9 @@ Polygon.utils = {
579
781
  }
580
782
  return Math.abs(total);
581
783
  },
784
+ isClockwise(vertices) {
785
+ return Polygon.utils.signedArea(vertices) < 0;
786
+ },
582
787
  /**
583
788
  * Calulate the signed polyon area by interpreting the polygon as a matrix
584
789
  * and calculating its determinant.
@@ -1 +1 @@
1
- {"version":3,"file":"Polygon.js","sourceRoot":"","sources":["../ts/Polygon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Polygon.js","sourceRoot":"","sources":["../ts/Polygon.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,9 @@
21
21
  * @modified 2021-01-22 Always updating circumcircle when retieving it.
22
22
  * @modified 2022-02-02 Added the `destroy` method.
23
23
  * @modified 2022-02-02 Cleared the `Triangle.toSVGString` function (deprecated). Use `drawutilssvg` instead.
24
- * @version 2.6.0
24
+ * @modified 2024-11-22 Added static utility function Triangle.utils.determinant; adapted method `determinant`.
25
+ * @modified 2024-11-22 Changing visibility of `Triangle.utils` from `private` to `public`.
26
+ * @version 2.8.0
25
27
  *
26
28
  * @file Triangle
27
29
  * @fileoverview A simple triangle class: three vertices.
@@ -31,7 +33,7 @@ import { Bounds } from "./Bounds";
31
33
  import { Circle } from "./Circle";
32
34
  import { Polygon } from "./Polygon";
33
35
  import { Vertex } from "./Vertex";
34
- import { SVGSerializable, UID } from "./interfaces";
36
+ import { SVGSerializable, UID, XYCoords } from "./interfaces";
35
37
  /**
36
38
  * @classdesc A triangle class for triangulations.
37
39
  *
@@ -319,5 +321,23 @@ export declare class Triangle implements SVGSerializable {
319
321
  * should not be used.
320
322
  */
321
323
  destroy(): void;
322
- private static utils;
324
+ static utils: {
325
+ max3(a: number, b: number, c: number): number;
326
+ min3(a: number, b: number, c: number): number;
327
+ signedArea(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number): number;
328
+ /**
329
+ * Used by the containsPoint() function.
330
+ *
331
+ * @private
332
+ **/
333
+ pointIsInTriangle(px: number, py: number, p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number): boolean;
334
+ /**
335
+ * Calculate the determinant of the three vertices a, b and c (in this order).
336
+ * @param {XYCords} a - The first vertex.
337
+ * @param {XYCords} b - The first vertex.
338
+ * @param {XYCords} c - The first vertex.
339
+ * @returns {nmber}
340
+ */
341
+ determinant(a: XYCoords, b: XYCoords, c: XYCoords): number;
342
+ };
323
343
  }
@@ -21,7 +21,9 @@
21
21
  * @modified 2021-01-22 Always updating circumcircle when retieving it.
22
22
  * @modified 2022-02-02 Added the `destroy` method.
23
23
  * @modified 2022-02-02 Cleared the `Triangle.toSVGString` function (deprecated). Use `drawutilssvg` instead.
24
- * @version 2.6.0
24
+ * @modified 2024-11-22 Added static utility function Triangle.utils.determinant; adapted method `determinant`.
25
+ * @modified 2024-11-22 Changing visibility of `Triangle.utils` from `private` to `public`.
26
+ * @version 2.8.0
25
27
  *
26
28
  * @file Triangle
27
29
  * @fileoverview A simple triangle class: three vertices.
@@ -281,7 +283,8 @@ export class Triangle {
281
283
  */
282
284
  determinant() {
283
285
  // (b.y - a.y)*(c.x - b.x) - (c.y - b.y)*(b.x - a.x);
284
- return (this.b.y - this.a.y) * (this.c.x - this.b.x) - (this.c.y - this.b.y) * (this.b.x - this.a.x);
286
+ // return (this.b.y - this.a.y) * (this.c.x - this.b.x) - (this.c.y - this.b.y) * (this.b.x - this.a.x);
287
+ return Triangle.utils.determinant(this.a, this.b, this.c);
285
288
  }
286
289
  /**
287
290
  * Checks if the passed vertex (p) is inside this triangle.
@@ -395,6 +398,16 @@ Triangle.utils = {
395
398
  var s = (1 / (2 * area)) * (p0y * p2x - p0x * p2y + (p2y - p0y) * px + (p0x - p2x) * py);
396
399
  var t = (1 / (2 * area)) * (p0x * p1y - p0y * p1x + (p0y - p1y) * px + (p1x - p0x) * py);
397
400
  return s > 0 && t > 0 && 1 - s - t > 0;
401
+ },
402
+ /**
403
+ * Calculate the determinant of the three vertices a, b and c (in this order).
404
+ * @param {XYCords} a - The first vertex.
405
+ * @param {XYCords} b - The first vertex.
406
+ * @param {XYCords} c - The first vertex.
407
+ * @returns {nmber}
408
+ */
409
+ determinant(a, b, c) {
410
+ return (b.y - a.y) * (c.x - b.x) - (c.y - b.y) * (b.x - a.x);
398
411
  }
399
412
  };
400
413
  //# sourceMappingURL=Triangle.js.map