@immugio/three-math-extensions 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,11 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
9
9
 
10
- ## [0.2.8](https://github.com/Immugio/three-math-extensions/compare/16.15.10...0.2.8)
10
+ ## [0.2.10](https://github.com/Immugio/three-math-extensions/compare/16.15.10...0.2.10)
11
11
 
12
12
  ### Commits
13
13
 
14
14
  - Add Rectangle, update Polygon [`58ee875`](https://github.com/Immugio/three-math-extensions/commit/58ee87539af8f9ade186e5250cba9e01926da514)
15
+ - Add isPointInPolygon [`a59eb4b`](https://github.com/Immugio/three-math-extensions/commit/a59eb4be026f17a3106070ae626a0588cd4f4411)
15
16
  - Improve Line2D.closestPointToPoint, add Vec2.signedAngle [`151f214`](https://github.com/Immugio/three-math-extensions/commit/151f21462e0358057ad8e9d75d5782563a1061f6)
16
17
  - Improve documentation [`d0fcb51`](https://github.com/Immugio/three-math-extensions/commit/d0fcb5132f127b4382ac5f7291575a061b8ec121)
17
18
  - Vec3, Line3D - update documentation [`67d9c32`](https://github.com/Immugio/three-math-extensions/commit/67d9c328e08cc0a5599932d2f0529e97f31c9213)
@@ -19,6 +20,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
19
20
  - Add Vec2.signedAngle [`863c8f2`](https://github.com/Immugio/three-math-extensions/commit/863c8f27f11288cbda535e21bb688206259269ed)
20
21
  - Add Vec2.fromPoints to accept multiple points [`a261402`](https://github.com/Immugio/three-math-extensions/commit/a2614027cf5fb8263189b48f7e0bb9a23a552c15)
21
22
  - Add Vec2.parallelTo [`989874d`](https://github.com/Immugio/three-math-extensions/commit/989874dcfe122d3ee84d8d56d79cb88e4e441736)
23
+ - Line2D.intersect - enable line segments intersection only [`1f1470e`](https://github.com/Immugio/three-math-extensions/commit/1f1470e1cf00118e643f5c44a135e0baf6b76d41)
22
24
  - Polygon from bounding size [`eae6701`](https://github.com/Immugio/three-math-extensions/commit/eae67012f57f426f8b5259b765000447ce06d608)
23
25
  - Line2D and Line3D to return this instead of specific type [`761ef6a`](https://github.com/Immugio/three-math-extensions/commit/761ef6a9d8cc4e35120b666576794e521aa3b991)
24
26
  - Line2D.in3DSpace added [`a6ce0ec`](https://github.com/Immugio/three-math-extensions/commit/a6ce0ecb67f5c7b2a75fcc283c28af626153a4af)
@@ -29,7 +31,20 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
29
31
  - Vec2.fromPoint and Vec3.fromPoint should accept null [`4b871af`](https://github.com/Immugio/three-math-extensions/commit/4b871af297bdcbe8584f1e2b99d602247b77687c)
30
32
  - Excluded files from build [`ec70614`](https://github.com/Immugio/three-math-extensions/commit/ec70614bc7df7a98f854c7a6693365118e04faf7)
31
33
 
32
- ## [16.15.10](https://github.com/Immugio/three-math-extensions/compare/0.2.7...16.15.10) - 2023-01-02
34
+ ## [16.15.10](https://github.com/Immugio/three-math-extensions/compare/0.2.9...16.15.10) - 2023-01-02
35
+
36
+ ## [0.2.9](https://github.com/Immugio/three-math-extensions/compare/0.2.8...0.2.9) - 2023-05-22
37
+
38
+ ### Commits
39
+
40
+ - Line2D.intersect - enable line segments intersection only [`1f1470e`](https://github.com/Immugio/three-math-extensions/commit/1f1470e1cf00118e643f5c44a135e0baf6b76d41)
41
+
42
+ ## [0.2.8](https://github.com/Immugio/three-math-extensions/compare/0.2.7...0.2.8) - 2023-05-19
43
+
44
+ ### Commits
45
+
46
+ - Line2D.in3DSpace added [`a6ce0ec`](https://github.com/Immugio/three-math-extensions/commit/a6ce0ecb67f5c7b2a75fcc283c28af626153a4af)
47
+ - Update release instructions [`5b41a2e`](https://github.com/Immugio/three-math-extensions/commit/5b41a2ed7e15450dbb6088a7f7ed0031a013badc)
33
48
 
34
49
  ## [0.2.7](https://github.com/Immugio/three-math-extensions/compare/0.2.6...0.2.7) - 2023-04-26
35
50
 
@@ -160,7 +175,19 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
160
175
 
161
176
  - Release 0.0.4 - tag pattern 4 [`ab9ad4e`](https://github.com/Immugio/three-math-extensions/commit/ab9ad4e49477a991482ed6d4d3a3ca4687a70b44)
162
177
 
163
- ## 0.0.7 - 2022-11-21
178
+ ## [0.0.7](https://github.com/Immugio/three-math-extensions/compare/0.0.6...0.0.7) - 2022-11-21
179
+
180
+ ## [0.0.6](https://github.com/Immugio/three-math-extensions/compare/0.0.4...0.0.6) - 2022-11-24
181
+
182
+ ### Commits
183
+
184
+ - Improve API, minor bug fix, improve test coverage [`881a5f0`](https://github.com/Immugio/three-math-extensions/commit/881a5f096823f0d5fd90faa76cd602f076291bc5)
185
+ - Add .npmignore [`f58329a`](https://github.com/Immugio/three-math-extensions/commit/f58329a86b96589bb574d6ebed37d4cc4474663a)
186
+ - Correct change log version [`c6244bf`](https://github.com/Immugio/three-math-extensions/commit/c6244bf1488ad21bcc5589d1dff62c41d8182d48)
187
+ - Release 0.0.4 - tag pattern 6 [`c1c5454`](https://github.com/Immugio/three-math-extensions/commit/c1c54541ed400e1ad49bf42fe8926cd5293efefd)
188
+ - Release 0.0.4 - tag pattern 5 [`5245eed`](https://github.com/Immugio/three-math-extensions/commit/5245eed60195103e989c0fadf9bd642f39ef4589)
189
+
190
+ ## 0.0.4 - 2022-11-21
164
191
 
165
192
  ### Commits
166
193
 
@@ -177,6 +204,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
177
204
  - Edit publish script condition [`dc77d89`](https://github.com/Immugio/three-math-extensions/commit/dc77d8978d87daab8732d6429ad1b01ba0ca6f97)
178
205
  - CI to use node version 16 [`dc42650`](https://github.com/Immugio/three-math-extensions/commit/dc426508939de922cc0316b7652bbd09aeed4610)
179
206
  - Action rename [`26a1f01`](https://github.com/Immugio/three-math-extensions/commit/26a1f014827faab2c02d30ca8ed18dac8f9ff8af)
207
+ - Release 0.0.4 - tag pattern 4 [`ab9ad4e`](https://github.com/Immugio/three-math-extensions/commit/ab9ad4e49477a991482ed6d4d3a3ca4687a70b44)
180
208
  - Release 0.0.4 - tag pattern 3 [`d7d4c8f`](https://github.com/Immugio/three-math-extensions/commit/d7d4c8f546e6550868ddd06a5213fdec6c68bcd2)
181
209
  - Release 0.0.4 - tag pattern 2 [`0dcf801`](https://github.com/Immugio/three-math-extensions/commit/0dcf80190bd67a3ca93d45131a403201ab39e00f)
182
210
  - Release 0.0.4 - tag pattern [`e7f2f76`](https://github.com/Immugio/three-math-extensions/commit/e7f2f76aa247e1c51f0522c300a7aaf07253039c)
package/README.md CHANGED
@@ -6,83 +6,4 @@
6
6
 
7
7
  # @immugio/three-math-extensions
8
8
 
9
- ## Table of contents
10
-
11
- ### Classes
12
-
13
- - [BoundingBox](docs/classes/BoundingBox.md)
14
- - [Line2D](docs/classes/Line2D.md)
15
- - [Line3D](docs/classes/Line3D.md)
16
- - [Polygon](docs/classes/Polygon.md)
17
- - [Rectangle](docs/classes/Rectangle.md)
18
- - [Size2](docs/classes/Size2.md)
19
- - [Vec2](docs/classes/Vec2.md)
20
- - [Vec3](docs/classes/Vec3.md)
21
-
22
- ### Interfaces
23
-
24
- - [Point2](docs/interfaces/Point2.md)
25
- - [Point3](docs/interfaces/Point3.md)
26
-
27
- ### Variables
28
-
29
- - [TwoPI](docs/modules.md#twopi)
30
-
31
- ### Functions
32
-
33
- - [normalizeAngleDegrees](docs/modules.md#normalizeangledegrees)
34
- - [normalizeAngleRadians](docs/modules.md#normalizeangleradians)
35
-
36
- ## Variables
37
-
38
- ### TwoPI
39
-
40
- • `Const` **TwoPI**: `number`
41
-
42
- #### Defined in
43
-
44
- [src/MathConstants.ts:1](https://github.com/Immugio/three-math-extensions/blob/151f214/src/MathConstants.ts#L1)
45
-
46
- ## Functions
47
-
48
- ### normalizeAngleDegrees
49
-
50
- ▸ **normalizeAngleDegrees**(`angle`): `number`
51
-
52
- Normalizes an angle in degrees to the range [0, 360].
53
-
54
- #### Parameters
55
-
56
- | Name | Type | Description |
57
- | :------ | :------ | :------ |
58
- | `angle` | `number` | in degrees |
59
-
60
- #### Returns
61
-
62
- `number`
63
-
64
- #### Defined in
65
-
66
- [src/normalizeAngleDegrees.ts:5](https://github.com/Immugio/three-math-extensions/blob/151f214/src/normalizeAngleDegrees.ts#L5)
67
-
68
- ___
69
-
70
- ### normalizeAngleRadians
71
-
72
- ▸ **normalizeAngleRadians**(`angle`): `number`
73
-
74
- Normalize an angle in radians to the range of 0 to 2π.
75
-
76
- #### Parameters
77
-
78
- | Name | Type | Description |
79
- | :------ | :------ | :------ |
80
- | `angle` | `number` | in radians |
81
-
82
- #### Returns
83
-
84
- `number`
85
-
86
- #### Defined in
87
-
88
- [src/normalizeAngleRadians.ts:7](https://github.com/Immugio/three-math-extensions/blob/151f214/src/normalizeAngleRadians.ts#L7)
9
+ ## [Documentation](docs/modules.md)
package/cjs/Line2D.js CHANGED
@@ -514,9 +514,11 @@ class Line2D {
514
514
  return this;
515
515
  }
516
516
  /**
517
- * Returns the intersection point of two lines. The lines are assumed to be infinite.
517
+ * Returns the intersection point of two lines.
518
+ * @param other
519
+ * @param lineSegmentOnly If true, only return the intersection if it is within the line segments. Otherwise, return the intersection if the lines intersect anywhere.
518
520
  */
519
- intersect(other) {
521
+ intersect(other, lineSegmentOnly) {
520
522
  // Check if none of the lines are of length 0
521
523
  if ((this.start.x === this.end.x && this.start.y === this.end.y) || (other.start.x === other.end.x && other.start.y === other.end.y)) {
522
524
  return null;
@@ -527,6 +529,13 @@ class Line2D {
527
529
  return null;
528
530
  }
529
531
  const ua = ((other.end.x - other.start.x) * (this.start.y - other.start.y) - (other.end.y - other.start.y) * (this.start.x - other.start.x)) / denominator;
532
+ // Check if the intersection point is within the bounds of the line segments if required
533
+ if (lineSegmentOnly) {
534
+ const ub = ((this.end.x - this.start.x) * (this.start.y - other.start.y) - (this.end.y - this.start.y) * (this.start.x - other.start.x)) / denominator;
535
+ if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {
536
+ return null;
537
+ }
538
+ }
530
539
  // Return an object with the x and y coordinates of the intersection
531
540
  const x = this.start.x + ua * (this.end.x - this.start.x);
532
541
  const y = this.start.y + ua * (this.end.y - this.start.y);
package/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TwoPI = exports.normalizeAngleRadians = exports.normalizeAngleDegrees = exports.Rectangle = exports.BoundingBox = exports.Polygon = exports.Size2 = exports.Line3D = exports.Line2D = exports.Vec3 = exports.Vec2 = void 0;
3
+ exports.isPointInPolygon = exports.TwoPI = exports.normalizeAngleRadians = exports.normalizeAngleDegrees = exports.Rectangle = exports.BoundingBox = exports.Polygon = exports.Size2 = exports.Line3D = exports.Line2D = exports.Vec3 = exports.Vec2 = void 0;
4
4
  var Vec2_1 = require("./Vec2");
5
5
  Object.defineProperty(exports, "Vec2", { enumerable: true, get: function () { return Vec2_1.Vec2; } });
6
6
  var Vec3_1 = require("./Vec3");
@@ -23,3 +23,5 @@ var normalizeAngleRadians_1 = require("./normalizeAngleRadians");
23
23
  Object.defineProperty(exports, "normalizeAngleRadians", { enumerable: true, get: function () { return normalizeAngleRadians_1.normalizeAngleRadians; } });
24
24
  var MathConstants_1 = require("./MathConstants");
25
25
  Object.defineProperty(exports, "TwoPI", { enumerable: true, get: function () { return MathConstants_1.TwoPI; } });
26
+ var isPointInPolygon_1 = require("./isPointInPolygon");
27
+ Object.defineProperty(exports, "isPointInPolygon", { enumerable: true, get: function () { return isPointInPolygon_1.isPointInPolygon; } });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPointInPolygon = void 0;
4
+ function isPointInPolygon(p, point) {
5
+ const x = point.x, y = point.y;
6
+ let i, j, c = false;
7
+ for (i = 0, j = p.length - 1; i < p.length; j = i++) {
8
+ if ((((p[i].y <= y) && (y < p[j].y)) ||
9
+ ((p[j].y <= y) && (y < p[i].y))) &&
10
+ (x < (p[j].x - p[i].x) * (y - p[i].y) / (p[j].y - p[i].y) + p[i].x)) {
11
+ c = !c;
12
+ }
13
+ }
14
+ return c;
15
+ }
16
+ exports.isPointInPolygon = isPointInPolygon;
package/docs/README.md CHANGED
@@ -1,5 +1,90 @@
1
1
  @immugio/three-math-extensions / [Exports](modules.md)
2
2
 
3
- # Set of utilities for 2d and 3d line math built on top of three.js
3
+ # Set of utilities for 2d and 3d math built on top of three.js
4
4
 
5
5
  [![Build](https://github.com/Immugio/three-math-extensions/actions/workflows/build.yml/badge.svg)](https://github.com/Immugio/three-math-extensions/actions/workflows/build.yml)
6
+
7
+ [@immugio/three-math-extensions](README.md) / Exports
8
+
9
+ # @immugio/three-math-extensions
10
+
11
+ ## Table of contents
12
+
13
+ ### Classes
14
+
15
+ - [BoundingBox](docs/classes/BoundingBox.md)
16
+ - [Line2D](docs/classes/Line2D.md)
17
+ - [Line3D](docs/classes/Line3D.md)
18
+ - [Polygon](docs/classes/Polygon.md)
19
+ - [Rectangle](docs/classes/Rectangle.md)
20
+ - [Size2](docs/classes/Size2.md)
21
+ - [Vec2](docs/classes/Vec2.md)
22
+ - [Vec3](docs/classes/Vec3.md)
23
+
24
+ ### Interfaces
25
+
26
+ - [Point2](docs/interfaces/Point2.md)
27
+ - [Point3](docs/interfaces/Point3.md)
28
+
29
+ ### Variables
30
+
31
+ - [TwoPI](docs/modules.md#twopi)
32
+
33
+ ### Functions
34
+
35
+ - [normalizeAngleDegrees](docs/modules.md#normalizeangledegrees)
36
+ - [normalizeAngleRadians](docs/modules.md#normalizeangleradians)
37
+
38
+ ## Variables
39
+
40
+ ### TwoPI
41
+
42
+ • `Const` **TwoPI**: `number`
43
+
44
+ #### Defined in
45
+
46
+ [src/MathConstants.ts:1](https://github.com/Immugio/three-math-extensions/blob/151f214/src/MathConstants.ts#L1)
47
+
48
+ ## Functions
49
+
50
+ ### normalizeAngleDegrees
51
+
52
+ ▸ **normalizeAngleDegrees**(`angle`): `number`
53
+
54
+ Normalizes an angle in degrees to the range [0, 360].
55
+
56
+ #### Parameters
57
+
58
+ | Name | Type | Description |
59
+ | :------ | :------ | :------ |
60
+ | `angle` | `number` | in degrees |
61
+
62
+ #### Returns
63
+
64
+ `number`
65
+
66
+ #### Defined in
67
+
68
+ [src/normalizeAngleDegrees.ts:5](https://github.com/Immugio/three-math-extensions/blob/151f214/src/normalizeAngleDegrees.ts#L5)
69
+
70
+ ___
71
+
72
+ ### normalizeAngleRadians
73
+
74
+ ▸ **normalizeAngleRadians**(`angle`): `number`
75
+
76
+ Normalize an angle in radians to the range of 0 to 2π.
77
+
78
+ #### Parameters
79
+
80
+ | Name | Type | Description |
81
+ | :------ | :------ | :------ |
82
+ | `angle` | `number` | in radians |
83
+
84
+ #### Returns
85
+
86
+ `number`
87
+
88
+ #### Defined in
89
+
90
+ [src/normalizeAngleRadians.ts:7](https://github.com/Immugio/three-math-extensions/blob/151f214/src/normalizeAngleRadians.ts#L7)
@@ -40,7 +40,7 @@
40
40
 
41
41
  #### Defined in
42
42
 
43
- [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/151f214/src/BoundingBox.ts#L4)
43
+ [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/66cba15/src/BoundingBox.ts#L4)
44
44
 
45
45
  ## Properties
46
46
 
@@ -50,7 +50,7 @@
50
50
 
51
51
  #### Defined in
52
52
 
53
- [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/151f214/src/BoundingBox.ts#L4)
53
+ [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/66cba15/src/BoundingBox.ts#L4)
54
54
 
55
55
  ___
56
56
 
@@ -60,7 +60,7 @@ ___
60
60
 
61
61
  #### Defined in
62
62
 
63
- [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/151f214/src/BoundingBox.ts#L4)
63
+ [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/66cba15/src/BoundingBox.ts#L4)
64
64
 
65
65
  ___
66
66
 
@@ -70,7 +70,7 @@ ___
70
70
 
71
71
  #### Defined in
72
72
 
73
- [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/151f214/src/BoundingBox.ts#L4)
73
+ [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/66cba15/src/BoundingBox.ts#L4)
74
74
 
75
75
  ___
76
76
 
@@ -80,7 +80,7 @@ ___
80
80
 
81
81
  #### Defined in
82
82
 
83
- [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/151f214/src/BoundingBox.ts#L4)
83
+ [src/BoundingBox.ts:4](https://github.com/Immugio/three-math-extensions/blob/66cba15/src/BoundingBox.ts#L4)
84
84
 
85
85
  ## Accessors
86
86
 
@@ -94,7 +94,7 @@ ___
94
94
 
95
95
  #### Defined in
96
96
 
97
- [src/BoundingBox.ts:11](https://github.com/Immugio/three-math-extensions/blob/151f214/src/BoundingBox.ts#L11)
97
+ [src/BoundingBox.ts:11](https://github.com/Immugio/three-math-extensions/blob/66cba15/src/BoundingBox.ts#L11)
98
98
 
99
99
  ## Methods
100
100
 
@@ -114,4 +114,4 @@ ___
114
114
 
115
115
  #### Defined in
116
116
 
117
- [src/BoundingBox.ts:7](https://github.com/Immugio/three-math-extensions/blob/151f214/src/BoundingBox.ts#L7)
117
+ [src/BoundingBox.ts:7](https://github.com/Immugio/three-math-extensions/blob/66cba15/src/BoundingBox.ts#L7)