nodes2ts 2.0.0 → 3.0.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.
- package/.eslintignore +3 -0
- package/.eslintrc.cjs +11 -0
- package/.github/workflows/lint.js.yml +22 -0
- package/.github/workflows/node.js.yml +22 -0
- package/.mocharc.js +7 -0
- package/README.md +21 -5
- package/dist/Interval.js +9 -8
- package/dist/Interval.js.map +1 -1
- package/dist/MutableInteger.js +5 -4
- package/dist/MutableInteger.js.map +1 -1
- package/dist/Platform.d.ts +15 -0
- package/dist/Platform.js +53 -0
- package/dist/Platform.js.map +1 -0
- package/dist/R1Interval.js +39 -48
- package/dist/R1Interval.js.map +1 -1
- package/dist/R2Vector.d.ts +3 -3
- package/dist/R2Vector.js +50 -57
- package/dist/R2Vector.js.map +1 -1
- package/dist/S1Angle.d.ts +34 -0
- package/dist/S1Angle.js +81 -26
- package/dist/S1Angle.js.map +1 -1
- package/dist/S1ChordAngle.d.ts +166 -0
- package/dist/S1ChordAngle.js +318 -0
- package/dist/S1ChordAngle.js.map +1 -0
- package/dist/S1Interval.js +78 -83
- package/dist/S1Interval.js.map +1 -1
- package/dist/S2.d.ts +5 -0
- package/dist/S2.js +80 -85
- package/dist/S2.js.map +1 -1
- package/dist/S2Cap.d.ts +31 -22
- package/dist/S2Cap.js +194 -187
- package/dist/S2Cap.js.map +1 -1
- package/dist/S2Cell.d.ts +14 -11
- package/dist/S2Cell.js +194 -197
- package/dist/S2Cell.js.map +1 -1
- package/dist/S2CellId.d.ts +37 -14
- package/dist/S2CellId.js +406 -356
- package/dist/S2CellId.js.map +1 -1
- package/dist/S2CellUnion.d.ts +1 -2
- package/dist/S2CellUnion.js +131 -126
- package/dist/S2CellUnion.js.map +1 -1
- package/dist/S2EdgeUtil.js +12 -14
- package/dist/S2EdgeUtil.js.map +1 -1
- package/dist/S2LatLng.d.ts +7 -2
- package/dist/S2LatLng.js +85 -81
- package/dist/S2LatLng.js.map +1 -1
- package/dist/S2LatLngRect.d.ts +7 -2
- package/dist/S2LatLngRect.js +203 -184
- package/dist/S2LatLngRect.js.map +1 -1
- package/dist/S2Metric.d.ts +1 -1
- package/dist/S2Metric.js +28 -24
- package/dist/S2Metric.js.map +1 -1
- package/dist/S2Point.d.ts +35 -0
- package/dist/S2Point.js +116 -66
- package/dist/S2Point.js.map +1 -1
- package/dist/S2Projections.d.ts +40 -5
- package/dist/S2Projections.js +226 -47
- package/dist/S2Projections.js.map +1 -1
- package/dist/S2Region.js +2 -1
- package/dist/S2Region.js.map +1 -1
- package/dist/S2RegionCoverer.d.ts +21 -6
- package/dist/S2RegionCoverer.js +144 -108
- package/dist/S2RegionCoverer.js.map +1 -1
- package/dist/export.js +42 -32
- package/dist/export.js.map +1 -1
- package/dist/utils/preconditions.d.ts +2 -0
- package/dist/utils/preconditions.js +16 -0
- package/dist/utils/preconditions.js.map +1 -0
- package/package.json +27 -21
- package/yarn.lock +0 -4381
package/.eslintignore
ADDED
package/.eslintrc.cjs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Lint CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ master ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
node-version: [16.x]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v3
|
|
17
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
18
|
+
uses: actions/setup-node@v3
|
|
19
|
+
with:
|
|
20
|
+
node-version: ${{ matrix.node-version }}
|
|
21
|
+
- run: yarn --frozen-lockfile
|
|
22
|
+
- run: yarn lint
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Node.js CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ master ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
node-version: [14.x, 16.x]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v3
|
|
17
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
18
|
+
uses: actions/setup-node@v3
|
|
19
|
+
with:
|
|
20
|
+
node-version: ${{ matrix.node-version }}
|
|
21
|
+
- run: yarn --frozen-lockfile
|
|
22
|
+
- run: yarn test
|
package/.mocharc.js
ADDED
package/README.md
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
### Node
|
|
1
|
+
### Node S2 Geometry Typescript
|
|
2
|
+
<img src="https://github.com/vekexasia/nodes2-ts/actions/workflows/node.js.yml/badge.svg" />
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
<img src="https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white"/> <img
|
|
5
|
+
src="https://img.shields.io/badge/mocha.js-323330?style=for-the-badge&logo=mocha&logoColor=Brown"/> <img
|
|
6
|
+
src="https://img.shields.io/badge/eslint-3A33D1?style=for-the-badge&logo=eslint&logoColor=white"/>
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
|
|
9
|
+
An extensive port of google's s2 geometry library written in TypeScript.
|
|
10
|
+
|
|
11
|
+
The only direct dependencies are some math related npm packages (long and math-float64-exponent).
|
|
6
12
|
|
|
7
13
|
Npm package is `nodes2ts`.
|
|
8
14
|
|
|
9
15
|
#### Tests
|
|
10
|
-
This project is backed by 60 1-by-1 comparison tests between this implementation and the original one.
|
|
16
|
+
This project is backed by 60+ 1-by-1 comparison tests between this implementation and the original one.
|
|
11
17
|
|
|
12
18
|
When implementing a not-yet-ported feature, please generate the needed tests by modifiying the java code within `java-test-creator` folder
|
|
13
19
|
|
|
@@ -52,7 +58,7 @@ Also, for some classes, an extra `toGEOJSON` method is provided to let developer
|
|
|
52
58
|
- Convert Lat/Lng to S2CellId
|
|
53
59
|
```typescript
|
|
54
60
|
const cellId = S2CellId.fromPoint(
|
|
55
|
-
S2LatLng.fromDegrees(10 /*latitude*/, 11 /*longitude*/)
|
|
61
|
+
S2LatLng.fromDegrees(10 /*latitude*/, 11 /*longitude*/).toPoint()
|
|
56
62
|
);
|
|
57
63
|
```
|
|
58
64
|
|
|
@@ -78,6 +84,16 @@ console.log(cell.toGEOJSON());
|
|
|
78
84
|
// copy the output and paste it on http://geojson.io/
|
|
79
85
|
```
|
|
80
86
|
|
|
87
|
+
## Contributing
|
|
88
|
+
|
|
89
|
+
The library was initially conceived to be used in both server and client env leveraging TypeScript peculiarities.
|
|
90
|
+
|
|
91
|
+
If you wish to contribute please make sure, wherever applicable, to create a tiny merge request to ease the code
|
|
92
|
+
review of the proposed changes.
|
|
93
|
+
|
|
94
|
+
## Want to connect with the author?
|
|
81
95
|
|
|
96
|
+
If you wish to contact the library author for business (or any other) proposal you can write an email to `vekexasia`
|
|
97
|
+
`at` gmail `dot` com.
|
|
82
98
|
|
|
83
99
|
|
package/dist/Interval.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Interval = void 0;
|
|
4
|
+
class Interval {
|
|
5
|
+
constructor(lo, hi) {
|
|
4
6
|
this.lo = lo;
|
|
5
7
|
this.hi = hi;
|
|
6
8
|
}
|
|
7
|
-
|
|
9
|
+
toString() {
|
|
8
10
|
return "[" + this.lo.toString() + ", " + this.hi.toString() + "]";
|
|
9
|
-
}
|
|
11
|
+
}
|
|
10
12
|
/**
|
|
11
13
|
* Return true if two intervals contains the same set of points.
|
|
12
14
|
*/
|
|
13
|
-
|
|
15
|
+
equals(that) {
|
|
14
16
|
if (typeof (that) === typeof (this)) {
|
|
15
17
|
return this.lo == that.lo && this.hi == that.hi;
|
|
16
18
|
}
|
|
17
19
|
return false;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
}());
|
|
20
|
+
}
|
|
21
|
+
}
|
|
21
22
|
exports.Interval = Interval;
|
|
22
23
|
//# sourceMappingURL=Interval.js.map
|
package/dist/Interval.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interval.js","sourceRoot":"","sources":["../src/Interval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Interval.js","sourceRoot":"","sources":["../src/Interval.ts"],"names":[],"mappings":";;;AAAA,MAAsB,QAAQ;IAI5B,YAAY,EAAS,EAAE,EAAS;QAC9B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAsBO,QAAQ;QACd,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;IACpE,CAAC;IAGD;;OAEG;IACI,MAAM,CAAC,IAAQ;QACpB,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,OAAM,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;SACjD;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CAGF;AA7CD,4BA6CC"}
|
package/dist/MutableInteger.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MutableInteger = void 0;
|
|
4
|
+
class MutableInteger {
|
|
5
|
+
constructor(val) {
|
|
4
6
|
this.val = val;
|
|
5
7
|
}
|
|
6
|
-
|
|
7
|
-
}());
|
|
8
|
+
}
|
|
8
9
|
exports.MutableInteger = MutableInteger;
|
|
9
10
|
//# sourceMappingURL=MutableInteger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MutableInteger.js","sourceRoot":"","sources":["../src/MutableInteger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MutableInteger.js","sourceRoot":"","sources":["../src/MutableInteger.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IAEzB,YAAmB,GAAU;QAAV,QAAG,GAAH,GAAG,CAAO;IAC7B,CAAC;CACF;AAJD,wCAIC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class Platform {
|
|
2
|
+
static IEEEremainder(f1: number, f2: number): number;
|
|
3
|
+
/**
|
|
4
|
+
* If v is non-zero, return an integer {@code exp} such that
|
|
5
|
+
* {@code (0.5 <= |v|*2^(-exp) < 1)}. If v is zero, return 0.
|
|
6
|
+
*
|
|
7
|
+
* <p>Note that this arguably a bad definition of exponent because it makes
|
|
8
|
+
* {@code exp(9) == 4}. In decimal this would be like saying that the
|
|
9
|
+
* exponent of 1234 is 4, when in scientific 'exponent' notation 1234 is
|
|
10
|
+
* {@code 1.234 x 10^3}.
|
|
11
|
+
*
|
|
12
|
+
* TODO(dbeaumont): Replace this with "DoubleUtils.getExponent(v) - 1" ?
|
|
13
|
+
*/
|
|
14
|
+
static getExponent(v: number): number;
|
|
15
|
+
}
|
package/dist/Platform.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Platform = void 0;
|
|
4
|
+
const exponent = require("math-float64-exponent");
|
|
5
|
+
class Platform {
|
|
6
|
+
static IEEEremainder(f1, f2) {
|
|
7
|
+
// let r = f1 % f2;
|
|
8
|
+
// if (isNaN(r) || r == (f2) || r <= (Math.abs(f2) / 2)) {
|
|
9
|
+
// return r;
|
|
10
|
+
// } else {
|
|
11
|
+
// return (f1 >= (0) ? 1 : -1) * (r - f2);
|
|
12
|
+
// }
|
|
13
|
+
if (Number.isNaN(f1)) {
|
|
14
|
+
return f1;
|
|
15
|
+
}
|
|
16
|
+
if (Number.isNaN(f2)) {
|
|
17
|
+
return f2;
|
|
18
|
+
}
|
|
19
|
+
if ((f2 === Number.POSITIVE_INFINITY || f2 === Number.NEGATIVE_INFINITY) && Number.isFinite(f1)) {
|
|
20
|
+
return f1;
|
|
21
|
+
}
|
|
22
|
+
return f1 - (Math.round(f1 / f2) * f2);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* If v is non-zero, return an integer {@code exp} such that
|
|
26
|
+
* {@code (0.5 <= |v|*2^(-exp) < 1)}. If v is zero, return 0.
|
|
27
|
+
*
|
|
28
|
+
* <p>Note that this arguably a bad definition of exponent because it makes
|
|
29
|
+
* {@code exp(9) == 4}. In decimal this would be like saying that the
|
|
30
|
+
* exponent of 1234 is 4, when in scientific 'exponent' notation 1234 is
|
|
31
|
+
* {@code 1.234 x 10^3}.
|
|
32
|
+
*
|
|
33
|
+
* TODO(dbeaumont): Replace this with "DoubleUtils.getExponent(v) - 1" ?
|
|
34
|
+
*/
|
|
35
|
+
static getExponent(v) {
|
|
36
|
+
// if (v == 0) {
|
|
37
|
+
// return 0;
|
|
38
|
+
// }
|
|
39
|
+
// // IT should always be ((int)log(2,v))+1;
|
|
40
|
+
// const start = Math.floor(Math.log(v)/Math.log(2));
|
|
41
|
+
// for(let i= start; i<start+10; i++) {
|
|
42
|
+
// const curVal = Math.abs(v) * Math.pow(2,-i);
|
|
43
|
+
// if (curVal >= 0.5 && curVal < 1 ) {
|
|
44
|
+
// return i;
|
|
45
|
+
// }
|
|
46
|
+
// }
|
|
47
|
+
// throw new Error('method not written yet');
|
|
48
|
+
// // return (int)((S2.EXPONENT_MASK & bits) >> S2.EXPONENT_SHIFT) - 1022;
|
|
49
|
+
return exponent(v);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.Platform = Platform;
|
|
53
|
+
//# sourceMappingURL=Platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Platform.js","sourceRoot":"","sources":["../src/Platform.ts"],"names":[],"mappings":";;;AAAA,kDAAmD;AACnD,MAAa,QAAQ;IACZ,MAAM,CAAC,aAAa,CAAC,EAAU,EAAE,EAAU;QAChD,mBAAmB;QAEnB,0DAA0D;QAC1D,cAAc;QACd,WAAW;QACX,4CAA4C;QAC5C,IAAI;QAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACpB,OAAO,EAAE,CAAC;SACX;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACpB,OAAO,EAAE,CAAA;SACV;QAED,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,iBAAiB,IAAI,EAAE,KAAK,MAAM,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC/F,OAAO,EAAE,CAAC;SACX;QAED,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,WAAW,CAAC,CAAQ;QAChC,gBAAgB;QAChB,cAAc;QACd,IAAI;QACJ,4CAA4C;QAC5C,qDAAqD;QACrD,uCAAuC;QACvC,iDAAiD;QACjD,wCAAwC;QACxC,gBAAgB;QAChB,MAAM;QACN,IAAI;QACJ,6CAA6C;QAC7C,0EAA0E;QAC1E,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;CACF;AApDD,4BAoDC"}
|
package/dist/R1Interval.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
6
|
-
};
|
|
7
|
-
var Interval_1 = require("./Interval");
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.R1Interval = void 0;
|
|
4
|
+
const Interval_1 = require("./Interval");
|
|
8
5
|
/**
|
|
9
6
|
* An R1Interval represents a closed interval on a unit circle (also known as a
|
|
10
7
|
* 1-dimensional sphere). It is capable of representing the empty interval
|
|
@@ -24,65 +21,61 @@ var Interval_1 = require("./Interval");
|
|
|
24
21
|
* [-Pi, Pi], and the Empty() interval is [Pi, -Pi].
|
|
25
22
|
*
|
|
26
23
|
*/
|
|
27
|
-
|
|
28
|
-
__extends(R1Interval, _super);
|
|
29
|
-
function R1Interval() {
|
|
30
|
-
_super.apply(this, arguments);
|
|
31
|
-
}
|
|
24
|
+
class R1Interval extends Interval_1.Interval {
|
|
32
25
|
/** Return true if the interval is empty, i.e. it contains no points. */
|
|
33
|
-
|
|
26
|
+
isEmpty() {
|
|
34
27
|
return this.lo > this.hi;
|
|
35
|
-
}
|
|
36
|
-
|
|
28
|
+
}
|
|
29
|
+
getCenter() {
|
|
37
30
|
return (this.lo + this.hi) / 2;
|
|
38
|
-
}
|
|
39
|
-
|
|
31
|
+
}
|
|
32
|
+
getLength() {
|
|
40
33
|
return this.hi - this.lo;
|
|
41
|
-
}
|
|
42
|
-
|
|
34
|
+
}
|
|
35
|
+
contains(p) {
|
|
43
36
|
return p >= this.lo && p <= this.hi;
|
|
44
|
-
}
|
|
37
|
+
}
|
|
45
38
|
/** Return true if the interior of the interval contains the point 'p'. */
|
|
46
|
-
|
|
39
|
+
interiorContains(p) {
|
|
47
40
|
return p > this.lo && p < this.hi;
|
|
48
|
-
}
|
|
41
|
+
}
|
|
49
42
|
/**
|
|
50
43
|
* Return true if the interval contains the given interval 'y'. Works for
|
|
51
44
|
* empty, full, and singleton intervals.
|
|
52
45
|
*/
|
|
53
|
-
|
|
46
|
+
containsI(y) {
|
|
54
47
|
if (y.isEmpty()) {
|
|
55
48
|
return true;
|
|
56
49
|
}
|
|
57
50
|
return y.lo >= this.lo && y.hi <= this.hi;
|
|
58
|
-
}
|
|
59
|
-
|
|
51
|
+
}
|
|
52
|
+
interiorContainsI(y) {
|
|
60
53
|
if (y.isEmpty()) {
|
|
61
54
|
return true;
|
|
62
55
|
}
|
|
63
56
|
return y.lo > this.lo && y.hi < this.hi;
|
|
64
|
-
}
|
|
57
|
+
}
|
|
65
58
|
/**
|
|
66
59
|
* Return true if this interval intersects the given interval, i.e. if they
|
|
67
60
|
* have any points in common.
|
|
68
61
|
*/
|
|
69
|
-
|
|
62
|
+
intersects(y) {
|
|
70
63
|
if (this.lo <= y.lo) {
|
|
71
64
|
return y.lo <= (this.hi) && y.lo <= (y.hi);
|
|
72
65
|
}
|
|
73
66
|
else {
|
|
74
67
|
return this.lo <= (y.hi) && this.lo <= (this.hi);
|
|
75
68
|
}
|
|
76
|
-
}
|
|
69
|
+
}
|
|
77
70
|
/**
|
|
78
71
|
* Return true if the interior of this interval intersects any point of the
|
|
79
72
|
* given interval (including its boundary).
|
|
80
73
|
*/
|
|
81
|
-
|
|
74
|
+
interiorIntersects(y) {
|
|
82
75
|
return y.lo < (this.hi) && this.lo < (y.hi) && this.lo < (this.hi) && y.lo <= (y.hi);
|
|
83
|
-
}
|
|
76
|
+
}
|
|
84
77
|
/** Expand the interval so that it contains the given point "p". */
|
|
85
|
-
|
|
78
|
+
addPoint(p) {
|
|
86
79
|
if (this.isEmpty()) {
|
|
87
80
|
return R1Interval.fromPoint(p);
|
|
88
81
|
}
|
|
@@ -95,24 +88,24 @@ var R1Interval = (function (_super) {
|
|
|
95
88
|
else {
|
|
96
89
|
return new R1Interval(this.lo, this.hi);
|
|
97
90
|
}
|
|
98
|
-
}
|
|
91
|
+
}
|
|
99
92
|
/**
|
|
100
93
|
* Return an interval that contains all points with a distance "radius" of a
|
|
101
94
|
* point in this interval. Note that the expansion of an empty interval is
|
|
102
95
|
* always empty.
|
|
103
96
|
*/
|
|
104
|
-
|
|
97
|
+
expanded(radius) {
|
|
105
98
|
// assert (radius >= 0);
|
|
106
99
|
if (this.isEmpty()) {
|
|
107
100
|
return this;
|
|
108
101
|
}
|
|
109
102
|
return new R1Interval(this.lo - radius, this.hi + radius);
|
|
110
|
-
}
|
|
103
|
+
}
|
|
111
104
|
/**
|
|
112
105
|
* Return the smallest interval that contains this interval and the given
|
|
113
106
|
* interval "y".
|
|
114
107
|
*/
|
|
115
|
-
|
|
108
|
+
union(y) {
|
|
116
109
|
if (this.isEmpty()) {
|
|
117
110
|
return y;
|
|
118
111
|
}
|
|
@@ -120,20 +113,19 @@ var R1Interval = (function (_super) {
|
|
|
120
113
|
return this;
|
|
121
114
|
}
|
|
122
115
|
return new R1Interval(Math.min(this.lo, y.lo), Math.max(this.hi, y.hi));
|
|
123
|
-
}
|
|
116
|
+
}
|
|
124
117
|
/**
|
|
125
118
|
* Return the intersection of this interval with the given interval. Empty
|
|
126
119
|
* intervals do not need to be special-cased.
|
|
127
120
|
*/
|
|
128
|
-
|
|
121
|
+
intersection(y) {
|
|
129
122
|
return new R1Interval(Math.max(this.lo, y.lo), Math.min(this.hi, y.hi));
|
|
130
|
-
}
|
|
123
|
+
}
|
|
131
124
|
/**
|
|
132
125
|
* Return true if the length of the symmetric difference between the two
|
|
133
126
|
* intervals is at most the given tolerance.
|
|
134
127
|
*/
|
|
135
|
-
|
|
136
|
-
if (maxError === void 0) { maxError = 1e-15; }
|
|
128
|
+
approxEquals(y, maxError = 1e-15) {
|
|
137
129
|
if (this.isEmpty()) {
|
|
138
130
|
return y.getLength() <= (maxError);
|
|
139
131
|
}
|
|
@@ -141,27 +133,26 @@ var R1Interval = (function (_super) {
|
|
|
141
133
|
return this.getLength() <= (maxError);
|
|
142
134
|
}
|
|
143
135
|
return Math.abs(y.lo - (this.lo)) + Math.abs(y.hi - this.hi) <= (maxError);
|
|
144
|
-
}
|
|
145
|
-
|
|
136
|
+
}
|
|
137
|
+
static empty() {
|
|
146
138
|
return new R1Interval(1, 0);
|
|
147
|
-
}
|
|
148
|
-
|
|
139
|
+
}
|
|
140
|
+
static fromPoint(p) {
|
|
149
141
|
return new R1Interval(p, p);
|
|
150
|
-
}
|
|
142
|
+
}
|
|
151
143
|
/**
|
|
152
144
|
* Convenience method to construct the minimal interval containing the two
|
|
153
145
|
* given points. This is equivalent to starting with an empty interval and
|
|
154
146
|
* calling AddPoint() twice, but it is more efficient.
|
|
155
147
|
*/
|
|
156
|
-
|
|
148
|
+
static fromPointPair(p1, p2) {
|
|
157
149
|
if (p1 <= (p2)) {
|
|
158
150
|
return new R1Interval(p1, p2);
|
|
159
151
|
}
|
|
160
152
|
else {
|
|
161
153
|
return new R1Interval(p2, p1);
|
|
162
154
|
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
}(Interval_1.Interval));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
166
157
|
exports.R1Interval = R1Interval;
|
|
167
158
|
//# sourceMappingURL=R1Interval.js.map
|
package/dist/R1Interval.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"R1Interval.js","sourceRoot":"","sources":["../src/R1Interval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"R1Interval.js","sourceRoot":"","sources":["../src/R1Interval.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAa,UAAW,SAAQ,mBAAQ;IAEtC,wEAAwE;IACjE,OAAO;QACZ,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC3B,CAAC;IAEM,SAAS;QACd,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC;IAC/B,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC3B,CAAC;IAEM,QAAQ,CAAC,CAAQ;QACtB,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;IAEtC,CAAC;IAED,0EAA0E;IACnE,gBAAgB,CAAC,CAAQ;QAC9B,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,CAAY;QAC3B,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;IAC5C,CAAC;IAGM,iBAAiB,CAAC,CAAY;QACnC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,CAAY;QAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE;YACnB,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC5C;aAAM;YACL,OAAO,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAClD;IACH,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,CAAY;QACpC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,mEAAmE;IAC5D,QAAQ,CAAC,CAAQ;QACtB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAChC;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACxB,OAAO,IAAI,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;SACnC;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACxB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACnC;aAAM;YACL,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;SACzC;IACH,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,MAAa;QAC3B,wBAAwB;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,CAAY;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,OAAO,CAAC,CAAC;SACV;QACD,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,UAAU,CACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAC1B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,CAAY;QAC9B,OAAO,IAAI,UAAU,CACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAC1B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,CAAY,EAAE,QAAQ,GAAC,KAAK;QAC9C,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,OAAO,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAE,QAAQ,CAAC,CAAC;SACxC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAID,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAGD,MAAM,CAAC,SAAS,CAAC,CAAQ;QACvB,OAAO,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,EAAS,EAAE,EAAS;QACvC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YACd,OAAO,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC/B;aAAM;YACL,OAAO,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC/B;IACH,CAAC;CACF;AA3JD,gCA2JC"}
|
package/dist/R2Vector.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export declare class R2Vector {
|
|
|
9
9
|
private _x;
|
|
10
10
|
private _y;
|
|
11
11
|
constructor(_x: number, _y: number);
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
get x(): number;
|
|
13
|
+
get y(): number;
|
|
14
14
|
get(index: number): number;
|
|
15
15
|
static fromPointFace(p: S2Point, face: number): R2Vector;
|
|
16
16
|
static add(p1: R2Vector, p2: R2Vector): R2Vector;
|
|
@@ -22,7 +22,7 @@ export declare class R2Vector {
|
|
|
22
22
|
lessThan(vb: R2Vector): boolean;
|
|
23
23
|
static fromSTVector(stVector: R2Vector): R2Vector;
|
|
24
24
|
static singleStTOUV(s: number): number;
|
|
25
|
-
static singleUVToST(
|
|
25
|
+
static singleUVToST(u: number): number;
|
|
26
26
|
/**
|
|
27
27
|
* To be used only if this vector is representing uv.
|
|
28
28
|
* @param face
|
package/dist/R2Vector.js
CHANGED
|
@@ -1,58 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.R2Vector = void 0;
|
|
4
|
+
const S2Point_1 = require("./S2Point");
|
|
3
5
|
/**
|
|
4
6
|
* R2Vector represents a vector in the two-dimensional space. It defines the
|
|
5
7
|
* basic geometrical operations for 2D vectors, e.g. cross product, addition,
|
|
6
8
|
* norm, comparison etc.
|
|
7
9
|
*
|
|
8
10
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
class R2Vector {
|
|
12
|
+
constructor(_x, _y) {
|
|
11
13
|
this._x = _x;
|
|
12
14
|
this._y = _y;
|
|
13
15
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return this._y;
|
|
24
|
-
},
|
|
25
|
-
enumerable: true,
|
|
26
|
-
configurable: true
|
|
27
|
-
});
|
|
28
|
-
R2Vector.prototype.get = function (index) {
|
|
29
|
-
if (index > 1) {
|
|
30
|
-
throw new Error("Index out fo bounds error " + index);
|
|
16
|
+
get x() {
|
|
17
|
+
return this._x;
|
|
18
|
+
}
|
|
19
|
+
get y() {
|
|
20
|
+
return this._y;
|
|
21
|
+
}
|
|
22
|
+
get(index) {
|
|
23
|
+
if (index < 0 || index > 1) {
|
|
24
|
+
throw new Error(`Index out fo bounds error ${index}`);
|
|
31
25
|
}
|
|
32
26
|
return index == 0 ? this._x : this._y;
|
|
33
|
-
}
|
|
34
|
-
|
|
27
|
+
}
|
|
28
|
+
static fromPointFace(p, face) {
|
|
35
29
|
return p.toR2Vector(face);
|
|
36
|
-
}
|
|
37
|
-
|
|
30
|
+
}
|
|
31
|
+
static add(p1, p2) {
|
|
38
32
|
return new R2Vector(p1._x + (p2._x), p1._y + (p2._y));
|
|
39
|
-
}
|
|
40
|
-
|
|
33
|
+
}
|
|
34
|
+
static mul(p, m) {
|
|
41
35
|
return new R2Vector(m * (p._x), m * (p._y));
|
|
42
|
-
}
|
|
43
|
-
|
|
36
|
+
}
|
|
37
|
+
norm2() {
|
|
44
38
|
return this.x * this.x + this.y * this.y;
|
|
45
|
-
}
|
|
46
|
-
|
|
39
|
+
}
|
|
40
|
+
static dotProd(p1, p2) {
|
|
47
41
|
return p1.x * (p2.x) + (p1.y * (p2.y));
|
|
48
|
-
}
|
|
49
|
-
|
|
42
|
+
}
|
|
43
|
+
dotProd(that) {
|
|
50
44
|
return R2Vector.dotProd(this, that);
|
|
51
|
-
}
|
|
52
|
-
|
|
45
|
+
}
|
|
46
|
+
crossProd(that) {
|
|
53
47
|
return this.x * (that.y) - (this.y * (that.x));
|
|
54
|
-
}
|
|
55
|
-
|
|
48
|
+
}
|
|
49
|
+
lessThan(vb) {
|
|
56
50
|
if (this.x < (vb.x)) {
|
|
57
51
|
return true;
|
|
58
52
|
}
|
|
@@ -63,7 +57,7 @@ var R2Vector = (function () {
|
|
|
63
57
|
return true;
|
|
64
58
|
}
|
|
65
59
|
return false;
|
|
66
|
-
}
|
|
60
|
+
}
|
|
67
61
|
//
|
|
68
62
|
// @Override
|
|
69
63
|
// public boolean equals(Object that) {
|
|
@@ -85,32 +79,32 @@ var R2Vector = (function () {
|
|
|
85
79
|
// return (int) (value ^ (value >>> 32));
|
|
86
80
|
// }
|
|
87
81
|
//
|
|
88
|
-
|
|
82
|
+
static fromSTVector(stVector) {
|
|
89
83
|
return new R2Vector(R2Vector.singleStTOUV(stVector.x), R2Vector.singleStTOUV(stVector.y));
|
|
90
|
-
}
|
|
84
|
+
}
|
|
91
85
|
// from S2Projections.stToUV (QUADRATIC)
|
|
92
|
-
|
|
93
|
-
if (s >= 0) {
|
|
94
|
-
return (1 / 3) * (
|
|
86
|
+
static singleStTOUV(s) {
|
|
87
|
+
if (s >= 0.5) {
|
|
88
|
+
return (1 / 3) * (4 * s * s - 1);
|
|
95
89
|
}
|
|
96
90
|
else {
|
|
97
|
-
return (1 / 3) * (1 - (1 - s) * (1 - s));
|
|
91
|
+
return (1 / 3) * (1 - 4 * (1 - s) * (1 - s));
|
|
98
92
|
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (
|
|
102
|
-
return
|
|
93
|
+
}
|
|
94
|
+
static singleUVToST(u) {
|
|
95
|
+
if (u >= 0) {
|
|
96
|
+
return 0.5 * Math.sqrt(1 + 3 * u);
|
|
103
97
|
}
|
|
104
98
|
else {
|
|
105
|
-
return
|
|
99
|
+
return 1 - 0.5 * Math.sqrt(1 - 3 * u);
|
|
106
100
|
}
|
|
107
|
-
}
|
|
101
|
+
}
|
|
108
102
|
/**
|
|
109
103
|
* To be used only if this vector is representing uv.
|
|
110
104
|
* @param face
|
|
111
105
|
* @returns {S2Point}
|
|
112
106
|
*/
|
|
113
|
-
|
|
107
|
+
toPoint(face) {
|
|
114
108
|
switch (face) {
|
|
115
109
|
case 0:
|
|
116
110
|
return new S2Point_1.S2Point(1, this.x, this.y);
|
|
@@ -125,14 +119,13 @@ var R2Vector = (function () {
|
|
|
125
119
|
default:
|
|
126
120
|
return new S2Point_1.S2Point(this.y, this.x, -1);
|
|
127
121
|
}
|
|
128
|
-
}
|
|
129
|
-
|
|
122
|
+
}
|
|
123
|
+
toSt(which) {
|
|
130
124
|
return which == 0 ? R2Vector.singleUVToST(this.x) : R2Vector.singleUVToST(this.y);
|
|
131
|
-
}
|
|
132
|
-
|
|
125
|
+
}
|
|
126
|
+
toString() {
|
|
133
127
|
return "(" + this.x.toString() + ", " + this.y.toString() + ")";
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
}());
|
|
128
|
+
}
|
|
129
|
+
}
|
|
137
130
|
exports.R2Vector = R2Vector;
|
|
138
131
|
//# sourceMappingURL=R2Vector.js.map
|