dgeoutils 2.4.1 → 2.4.4
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/dist/cjs/DCircle.js +63 -52
- package/dist/cjs/DLine.js +181 -132
- package/dist/cjs/DNumbers.js +20 -16
- package/dist/cjs/DPlane.js +79 -56
- package/dist/cjs/DPoint.js +338 -240
- package/dist/cjs/DPolygon.js +1151 -635
- package/dist/cjs/DPolygonLoop.js +143 -138
- package/dist/cjs/FastSearch.js +37 -13
- package/dist/cjs/TraceMatrix.js +139 -87
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/utils.js +103 -61
- package/dist/esm/DCircle.js +1 -1
- package/dist/esm/DLine.js +2 -2
- package/dist/esm/DPoint.js +2 -2
- package/dist/esm/DPolygon.js +7 -7
- package/dist/esm/utils.js +6 -6
- package/dist/umd/dgeoutils.js +19 -19
- package/dist/umd/dgeoutils.min.js +1 -1
- package/dist/umd/dgeoutils.min.js.map +1 -1
- package/package.json +5 -10
package/dist/cjs/DCircle.js
CHANGED
|
@@ -1,44 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DCircle = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
var DPoint_1 = require("./DPoint");
|
|
5
|
+
var DPolygon_1 = require("./DPolygon");
|
|
6
|
+
var utils_1 = require("./utils");
|
|
7
|
+
var DCircle = (function () {
|
|
8
|
+
function DCircle(center, r) {
|
|
9
|
+
if (center === void 0) { center = DPoint_1.DPoint.zero(); }
|
|
10
|
+
if (r === void 0) { r = 0; }
|
|
9
11
|
this.center = center;
|
|
10
12
|
this.r = r;
|
|
11
13
|
}
|
|
12
|
-
toString() {
|
|
13
|
-
return
|
|
14
|
-
}
|
|
15
|
-
getValue() {
|
|
14
|
+
DCircle.prototype.toString = function () {
|
|
15
|
+
return "(".concat(this.center.toString(), ", ").concat(this.r, ")");
|
|
16
|
+
};
|
|
17
|
+
DCircle.prototype.getValue = function () {
|
|
16
18
|
return { center: this.center, r: this.r };
|
|
17
|
-
}
|
|
18
|
-
clone() {
|
|
19
|
+
};
|
|
20
|
+
DCircle.prototype.clone = function () {
|
|
19
21
|
return new DCircle(this.center, this.r);
|
|
20
|
-
}
|
|
21
|
-
findPoints(c) {
|
|
22
|
+
};
|
|
23
|
+
DCircle.prototype.findPoints = function (c) {
|
|
22
24
|
if (this.equal(c)) {
|
|
23
25
|
return Infinity;
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
var _a = this, _b = _a.center, x0 = _b.x, y0 = _b.y, r0 = _a.r;
|
|
28
|
+
var _c = c.center, x1 = _c.x, y1 = _c.y, r1 = c.r;
|
|
29
|
+
var r02 = r0 * r0;
|
|
30
|
+
var d = this.center.distance(c.center);
|
|
31
|
+
var a = (r02 - r1 * r1 + d * d) / (2 * d);
|
|
32
|
+
var h = Math.sqrt(r02 - a * a);
|
|
33
|
+
var ad = a / d;
|
|
34
|
+
var dy = y1 - y0;
|
|
35
|
+
var dx = x1 - x0;
|
|
36
|
+
var hd = h / d;
|
|
37
|
+
var x2 = x0 + ad * (x1 - x0);
|
|
38
|
+
var y2 = y0 + ad * (y1 - y0);
|
|
39
|
+
var x31 = x2 + hd * dy;
|
|
40
|
+
var y31 = y2 - hd * dx;
|
|
41
|
+
var x32 = x2 - hd * dy;
|
|
42
|
+
var y32 = y2 + hd * dx;
|
|
43
|
+
var res = [];
|
|
42
44
|
if (!isNaN(x31) && !isNaN(y31)) {
|
|
43
45
|
res.push(new DPoint_1.DPoint(x31, y31));
|
|
44
46
|
}
|
|
@@ -46,46 +48,55 @@ class DCircle {
|
|
|
46
48
|
res.push(new DPoint_1.DPoint(x32, y32));
|
|
47
49
|
}
|
|
48
50
|
return res;
|
|
49
|
-
}
|
|
50
|
-
equal
|
|
51
|
+
};
|
|
52
|
+
DCircle.prototype.equal = function (_a) {
|
|
53
|
+
var center = _a.center, r = _a.r;
|
|
51
54
|
return this.center.equal(center) && this.r === r;
|
|
52
|
-
}
|
|
53
|
-
findPolygonInside
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
};
|
|
56
|
+
DCircle.prototype.findPolygonInside = function (pointCount, startAngle, stopAngle) {
|
|
57
|
+
if (pointCount === void 0) { pointCount = 64; }
|
|
58
|
+
if (startAngle === void 0) { startAngle = 0; }
|
|
59
|
+
if (stopAngle === void 0) { stopAngle = 2 * Math.PI; }
|
|
60
|
+
var step = 2 * Math.PI / pointCount;
|
|
61
|
+
var points = [];
|
|
62
|
+
var angle = startAngle;
|
|
57
63
|
while (angle < stopAngle - step) {
|
|
58
64
|
points.push(new DPoint_1.DPoint(this.r).scale(Math.cos(angle), Math.sin(angle))
|
|
59
65
|
.move(this.center));
|
|
60
66
|
angle += step;
|
|
61
67
|
}
|
|
62
|
-
|
|
63
|
-
|
|
68
|
+
var x = this.r * Math.cos(stopAngle) + this.center.x;
|
|
69
|
+
var y = this.r * Math.sin(stopAngle) + this.center.y;
|
|
64
70
|
points.push(new DPoint_1.DPoint(x, y));
|
|
65
71
|
return new DPolygon_1.DPolygon(points);
|
|
66
|
-
}
|
|
67
|
-
findPolygonInsideOnSphere
|
|
72
|
+
};
|
|
73
|
+
DCircle.prototype.findPolygonInsideOnSphere = function (pointCount, startAngle, stopAngle) {
|
|
74
|
+
if (pointCount === void 0) { pointCount = 64; }
|
|
75
|
+
if (startAngle === void 0) { startAngle = 0; }
|
|
76
|
+
if (stopAngle === void 0) { stopAngle = 2 * Math.PI; }
|
|
68
77
|
(0, utils_1.checkFunction)('findPolygonInsideOnSphere')
|
|
69
78
|
.checkArgument('center')
|
|
70
79
|
.shouldBeDegree(this.center);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
80
|
+
var step = 2 * Math.PI / pointCount;
|
|
81
|
+
var points = [];
|
|
82
|
+
var angle = startAngle;
|
|
74
83
|
while (angle < stopAngle - step) {
|
|
75
84
|
points.push(this.sphereOffset(angle));
|
|
76
85
|
angle += step;
|
|
77
86
|
}
|
|
78
87
|
points.push(this.sphereOffset(stopAngle));
|
|
79
88
|
return new DPolygon_1.DPolygon(points);
|
|
80
|
-
}
|
|
81
|
-
sphereOffset(bearing, earthRadius
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
};
|
|
90
|
+
DCircle.prototype.sphereOffset = function (bearing, earthRadius) {
|
|
91
|
+
if (earthRadius === void 0) { earthRadius = DPoint_1.EARTH_RADIUS_IN_METERS; }
|
|
92
|
+
var _a = this.center.clone().degreeToRadians(), lon1 = _a.x, lat1 = _a.y;
|
|
93
|
+
var dByR = this.r / earthRadius;
|
|
94
|
+
var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) +
|
|
85
95
|
Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
|
|
86
|
-
|
|
96
|
+
var lon = lon1 +
|
|
87
97
|
Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
|
|
88
98
|
return new DPoint_1.DPoint(lon, lat).radiansToDegrees();
|
|
89
|
-
}
|
|
90
|
-
|
|
99
|
+
};
|
|
100
|
+
return DCircle;
|
|
101
|
+
}());
|
|
91
102
|
exports.DCircle = DCircle;
|
package/dist/cjs/DLine.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DLine = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
var DPoint_1 = require("./DPoint");
|
|
5
|
+
var utils_1 = require("./utils");
|
|
6
|
+
var DNumbers_1 = require("./DNumbers");
|
|
7
|
+
var DLine = (function () {
|
|
8
|
+
function DLine(a, b, c, begin, end) {
|
|
9
|
+
if (begin === void 0) { begin = DPoint_1.DPoint.zero(); }
|
|
10
|
+
if (end === void 0) { end = DPoint_1.DPoint.zero(); }
|
|
9
11
|
this.a = a;
|
|
10
12
|
this.b = b;
|
|
11
13
|
this.c = c;
|
|
12
14
|
this.begin = begin;
|
|
13
15
|
this.end = end;
|
|
14
16
|
}
|
|
15
|
-
clone() {
|
|
17
|
+
DLine.prototype.clone = function () {
|
|
16
18
|
return new DLine(this.a, this.b, this.c, this.begin.clone(), this.end.clone());
|
|
17
|
-
}
|
|
18
|
-
findPerpendicular(p) {
|
|
19
|
+
};
|
|
20
|
+
DLine.prototype.findPerpendicular = function (p) {
|
|
19
21
|
(0, utils_1.checkFunction)('findPerpendicular')
|
|
20
22
|
.checkArgument('this.begin')
|
|
21
23
|
.shouldBeMeters(this.begin)
|
|
@@ -24,8 +26,8 @@ class DLine {
|
|
|
24
26
|
.checkArgument('p')
|
|
25
27
|
.shouldBeMeters(p);
|
|
26
28
|
return new DLine(-this.b, this.a, this.b * p.x - this.a * p.y);
|
|
27
|
-
}
|
|
28
|
-
perpendicularDistance(p) {
|
|
29
|
+
};
|
|
30
|
+
DLine.prototype.perpendicularDistance = function (p) {
|
|
29
31
|
(0, utils_1.checkFunction)('perpendicularDistance')
|
|
30
32
|
.checkArgument('this.begin')
|
|
31
33
|
.shouldBeMeters(this.begin)
|
|
@@ -33,12 +35,14 @@ class DLine {
|
|
|
33
35
|
.shouldBeMeters(this.end)
|
|
34
36
|
.checkArgument('p')
|
|
35
37
|
.shouldBeMeters(p);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
var perpendicularLine = this.findPerpendicular(p);
|
|
39
|
+
var targetPoint = perpendicularLine.findPoint(this);
|
|
38
40
|
return targetPoint.distance(p);
|
|
39
|
-
}
|
|
40
|
-
intersection(l, d
|
|
41
|
-
|
|
41
|
+
};
|
|
42
|
+
DLine.prototype.intersection = function (l, d, includeOnly) {
|
|
43
|
+
if (d === void 0) { d = 0; }
|
|
44
|
+
if (includeOnly === void 0) { includeOnly = false; }
|
|
45
|
+
var p = this.findPoint(l);
|
|
42
46
|
if (p) {
|
|
43
47
|
if (includeOnly) {
|
|
44
48
|
return this.insideRange(p, d) && l.insideRange(p, d) ? p : null;
|
|
@@ -46,12 +50,12 @@ class DLine {
|
|
|
46
50
|
return this.inRange(p, d) && l.inRange(p, d) ? p : null;
|
|
47
51
|
}
|
|
48
52
|
return null;
|
|
49
|
-
}
|
|
50
|
-
intersectionWithCircle(circle) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
};
|
|
54
|
+
DLine.prototype.intersectionWithCircle = function (circle) {
|
|
55
|
+
var center = circle.center, r = circle.r;
|
|
56
|
+
var per = this.findPerpendicular(center);
|
|
57
|
+
var t = this.findPoint(per);
|
|
58
|
+
var distance = t.distance(center);
|
|
55
59
|
if (this.begin.equal(center)) {
|
|
56
60
|
distance = 0;
|
|
57
61
|
}
|
|
@@ -59,86 +63,108 @@ class DLine {
|
|
|
59
63
|
distance = 0;
|
|
60
64
|
}
|
|
61
65
|
if (distance < r) {
|
|
62
|
-
|
|
66
|
+
var _a = this, a = _a.a, b = _a.b, c = _a.c;
|
|
63
67
|
if (this.isParallel) {
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
var ct = center.distance(t);
|
|
69
|
+
var move = Math.sqrt(r * r - ct * ct);
|
|
66
70
|
if (this.isParallelY) {
|
|
67
71
|
t.x = this.begin.x;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return [
|
|
72
|
+
var r1_1 = t.clone().move(0, -move);
|
|
73
|
+
var r2_1 = t.clone().move(0, move);
|
|
74
|
+
return [r1_1, r2_1];
|
|
71
75
|
}
|
|
72
76
|
if (this.isParallelX) {
|
|
73
77
|
t.y = this.begin.y;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return [
|
|
78
|
+
var r1_2 = t.clone().move(move, 0);
|
|
79
|
+
var r2_2 = t.clone().move(-move, 0);
|
|
80
|
+
return [r1_2, r2_2];
|
|
77
81
|
}
|
|
78
82
|
}
|
|
79
83
|
if (this.begin.like(center)) {
|
|
80
|
-
|
|
84
|
+
var p = this.begin.clone();
|
|
81
85
|
return [this.movePoint(p, r), this.movePoint(p, -r)];
|
|
82
86
|
}
|
|
83
87
|
if (this.end.like(center)) {
|
|
84
|
-
|
|
88
|
+
var p = this.end.clone();
|
|
85
89
|
return [this.movePoint(p, r), this.movePoint(p, -r)];
|
|
86
90
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
var s = a * a + b * b;
|
|
92
|
+
var d = r * r - c * c / s;
|
|
93
|
+
var mult = Math.sqrt(d / s);
|
|
94
|
+
var r1 = t.clone().move(b * mult, -a * mult);
|
|
95
|
+
var r2 = t.clone().move(-b * mult, a * mult);
|
|
92
96
|
return [r1, r2];
|
|
93
97
|
}
|
|
94
98
|
if (distance === r) {
|
|
95
99
|
return t;
|
|
96
100
|
}
|
|
97
101
|
return null;
|
|
98
|
-
}
|
|
99
|
-
inRange(p, d
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
};
|
|
103
|
+
DLine.prototype.inRange = function (p, d) {
|
|
104
|
+
if (d === void 0) { d = 0; }
|
|
105
|
+
var _a = this, minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY;
|
|
106
|
+
var x = p.x, y = p.y;
|
|
107
|
+
var isInX = x >= minX - d && x <= maxX + d;
|
|
108
|
+
var isInY = y >= minY - d && y <= maxY + d;
|
|
104
109
|
return isInX && isInY;
|
|
105
|
-
}
|
|
106
|
-
insideRange(p, d
|
|
107
|
-
|
|
110
|
+
};
|
|
111
|
+
DLine.prototype.insideRange = function (p, d) {
|
|
112
|
+
if (d === void 0) { d = 0; }
|
|
113
|
+
var _a = this, begin = _a.begin, end = _a.end;
|
|
108
114
|
return this.inRange(p, d) && !begin.like(p, 0.00001) && !end.like(p, 0.00001);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
115
|
+
};
|
|
116
|
+
Object.defineProperty(DLine.prototype, "center", {
|
|
117
|
+
get: function () {
|
|
118
|
+
return this.begin
|
|
119
|
+
.clone()
|
|
120
|
+
.setIfLessThan(this.end)
|
|
121
|
+
.move(this.end
|
|
122
|
+
.clone()
|
|
123
|
+
.move(this.begin
|
|
124
|
+
.clone()
|
|
125
|
+
.minus())
|
|
126
|
+
.abs()
|
|
127
|
+
.minus()
|
|
128
|
+
.divide(2));
|
|
129
|
+
},
|
|
130
|
+
enumerable: false,
|
|
131
|
+
configurable: true
|
|
132
|
+
});
|
|
133
|
+
Object.defineProperty(DLine.prototype, "minX", {
|
|
134
|
+
get: function () {
|
|
135
|
+
return Math.min(this.begin.x, this.end.x);
|
|
136
|
+
},
|
|
137
|
+
enumerable: false,
|
|
138
|
+
configurable: true
|
|
139
|
+
});
|
|
140
|
+
Object.defineProperty(DLine.prototype, "minY", {
|
|
141
|
+
get: function () {
|
|
142
|
+
return Math.min(this.begin.y, this.end.y);
|
|
143
|
+
},
|
|
144
|
+
enumerable: false,
|
|
145
|
+
configurable: true
|
|
146
|
+
});
|
|
147
|
+
Object.defineProperty(DLine.prototype, "maxX", {
|
|
148
|
+
get: function () {
|
|
149
|
+
return Math.max(this.begin.x, this.end.x);
|
|
150
|
+
},
|
|
151
|
+
enumerable: false,
|
|
152
|
+
configurable: true
|
|
153
|
+
});
|
|
154
|
+
Object.defineProperty(DLine.prototype, "maxY", {
|
|
155
|
+
get: function () {
|
|
156
|
+
return Math.max(this.begin.y, this.end.y);
|
|
157
|
+
},
|
|
158
|
+
enumerable: false,
|
|
159
|
+
configurable: true
|
|
160
|
+
});
|
|
161
|
+
DLine.prototype.toString = function () {
|
|
162
|
+
return "(".concat(this.a, ", ").concat(this.b, ", ").concat(this.c, ")");
|
|
163
|
+
};
|
|
164
|
+
DLine.prototype.getValue = function () {
|
|
139
165
|
return [this.a, this.b, this.c];
|
|
140
|
-
}
|
|
141
|
-
x(p) {
|
|
166
|
+
};
|
|
167
|
+
DLine.prototype.x = function (p) {
|
|
142
168
|
if (this.isParallelY) {
|
|
143
169
|
return new DPoint_1.DPoint(-this.c / this.a, p.y);
|
|
144
170
|
}
|
|
@@ -146,8 +172,8 @@ class DLine {
|
|
|
146
172
|
return new DPoint_1.DPoint(p.x, -this.c / this.b);
|
|
147
173
|
}
|
|
148
174
|
return new DPoint_1.DPoint(-this.b / this.a * p.y - this.c / this.a, p.y);
|
|
149
|
-
}
|
|
150
|
-
y(p) {
|
|
175
|
+
};
|
|
176
|
+
DLine.prototype.y = function (p) {
|
|
151
177
|
if (this.isParallelY) {
|
|
152
178
|
return new DPoint_1.DPoint(-this.c / this.a, p.y);
|
|
153
179
|
}
|
|
@@ -155,8 +181,8 @@ class DLine {
|
|
|
155
181
|
return new DPoint_1.DPoint(p.x, -this.c / this.b);
|
|
156
182
|
}
|
|
157
183
|
return new DPoint_1.DPoint(p.x, -this.a / this.b * p.x - this.c / this.b);
|
|
158
|
-
}
|
|
159
|
-
findPoint(l) {
|
|
184
|
+
};
|
|
185
|
+
DLine.prototype.findPoint = function (l) {
|
|
160
186
|
if (this.isParallelY && l.isParallelY) {
|
|
161
187
|
return null;
|
|
162
188
|
}
|
|
@@ -170,81 +196,102 @@ class DLine {
|
|
|
170
196
|
return new DPoint_1.DPoint(-this.c / this.a, -l.c / l.b);
|
|
171
197
|
}
|
|
172
198
|
if (this.isParallelY) {
|
|
173
|
-
|
|
199
|
+
var x = -this.c / this.a;
|
|
174
200
|
return l.y(new DPoint_1.DPoint(x));
|
|
175
201
|
}
|
|
176
202
|
if (this.isParallelX) {
|
|
177
|
-
|
|
203
|
+
var y = -this.c / this.b;
|
|
178
204
|
return l.x(new DPoint_1.DPoint(0, y));
|
|
179
205
|
}
|
|
180
206
|
if (l.isParallelY) {
|
|
181
|
-
|
|
207
|
+
var x = -l.c / l.a;
|
|
182
208
|
return this.y(new DPoint_1.DPoint(x));
|
|
183
209
|
}
|
|
184
210
|
if (l.isParallelX) {
|
|
185
|
-
|
|
211
|
+
var y = -l.c / l.b;
|
|
186
212
|
return this.x(new DPoint_1.DPoint(0, y));
|
|
187
213
|
}
|
|
188
|
-
|
|
214
|
+
var res = this.y(new DPoint_1.DPoint((l.c / l.b - this.c / this.b) / (this.a / this.b - l.a / l.b)));
|
|
189
215
|
if (!isFinite(res.x) && !isFinite(res.y)) {
|
|
190
216
|
return null;
|
|
191
217
|
}
|
|
192
218
|
return res;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
219
|
+
};
|
|
220
|
+
Object.defineProperty(DLine.prototype, "isParallel", {
|
|
221
|
+
get: function () {
|
|
222
|
+
return this.isParallelX || this.isParallelY;
|
|
223
|
+
},
|
|
224
|
+
enumerable: false,
|
|
225
|
+
configurable: true
|
|
226
|
+
});
|
|
227
|
+
Object.defineProperty(DLine.prototype, "isParallelY", {
|
|
228
|
+
get: function () {
|
|
229
|
+
return Math.abs(this.b) < 0.001;
|
|
230
|
+
},
|
|
231
|
+
enumerable: false,
|
|
232
|
+
configurable: true
|
|
233
|
+
});
|
|
234
|
+
Object.defineProperty(DLine.prototype, "isParallelX", {
|
|
235
|
+
get: function () {
|
|
236
|
+
return Math.abs(this.a) < 0.001;
|
|
237
|
+
},
|
|
238
|
+
enumerable: false,
|
|
239
|
+
configurable: true
|
|
240
|
+
});
|
|
241
|
+
Object.defineProperty(DLine.prototype, "points", {
|
|
242
|
+
get: function () {
|
|
243
|
+
return [this.begin, this.end];
|
|
244
|
+
},
|
|
245
|
+
enumerable: false,
|
|
246
|
+
configurable: true
|
|
247
|
+
});
|
|
248
|
+
DLine.prototype.getFi = function () {
|
|
207
249
|
(0, utils_1.checkFunction)('getFi')
|
|
208
250
|
.checkArgument('this.begin')
|
|
209
251
|
.shouldBeMeters(this.begin)
|
|
210
252
|
.checkArgument('this.end')
|
|
211
253
|
.shouldBeMeters(this.end);
|
|
212
|
-
|
|
213
|
-
|
|
254
|
+
var _a = this.end.clone().move(this.begin.clone().minus()), x = _a.x, y = _a.y;
|
|
255
|
+
var v = Math.atan2(y, x) - Math.PI;
|
|
214
256
|
if (v > 0) {
|
|
215
257
|
v = Math.PI - v;
|
|
216
258
|
}
|
|
217
259
|
return (Math.PI - v) % (Math.PI * 2);
|
|
218
|
-
}
|
|
219
|
-
toWKT() {
|
|
220
|
-
|
|
221
|
-
return
|
|
222
|
-
}
|
|
223
|
-
movePoint(i, k) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
260
|
+
};
|
|
261
|
+
DLine.prototype.toWKT = function () {
|
|
262
|
+
var _a = this, _b = _a.begin, x1 = _b.x, y1 = _b.y, _c = _a.end, x2 = _c.x, y2 = _c.y;
|
|
263
|
+
return "LINESTRING (".concat(x1, " ").concat(y1, ", ").concat(x2, " ").concat(y2, ")");
|
|
264
|
+
};
|
|
265
|
+
DLine.prototype.movePoint = function (i, k) {
|
|
266
|
+
var isArray = Array.isArray(i);
|
|
267
|
+
var p = isArray ? i : [i];
|
|
268
|
+
var d = (isArray ? k : [k]);
|
|
269
|
+
var fi = this.findFi(new DLine(1, 0, 0));
|
|
270
|
+
var td = this.x(new DPoint_1.DPoint(1, 1)).distance(this.x(new DPoint_1.DPoint(2, 2))) / 2;
|
|
271
|
+
var sinCos = new DPoint_1.DPoint(Math.sin(fi), Math.cos(fi));
|
|
272
|
+
var dt = sinCos.clone().scale(td);
|
|
273
|
+
var p1T = p[0].clone().move(dt.clone().minus());
|
|
274
|
+
var p2T = p[0].clone().move(dt);
|
|
275
|
+
var res = [];
|
|
234
276
|
if (DNumbers_1.DNumbers.like(this.y(p1T).y, p1T.y) || DNumbers_1.DNumbers.like(this.y(p2T).y, p2T.y)) {
|
|
235
|
-
res = p.map((t, index)
|
|
236
|
-
.move(sinCos.clone().scale(d[index])));
|
|
277
|
+
res = p.map(function (t, index) { return t.clone()
|
|
278
|
+
.move(sinCos.clone().scale(d[index])); });
|
|
237
279
|
}
|
|
238
280
|
else {
|
|
239
|
-
res = p.map((t, index)
|
|
281
|
+
res = p.map(function (t, index) { return t.clone()
|
|
240
282
|
.move(sinCos.clone().scale(d[index])
|
|
241
|
-
.setX((
|
|
283
|
+
.setX(function (_a) {
|
|
284
|
+
var x = _a.x;
|
|
285
|
+
return -x;
|
|
286
|
+
})); });
|
|
242
287
|
}
|
|
243
288
|
return isArray ? res : res[0];
|
|
244
|
-
}
|
|
245
|
-
findFi
|
|
246
|
-
|
|
247
|
-
|
|
289
|
+
};
|
|
290
|
+
DLine.prototype.findFi = function (_a, delta) {
|
|
291
|
+
var a = _a.a, b = _a.b;
|
|
292
|
+
if (delta === void 0) { delta = 1.0001; }
|
|
293
|
+
var _b = this, q = _b.a, w = _b.b;
|
|
294
|
+
var val = (q * a + w * b) / (Math.sqrt(q * q + w * w) * Math.sqrt(a * a + b * b));
|
|
248
295
|
if (val > 1 && val < delta) {
|
|
249
296
|
val = 1;
|
|
250
297
|
}
|
|
@@ -252,10 +299,12 @@ class DLine {
|
|
|
252
299
|
val = -1;
|
|
253
300
|
}
|
|
254
301
|
return Math.acos(val);
|
|
255
|
-
}
|
|
256
|
-
vectorProduct
|
|
257
|
-
|
|
302
|
+
};
|
|
303
|
+
DLine.prototype.vectorProduct = function (_a) {
|
|
304
|
+
var a = _a.a, b = _a.b, c = _a.c;
|
|
305
|
+
var _b = this, q = _b.a, w = _b.b, e = _b.c;
|
|
258
306
|
return new DLine(w * c - e * b, e * a - q * c, q * b - w * a);
|
|
259
|
-
}
|
|
260
|
-
|
|
307
|
+
};
|
|
308
|
+
return DLine;
|
|
309
|
+
}());
|
|
261
310
|
exports.DLine = DLine;
|
package/dist/cjs/DNumbers.js
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DNumbers = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return Math.abs(v - s) < d;
|
|
4
|
+
var DPoint_1 = require("./DPoint");
|
|
5
|
+
var delta = 0.001;
|
|
6
|
+
var DNumbers = (function () {
|
|
7
|
+
function DNumbers() {
|
|
9
8
|
}
|
|
10
|
-
|
|
9
|
+
DNumbers.like = function (v, s, d) {
|
|
10
|
+
if (d === void 0) { d = delta; }
|
|
11
|
+
return Math.abs(v - s) < d;
|
|
12
|
+
};
|
|
13
|
+
DNumbers.likeZero = function (v) {
|
|
11
14
|
return DNumbers.like(v, 0);
|
|
12
|
-
}
|
|
13
|
-
|
|
15
|
+
};
|
|
16
|
+
DNumbers.like2PI = function (v) {
|
|
14
17
|
return DNumbers.like(DNumbers.rad2Deg(v), DPoint_1.DOUBLE_PI_IN_DEGREE);
|
|
15
|
-
}
|
|
16
|
-
|
|
18
|
+
};
|
|
19
|
+
DNumbers.likePI = function (v) {
|
|
17
20
|
return DNumbers.like(DNumbers.rad2Deg(v), DPoint_1.PI_IN_DEGREE);
|
|
18
|
-
}
|
|
19
|
-
|
|
21
|
+
};
|
|
22
|
+
DNumbers.rad2Deg = function (v) {
|
|
20
23
|
return v * DPoint_1.DEGREE_TO_PI;
|
|
21
|
-
}
|
|
22
|
-
|
|
24
|
+
};
|
|
25
|
+
DNumbers.deg2Rad = function (v) {
|
|
23
26
|
return v * DPoint_1.PI_TO_DEGREE;
|
|
24
|
-
}
|
|
25
|
-
|
|
27
|
+
};
|
|
28
|
+
return DNumbers;
|
|
29
|
+
}());
|
|
26
30
|
exports.DNumbers = DNumbers;
|