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.
Files changed (70) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.cjs +11 -0
  3. package/.github/workflows/lint.js.yml +22 -0
  4. package/.github/workflows/node.js.yml +22 -0
  5. package/.mocharc.js +7 -0
  6. package/README.md +21 -5
  7. package/dist/Interval.js +9 -8
  8. package/dist/Interval.js.map +1 -1
  9. package/dist/MutableInteger.js +5 -4
  10. package/dist/MutableInteger.js.map +1 -1
  11. package/dist/Platform.d.ts +15 -0
  12. package/dist/Platform.js +53 -0
  13. package/dist/Platform.js.map +1 -0
  14. package/dist/R1Interval.js +39 -48
  15. package/dist/R1Interval.js.map +1 -1
  16. package/dist/R2Vector.d.ts +3 -3
  17. package/dist/R2Vector.js +50 -57
  18. package/dist/R2Vector.js.map +1 -1
  19. package/dist/S1Angle.d.ts +34 -0
  20. package/dist/S1Angle.js +81 -26
  21. package/dist/S1Angle.js.map +1 -1
  22. package/dist/S1ChordAngle.d.ts +166 -0
  23. package/dist/S1ChordAngle.js +318 -0
  24. package/dist/S1ChordAngle.js.map +1 -0
  25. package/dist/S1Interval.js +78 -83
  26. package/dist/S1Interval.js.map +1 -1
  27. package/dist/S2.d.ts +5 -0
  28. package/dist/S2.js +80 -85
  29. package/dist/S2.js.map +1 -1
  30. package/dist/S2Cap.d.ts +31 -22
  31. package/dist/S2Cap.js +194 -187
  32. package/dist/S2Cap.js.map +1 -1
  33. package/dist/S2Cell.d.ts +14 -11
  34. package/dist/S2Cell.js +194 -197
  35. package/dist/S2Cell.js.map +1 -1
  36. package/dist/S2CellId.d.ts +37 -14
  37. package/dist/S2CellId.js +406 -356
  38. package/dist/S2CellId.js.map +1 -1
  39. package/dist/S2CellUnion.d.ts +1 -2
  40. package/dist/S2CellUnion.js +131 -126
  41. package/dist/S2CellUnion.js.map +1 -1
  42. package/dist/S2EdgeUtil.js +12 -14
  43. package/dist/S2EdgeUtil.js.map +1 -1
  44. package/dist/S2LatLng.d.ts +7 -2
  45. package/dist/S2LatLng.js +85 -81
  46. package/dist/S2LatLng.js.map +1 -1
  47. package/dist/S2LatLngRect.d.ts +7 -2
  48. package/dist/S2LatLngRect.js +203 -184
  49. package/dist/S2LatLngRect.js.map +1 -1
  50. package/dist/S2Metric.d.ts +1 -1
  51. package/dist/S2Metric.js +28 -24
  52. package/dist/S2Metric.js.map +1 -1
  53. package/dist/S2Point.d.ts +35 -0
  54. package/dist/S2Point.js +116 -66
  55. package/dist/S2Point.js.map +1 -1
  56. package/dist/S2Projections.d.ts +40 -5
  57. package/dist/S2Projections.js +226 -47
  58. package/dist/S2Projections.js.map +1 -1
  59. package/dist/S2Region.js +2 -1
  60. package/dist/S2Region.js.map +1 -1
  61. package/dist/S2RegionCoverer.d.ts +21 -6
  62. package/dist/S2RegionCoverer.js +144 -108
  63. package/dist/S2RegionCoverer.js.map +1 -1
  64. package/dist/export.js +42 -32
  65. package/dist/export.js.map +1 -1
  66. package/dist/utils/preconditions.d.ts +2 -0
  67. package/dist/utils/preconditions.js +16 -0
  68. package/dist/utils/preconditions.js.map +1 -0
  69. package/package.json +27 -21
  70. package/yarn.lock +0 -4381
package/.eslintignore ADDED
@@ -0,0 +1,3 @@
1
+ dist
2
+ gulpfile.js
3
+ test
package/.eslintrc.cjs ADDED
@@ -0,0 +1,11 @@
1
+ module.exports = {
2
+ root: true,
3
+ parser: '@typescript-eslint/parser',
4
+ plugins: [
5
+ '@typescript-eslint',
6
+ ],
7
+ extends: [
8
+ 'eslint:recommended',
9
+ 'plugin:@typescript-eslint/recommended',
10
+ ],
11
+ };
@@ -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
@@ -0,0 +1,7 @@
1
+ module.exports = {
2
+ recursive: true,
3
+ bail: true,
4
+ require: 'ts-node/register',
5
+ extension: ['ts']
6
+ }
7
+
package/README.md CHANGED
@@ -1,13 +1,19 @@
1
- ### Node S2Geometry Typescript
1
+ ### Node S2 Geometry Typescript
2
+ <img src="https://github.com/vekexasia/nodes2-ts/actions/workflows/node.js.yml/badge.svg" />
2
3
 
3
- An extensive port of google's s2 geometry library written in Typescript.
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
- The library uses `decimal.js` and `long` as external libraries to perform the needed math.
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
- var Interval = (function () {
3
- function Interval(lo, hi) {
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
- Interval.prototype.toString = function () {
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
- Interval.prototype.equals = function (that) {
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
- return Interval;
20
- }());
20
+ }
21
+ }
21
22
  exports.Interval = Interval;
22
23
  //# sourceMappingURL=Interval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Interval.js","sourceRoot":"","sources":["../src/Interval.ts"],"names":[],"mappings":";AAAA;IAIE,kBAAY,EAAS,EAAE,EAAS;QAC9B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAsBO,2BAAQ,GAAhB;QACE,MAAM,CAAC,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,yBAAM,GAAb,UAAc,IAAQ;QACpB,EAAE,CAAC,CAAC,OAAM,CAAC,IAAI,CAAC,KAAK,OAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAClD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC;IACf,CAAC;IAGH,eAAC;AAAD,CAAC,AA7CD,IA6CC;AA7CqB,gBAAQ,WA6C7B,CAAA"}
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"}
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
- var MutableInteger = (function () {
3
- function MutableInteger(val) {
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
- return MutableInteger;
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":";AAAA;IAEE,wBAAmB,GAAU;QAAV,QAAG,GAAH,GAAG,CAAO;IAC7B,CAAC;IACH,qBAAC;AAAD,CAAC,AAJD,IAIC;AAJY,sBAAc,iBAI1B,CAAA"}
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
+ }
@@ -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"}
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || function (d, b) {
3
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
4
- function __() { this.constructor = d; }
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
- var R1Interval = (function (_super) {
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
- R1Interval.prototype.isEmpty = function () {
26
+ isEmpty() {
34
27
  return this.lo > this.hi;
35
- };
36
- R1Interval.prototype.getCenter = function () {
28
+ }
29
+ getCenter() {
37
30
  return (this.lo + this.hi) / 2;
38
- };
39
- R1Interval.prototype.getLength = function () {
31
+ }
32
+ getLength() {
40
33
  return this.hi - this.lo;
41
- };
42
- R1Interval.prototype.contains = function (p) {
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
- R1Interval.prototype.interiorContains = function (p) {
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
- R1Interval.prototype.containsI = function (y) {
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
- R1Interval.prototype.interiorContainsI = function (y) {
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
- R1Interval.prototype.intersects = function (y) {
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
- R1Interval.prototype.interiorIntersects = function (y) {
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
- R1Interval.prototype.addPoint = function (p) {
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
- R1Interval.prototype.expanded = function (radius) {
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
- R1Interval.prototype.union = function (y) {
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
- R1Interval.prototype.intersection = function (y) {
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
- R1Interval.prototype.approxEquals = function (y, maxError) {
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
- R1Interval.empty = function () {
136
+ }
137
+ static empty() {
146
138
  return new R1Interval(1, 0);
147
- };
148
- R1Interval.fromPoint = function (p) {
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
- R1Interval.fromPointPair = function (p1, p2) {
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
- return R1Interval;
165
- }(Interval_1.Interval));
155
+ }
156
+ }
166
157
  exports.R1Interval = R1Interval;
167
158
  //# sourceMappingURL=R1Interval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"R1Interval.js","sourceRoot":"","sources":["../src/R1Interval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"R1Interval.js","sourceRoot":"","sources":["../src/R1Interval.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,8 @@ export declare class R2Vector {
9
9
  private _x;
10
10
  private _y;
11
11
  constructor(_x: number, _y: number);
12
- readonly x: number;
13
- readonly y: number;
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(x: number): number;
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
- var S2Point_1 = require("./S2Point");
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
- var R2Vector = (function () {
10
- function R2Vector(_x, _y) {
11
+ class R2Vector {
12
+ constructor(_x, _y) {
11
13
  this._x = _x;
12
14
  this._y = _y;
13
15
  }
14
- Object.defineProperty(R2Vector.prototype, "x", {
15
- get: function () {
16
- return this._x;
17
- },
18
- enumerable: true,
19
- configurable: true
20
- });
21
- Object.defineProperty(R2Vector.prototype, "y", {
22
- get: function () {
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
- R2Vector.fromPointFace = function (p, face) {
27
+ }
28
+ static fromPointFace(p, face) {
35
29
  return p.toR2Vector(face);
36
- };
37
- R2Vector.add = function (p1, p2) {
30
+ }
31
+ static add(p1, p2) {
38
32
  return new R2Vector(p1._x + (p2._x), p1._y + (p2._y));
39
- };
40
- R2Vector.mul = function (p, m) {
33
+ }
34
+ static mul(p, m) {
41
35
  return new R2Vector(m * (p._x), m * (p._y));
42
- };
43
- R2Vector.prototype.norm2 = function () {
36
+ }
37
+ norm2() {
44
38
  return this.x * this.x + this.y * this.y;
45
- };
46
- R2Vector.dotProd = function (p1, p2) {
39
+ }
40
+ static dotProd(p1, p2) {
47
41
  return p1.x * (p2.x) + (p1.y * (p2.y));
48
- };
49
- R2Vector.prototype.dotProd = function (that) {
42
+ }
43
+ dotProd(that) {
50
44
  return R2Vector.dotProd(this, that);
51
- };
52
- R2Vector.prototype.crossProd = function (that) {
45
+ }
46
+ crossProd(that) {
53
47
  return this.x * (that.y) - (this.y * (that.x));
54
- };
55
- R2Vector.prototype.lessThan = function (vb) {
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
- R2Vector.fromSTVector = function (stVector) {
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
- R2Vector.singleStTOUV = function (s) {
93
- if (s >= 0) {
94
- return (1 / 3) * ((1 + s) * (1 + s) - 1);
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
- R2Vector.singleUVToST = function (x) {
101
- if (x >= 0) {
102
- return (Math.sqrt(x * 3 + 1) - 1);
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 (1 - Math.sqrt(1 - x * 3));
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
- R2Vector.prototype.toPoint = function (face) {
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
- R2Vector.prototype.toSt = function (which) {
122
+ }
123
+ toSt(which) {
130
124
  return which == 0 ? R2Vector.singleUVToST(this.x) : R2Vector.singleUVToST(this.y);
131
- };
132
- R2Vector.prototype.toString = function () {
125
+ }
126
+ toString() {
133
127
  return "(" + this.x.toString() + ", " + this.y.toString() + ")";
134
- };
135
- return R2Vector;
136
- }());
128
+ }
129
+ }
137
130
  exports.R2Vector = R2Vector;
138
131
  //# sourceMappingURL=R2Vector.js.map