nodes2ts 1.1.9 → 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 +22 -5
- package/dist/Interval.d.ts +7 -8
- package/dist/Interval.js +12 -12
- 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.d.ts +8 -9
- package/dist/R1Interval.js +59 -78
- package/dist/R1Interval.js.map +1 -1
- package/dist/R2Vector.d.ts +12 -13
- package/dist/R2Vector.js +65 -85
- package/dist/R2Vector.js.map +1 -1
- package/dist/S1Angle.d.ts +38 -5
- package/dist/S1Angle.js +89 -37
- 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.d.ts +11 -12
- package/dist/S1Interval.js +134 -140
- package/dist/S1Interval.js.map +1 -1
- package/dist/S2.d.ts +8 -5
- package/dist/S2.js +91 -108
- package/dist/S2.js.map +1 -1
- package/dist/S2Cap.d.ts +33 -25
- package/dist/S2Cap.js +199 -203
- package/dist/S2Cap.js.map +1 -1
- package/dist/S2Cell.d.ts +15 -13
- package/dist/S2Cell.js +196 -206
- package/dist/S2Cell.js.map +1 -1
- package/dist/S2CellId.d.ts +37 -14
- package/dist/S2CellId.js +407 -359
- package/dist/S2CellId.js.map +1 -1
- package/dist/S2CellUnion.d.ts +1 -2
- package/dist/S2CellUnion.js +137 -133
- package/dist/S2CellUnion.js.map +1 -1
- package/dist/S2EdgeUtil.js +14 -17
- package/dist/S2EdgeUtil.js.map +1 -1
- package/dist/S2LatLng.d.ts +15 -11
- package/dist/S2LatLng.js +100 -114
- package/dist/S2LatLng.js.map +1 -1
- package/dist/S2LatLngRect.d.ts +8 -4
- package/dist/S2LatLngRect.js +215 -197
- package/dist/S2LatLngRect.js.map +1 -1
- package/dist/S2Metric.d.ts +4 -5
- package/dist/S2Metric.js +30 -27
- package/dist/S2Metric.js.map +1 -1
- package/dist/S2Point.d.ts +48 -14
- package/dist/S2Point.js +156 -109
- package/dist/S2Point.js.map +1 -1
- package/dist/S2Projections.d.ts +43 -9
- 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 -109
- package/dist/S2RegionCoverer.js.map +1 -1
- package/dist/export.d.ts +0 -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 +28 -34
- package/.npmignore +0 -8
- package/.nyc_output/1eb1f420a13c15f529aac41a40bcaa21.json +0 -1
- package/.nyc_output/5ff62256eb1c111254ba0b469fb547da.json +0 -1
- package/.nyc_output/949d6e8c2061067f3bdfd27dfff5ba83.json +0 -1
- package/coverage/Interval.ts.html +0 -203
- package/coverage/MutableInteger.ts.html +0 -77
- package/coverage/R1Interval.ts.html +0 -647
- package/coverage/R2Vector.ts.html +0 -587
- package/coverage/S1Angle.ts.html +0 -344
- package/coverage/S1Interval.ts.html +0 -1349
- package/coverage/S2.ts.html +0 -1178
- package/coverage/S2Cap.ts.html +0 -1433
- package/coverage/S2Cell.ts.html +0 -1415
- package/coverage/S2CellId.ts.html +0 -3329
- package/coverage/S2EdgeUtil.ts.html +0 -2534
- package/coverage/S2LatLng.ts.html +0 -848
- package/coverage/S2LatLngRect.ts.html +0 -2222
- package/coverage/S2Point.ts.html +0 -758
- package/coverage/S2Projections.ts.html +0 -518
- package/coverage/base.css +0 -212
- package/coverage/decimal.ts.html +0 -68
- package/coverage/index.html +0 -288
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -1
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -158
- package/dist/decimal.d.ts +0 -3
- package/dist/decimal.js +0 -4
- package/dist/decimal.js.map +0 -1
- package/dist/decimal_augmentation.d.ts +0 -24
- package/dist/decimal_augmentation.js +0 -2
- package/dist/decimal_augmentation.js.map +0 -1
package/coverage/S2Cap.ts.html
DELETED
|
@@ -1,1433 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<title>Code coverage report for S2Cap.ts</title>
|
|
5
|
-
<meta charset="utf-8" />
|
|
6
|
-
<link rel="stylesheet" href="prettify.css" />
|
|
7
|
-
<link rel="stylesheet" href="base.css" />
|
|
8
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
9
|
-
<style type='text/css'>
|
|
10
|
-
.coverage-summary .sorter {
|
|
11
|
-
background-image: url(sort-arrow-sprite.png);
|
|
12
|
-
}
|
|
13
|
-
</style>
|
|
14
|
-
</head>
|
|
15
|
-
<body>
|
|
16
|
-
<div class='wrapper'>
|
|
17
|
-
<div class='pad1'>
|
|
18
|
-
<h1>
|
|
19
|
-
<a href="index.html">All files</a> S2Cap.ts
|
|
20
|
-
</h1>
|
|
21
|
-
<div class='clearfix'>
|
|
22
|
-
<div class='fl pad1y space-right2'>
|
|
23
|
-
<span class="strong">36.09% </span>
|
|
24
|
-
<span class="quiet">Statements</span>
|
|
25
|
-
<span class='fraction'>48/133</span>
|
|
26
|
-
</div>
|
|
27
|
-
<div class='fl pad1y space-right2'>
|
|
28
|
-
<span class="strong">3.45% </span>
|
|
29
|
-
<span class="quiet">Branches</span>
|
|
30
|
-
<span class='fraction'>2/58</span>
|
|
31
|
-
</div>
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">23.08% </span>
|
|
34
|
-
<span class="quiet">Functions</span>
|
|
35
|
-
<span class='fraction'>6/26</span>
|
|
36
|
-
</div>
|
|
37
|
-
<div class='fl pad1y space-right2'>
|
|
38
|
-
<span class="strong">35.88% </span>
|
|
39
|
-
<span class="quiet">Lines</span>
|
|
40
|
-
<span class='fraction'>47/131</span>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
<div class='status-line low'></div>
|
|
45
|
-
<pre><table class="coverage">
|
|
46
|
-
<tr><td class="line-count quiet">1
|
|
47
|
-
2
|
|
48
|
-
3
|
|
49
|
-
4
|
|
50
|
-
5
|
|
51
|
-
6
|
|
52
|
-
7
|
|
53
|
-
8
|
|
54
|
-
9
|
|
55
|
-
10
|
|
56
|
-
11
|
|
57
|
-
12
|
|
58
|
-
13
|
|
59
|
-
14
|
|
60
|
-
15
|
|
61
|
-
16
|
|
62
|
-
17
|
|
63
|
-
18
|
|
64
|
-
19
|
|
65
|
-
20
|
|
66
|
-
21
|
|
67
|
-
22
|
|
68
|
-
23
|
|
69
|
-
24
|
|
70
|
-
25
|
|
71
|
-
26
|
|
72
|
-
27
|
|
73
|
-
28
|
|
74
|
-
29
|
|
75
|
-
30
|
|
76
|
-
31
|
|
77
|
-
32
|
|
78
|
-
33
|
|
79
|
-
34
|
|
80
|
-
35
|
|
81
|
-
36
|
|
82
|
-
37
|
|
83
|
-
38
|
|
84
|
-
39
|
|
85
|
-
40
|
|
86
|
-
41
|
|
87
|
-
42
|
|
88
|
-
43
|
|
89
|
-
44
|
|
90
|
-
45
|
|
91
|
-
46
|
|
92
|
-
47
|
|
93
|
-
48
|
|
94
|
-
49
|
|
95
|
-
50
|
|
96
|
-
51
|
|
97
|
-
52
|
|
98
|
-
53
|
|
99
|
-
54
|
|
100
|
-
55
|
|
101
|
-
56
|
|
102
|
-
57
|
|
103
|
-
58
|
|
104
|
-
59
|
|
105
|
-
60
|
|
106
|
-
61
|
|
107
|
-
62
|
|
108
|
-
63
|
|
109
|
-
64
|
|
110
|
-
65
|
|
111
|
-
66
|
|
112
|
-
67
|
|
113
|
-
68
|
|
114
|
-
69
|
|
115
|
-
70
|
|
116
|
-
71
|
|
117
|
-
72
|
|
118
|
-
73
|
|
119
|
-
74
|
|
120
|
-
75
|
|
121
|
-
76
|
|
122
|
-
77
|
|
123
|
-
78
|
|
124
|
-
79
|
|
125
|
-
80
|
|
126
|
-
81
|
|
127
|
-
82
|
|
128
|
-
83
|
|
129
|
-
84
|
|
130
|
-
85
|
|
131
|
-
86
|
|
132
|
-
87
|
|
133
|
-
88
|
|
134
|
-
89
|
|
135
|
-
90
|
|
136
|
-
91
|
|
137
|
-
92
|
|
138
|
-
93
|
|
139
|
-
94
|
|
140
|
-
95
|
|
141
|
-
96
|
|
142
|
-
97
|
|
143
|
-
98
|
|
144
|
-
99
|
|
145
|
-
100
|
|
146
|
-
101
|
|
147
|
-
102
|
|
148
|
-
103
|
|
149
|
-
104
|
|
150
|
-
105
|
|
151
|
-
106
|
|
152
|
-
107
|
|
153
|
-
108
|
|
154
|
-
109
|
|
155
|
-
110
|
|
156
|
-
111
|
|
157
|
-
112
|
|
158
|
-
113
|
|
159
|
-
114
|
|
160
|
-
115
|
|
161
|
-
116
|
|
162
|
-
117
|
|
163
|
-
118
|
|
164
|
-
119
|
|
165
|
-
120
|
|
166
|
-
121
|
|
167
|
-
122
|
|
168
|
-
123
|
|
169
|
-
124
|
|
170
|
-
125
|
|
171
|
-
126
|
|
172
|
-
127
|
|
173
|
-
128
|
|
174
|
-
129
|
|
175
|
-
130
|
|
176
|
-
131
|
|
177
|
-
132
|
|
178
|
-
133
|
|
179
|
-
134
|
|
180
|
-
135
|
|
181
|
-
136
|
|
182
|
-
137
|
|
183
|
-
138
|
|
184
|
-
139
|
|
185
|
-
140
|
|
186
|
-
141
|
|
187
|
-
142
|
|
188
|
-
143
|
|
189
|
-
144
|
|
190
|
-
145
|
|
191
|
-
146
|
|
192
|
-
147
|
|
193
|
-
148
|
|
194
|
-
149
|
|
195
|
-
150
|
|
196
|
-
151
|
|
197
|
-
152
|
|
198
|
-
153
|
|
199
|
-
154
|
|
200
|
-
155
|
|
201
|
-
156
|
|
202
|
-
157
|
|
203
|
-
158
|
|
204
|
-
159
|
|
205
|
-
160
|
|
206
|
-
161
|
|
207
|
-
162
|
|
208
|
-
163
|
|
209
|
-
164
|
|
210
|
-
165
|
|
211
|
-
166
|
|
212
|
-
167
|
|
213
|
-
168
|
|
214
|
-
169
|
|
215
|
-
170
|
|
216
|
-
171
|
|
217
|
-
172
|
|
218
|
-
173
|
|
219
|
-
174
|
|
220
|
-
175
|
|
221
|
-
176
|
|
222
|
-
177
|
|
223
|
-
178
|
|
224
|
-
179
|
|
225
|
-
180
|
|
226
|
-
181
|
|
227
|
-
182
|
|
228
|
-
183
|
|
229
|
-
184
|
|
230
|
-
185
|
|
231
|
-
186
|
|
232
|
-
187
|
|
233
|
-
188
|
|
234
|
-
189
|
|
235
|
-
190
|
|
236
|
-
191
|
|
237
|
-
192
|
|
238
|
-
193
|
|
239
|
-
194
|
|
240
|
-
195
|
|
241
|
-
196
|
|
242
|
-
197
|
|
243
|
-
198
|
|
244
|
-
199
|
|
245
|
-
200
|
|
246
|
-
201
|
|
247
|
-
202
|
|
248
|
-
203
|
|
249
|
-
204
|
|
250
|
-
205
|
|
251
|
-
206
|
|
252
|
-
207
|
|
253
|
-
208
|
|
254
|
-
209
|
|
255
|
-
210
|
|
256
|
-
211
|
|
257
|
-
212
|
|
258
|
-
213
|
|
259
|
-
214
|
|
260
|
-
215
|
|
261
|
-
216
|
|
262
|
-
217
|
|
263
|
-
218
|
|
264
|
-
219
|
|
265
|
-
220
|
|
266
|
-
221
|
|
267
|
-
222
|
|
268
|
-
223
|
|
269
|
-
224
|
|
270
|
-
225
|
|
271
|
-
226
|
|
272
|
-
227
|
|
273
|
-
228
|
|
274
|
-
229
|
|
275
|
-
230
|
|
276
|
-
231
|
|
277
|
-
232
|
|
278
|
-
233
|
|
279
|
-
234
|
|
280
|
-
235
|
|
281
|
-
236
|
|
282
|
-
237
|
|
283
|
-
238
|
|
284
|
-
239
|
|
285
|
-
240
|
|
286
|
-
241
|
|
287
|
-
242
|
|
288
|
-
243
|
|
289
|
-
244
|
|
290
|
-
245
|
|
291
|
-
246
|
|
292
|
-
247
|
|
293
|
-
248
|
|
294
|
-
249
|
|
295
|
-
250
|
|
296
|
-
251
|
|
297
|
-
252
|
|
298
|
-
253
|
|
299
|
-
254
|
|
300
|
-
255
|
|
301
|
-
256
|
|
302
|
-
257
|
|
303
|
-
258
|
|
304
|
-
259
|
|
305
|
-
260
|
|
306
|
-
261
|
|
307
|
-
262
|
|
308
|
-
263
|
|
309
|
-
264
|
|
310
|
-
265
|
|
311
|
-
266
|
|
312
|
-
267
|
|
313
|
-
268
|
|
314
|
-
269
|
|
315
|
-
270
|
|
316
|
-
271
|
|
317
|
-
272
|
|
318
|
-
273
|
|
319
|
-
274
|
|
320
|
-
275
|
|
321
|
-
276
|
|
322
|
-
277
|
|
323
|
-
278
|
|
324
|
-
279
|
|
325
|
-
280
|
|
326
|
-
281
|
|
327
|
-
282
|
|
328
|
-
283
|
|
329
|
-
284
|
|
330
|
-
285
|
|
331
|
-
286
|
|
332
|
-
287
|
|
333
|
-
288
|
|
334
|
-
289
|
|
335
|
-
290
|
|
336
|
-
291
|
|
337
|
-
292
|
|
338
|
-
293
|
|
339
|
-
294
|
|
340
|
-
295
|
|
341
|
-
296
|
|
342
|
-
297
|
|
343
|
-
298
|
|
344
|
-
299
|
|
345
|
-
300
|
|
346
|
-
301
|
|
347
|
-
302
|
|
348
|
-
303
|
|
349
|
-
304
|
|
350
|
-
305
|
|
351
|
-
306
|
|
352
|
-
307
|
|
353
|
-
308
|
|
354
|
-
309
|
|
355
|
-
310
|
|
356
|
-
311
|
|
357
|
-
312
|
|
358
|
-
313
|
|
359
|
-
314
|
|
360
|
-
315
|
|
361
|
-
316
|
|
362
|
-
317
|
|
363
|
-
318
|
|
364
|
-
319
|
|
365
|
-
320
|
|
366
|
-
321
|
|
367
|
-
322
|
|
368
|
-
323
|
|
369
|
-
324
|
|
370
|
-
325
|
|
371
|
-
326
|
|
372
|
-
327
|
|
373
|
-
328
|
|
374
|
-
329
|
|
375
|
-
330
|
|
376
|
-
331
|
|
377
|
-
332
|
|
378
|
-
333
|
|
379
|
-
334
|
|
380
|
-
335
|
|
381
|
-
336
|
|
382
|
-
337
|
|
383
|
-
338
|
|
384
|
-
339
|
|
385
|
-
340
|
|
386
|
-
341
|
|
387
|
-
342
|
|
388
|
-
343
|
|
389
|
-
344
|
|
390
|
-
345
|
|
391
|
-
346
|
|
392
|
-
347
|
|
393
|
-
348
|
|
394
|
-
349
|
|
395
|
-
350
|
|
396
|
-
351
|
|
397
|
-
352
|
|
398
|
-
353
|
|
399
|
-
354
|
|
400
|
-
355
|
|
401
|
-
356
|
|
402
|
-
357
|
|
403
|
-
358
|
|
404
|
-
359
|
|
405
|
-
360
|
|
406
|
-
361
|
|
407
|
-
362
|
|
408
|
-
363
|
|
409
|
-
364
|
|
410
|
-
365
|
|
411
|
-
366
|
|
412
|
-
367
|
|
413
|
-
368
|
|
414
|
-
369
|
|
415
|
-
370
|
|
416
|
-
371
|
|
417
|
-
372
|
|
418
|
-
373
|
|
419
|
-
374
|
|
420
|
-
375
|
|
421
|
-
376
|
|
422
|
-
377
|
|
423
|
-
378
|
|
424
|
-
379
|
|
425
|
-
380
|
|
426
|
-
381
|
|
427
|
-
382
|
|
428
|
-
383
|
|
429
|
-
384
|
|
430
|
-
385
|
|
431
|
-
386
|
|
432
|
-
387
|
|
433
|
-
388
|
|
434
|
-
389
|
|
435
|
-
390
|
|
436
|
-
391
|
|
437
|
-
392
|
|
438
|
-
393
|
|
439
|
-
394
|
|
440
|
-
395
|
|
441
|
-
396
|
|
442
|
-
397
|
|
443
|
-
398
|
|
444
|
-
399
|
|
445
|
-
400
|
|
446
|
-
401
|
|
447
|
-
402
|
|
448
|
-
403
|
|
449
|
-
404
|
|
450
|
-
405
|
|
451
|
-
406
|
|
452
|
-
407
|
|
453
|
-
408
|
|
454
|
-
409
|
|
455
|
-
410
|
|
456
|
-
411
|
|
457
|
-
412
|
|
458
|
-
413
|
|
459
|
-
414
|
|
460
|
-
415
|
|
461
|
-
416
|
|
462
|
-
417
|
|
463
|
-
418
|
|
464
|
-
419
|
|
465
|
-
420
|
|
466
|
-
421
|
|
467
|
-
422
|
|
468
|
-
423
|
|
469
|
-
424
|
|
470
|
-
425
|
|
471
|
-
426
|
|
472
|
-
427
|
|
473
|
-
428
|
|
474
|
-
429
|
|
475
|
-
430
|
|
476
|
-
431
|
|
477
|
-
432
|
|
478
|
-
433
|
|
479
|
-
434
|
|
480
|
-
435
|
|
481
|
-
436
|
|
482
|
-
437
|
|
483
|
-
438
|
|
484
|
-
439
|
|
485
|
-
440
|
|
486
|
-
441
|
|
487
|
-
442
|
|
488
|
-
443
|
|
489
|
-
444
|
|
490
|
-
445
|
|
491
|
-
446
|
|
492
|
-
447
|
|
493
|
-
448
|
|
494
|
-
449
|
|
495
|
-
450
|
|
496
|
-
451
|
|
497
|
-
452
|
|
498
|
-
453
|
|
499
|
-
454
|
|
500
|
-
455
|
|
501
|
-
456
|
|
502
|
-
457</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
503
|
-
<span class="cline-any cline-neutral"> </span>
|
|
504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
506
|
-
<span class="cline-any cline-neutral"> </span>
|
|
507
|
-
<span class="cline-any cline-neutral"> </span>
|
|
508
|
-
<span class="cline-any cline-neutral"> </span>
|
|
509
|
-
<span class="cline-any cline-neutral"> </span>
|
|
510
|
-
<span class="cline-any cline-neutral"> </span>
|
|
511
|
-
<span class="cline-any cline-neutral"> </span>
|
|
512
|
-
<span class="cline-any cline-neutral"> </span>
|
|
513
|
-
<span class="cline-any cline-neutral"> </span>
|
|
514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-neutral"> </span>
|
|
516
|
-
<span class="cline-any cline-neutral"> </span>
|
|
517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
518
|
-
<span class="cline-any cline-neutral"> </span>
|
|
519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
520
|
-
<span class="cline-any cline-yes">1x</span>
|
|
521
|
-
<span class="cline-any cline-yes">1x</span>
|
|
522
|
-
<span class="cline-any cline-yes">1x</span>
|
|
523
|
-
<span class="cline-any cline-yes">1x</span>
|
|
524
|
-
<span class="cline-any cline-yes">1x</span>
|
|
525
|
-
<span class="cline-any cline-yes">1x</span>
|
|
526
|
-
<span class="cline-any cline-yes">1x</span>
|
|
527
|
-
<span class="cline-any cline-neutral"> </span>
|
|
528
|
-
<span class="cline-any cline-yes">1x</span>
|
|
529
|
-
<span class="cline-any cline-yes">1x</span>
|
|
530
|
-
<span class="cline-any cline-neutral"> </span>
|
|
531
|
-
<span class="cline-any cline-neutral"> </span>
|
|
532
|
-
<span class="cline-any cline-neutral"> </span>
|
|
533
|
-
<span class="cline-any cline-neutral"> </span>
|
|
534
|
-
<span class="cline-any cline-neutral"> </span>
|
|
535
|
-
<span class="cline-any cline-neutral"> </span>
|
|
536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
538
|
-
<span class="cline-any cline-neutral"> </span>
|
|
539
|
-
<span class="cline-any cline-neutral"> </span>
|
|
540
|
-
<span class="cline-any cline-neutral"> </span>
|
|
541
|
-
<span class="cline-any cline-neutral"> </span>
|
|
542
|
-
<span class="cline-any cline-neutral"> </span>
|
|
543
|
-
<span class="cline-any cline-neutral"> </span>
|
|
544
|
-
<span class="cline-any cline-yes">1x</span>
|
|
545
|
-
<span class="cline-any cline-neutral"> </span>
|
|
546
|
-
<span class="cline-any cline-neutral"> </span>
|
|
547
|
-
<span class="cline-any cline-neutral"> </span>
|
|
548
|
-
<span class="cline-any cline-neutral"> </span>
|
|
549
|
-
<span class="cline-any cline-neutral"> </span>
|
|
550
|
-
<span class="cline-any cline-neutral"> </span>
|
|
551
|
-
<span class="cline-any cline-neutral"> </span>
|
|
552
|
-
<span class="cline-any cline-yes">1x</span>
|
|
553
|
-
<span class="cline-any cline-neutral"> </span>
|
|
554
|
-
<span class="cline-any cline-neutral"> </span>
|
|
555
|
-
<span class="cline-any cline-neutral"> </span>
|
|
556
|
-
<span class="cline-any cline-neutral"> </span>
|
|
557
|
-
<span class="cline-any cline-neutral"> </span>
|
|
558
|
-
<span class="cline-any cline-neutral"> </span>
|
|
559
|
-
<span class="cline-any cline-neutral"> </span>
|
|
560
|
-
<span class="cline-any cline-neutral"> </span>
|
|
561
|
-
<span class="cline-any cline-neutral"> </span>
|
|
562
|
-
<span class="cline-any cline-neutral"> </span>
|
|
563
|
-
<span class="cline-any cline-yes">1014x</span>
|
|
564
|
-
<span class="cline-any cline-yes">1014x</span>
|
|
565
|
-
<span class="cline-any cline-neutral"> </span>
|
|
566
|
-
<span class="cline-any cline-neutral"> </span>
|
|
567
|
-
<span class="cline-any cline-neutral"> </span>
|
|
568
|
-
<span class="cline-any cline-neutral"> </span>
|
|
569
|
-
<span class="cline-any cline-neutral"> </span>
|
|
570
|
-
<span class="cline-any cline-neutral"> </span>
|
|
571
|
-
<span class="cline-any cline-neutral"> </span>
|
|
572
|
-
<span class="cline-any cline-neutral"> </span>
|
|
573
|
-
<span class="cline-any cline-yes">1x</span>
|
|
574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
575
|
-
<span class="cline-any cline-neutral"> </span>
|
|
576
|
-
<span class="cline-any cline-neutral"> </span>
|
|
577
|
-
<span class="cline-any cline-neutral"> </span>
|
|
578
|
-
<span class="cline-any cline-neutral"> </span>
|
|
579
|
-
<span class="cline-any cline-yes">338x</span>
|
|
580
|
-
<span class="cline-any cline-neutral"> </span>
|
|
581
|
-
<span class="cline-any cline-yes">338x</span>
|
|
582
|
-
<span class="cline-any cline-neutral"> </span>
|
|
583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
584
|
-
<span class="cline-any cline-neutral"> </span>
|
|
585
|
-
<span class="cline-any cline-neutral"> </span>
|
|
586
|
-
<span class="cline-any cline-neutral"> </span>
|
|
587
|
-
<span class="cline-any cline-neutral"> </span>
|
|
588
|
-
<span class="cline-any cline-neutral"> </span>
|
|
589
|
-
<span class="cline-any cline-yes">1x</span>
|
|
590
|
-
<span class="cline-any cline-no"> </span>
|
|
591
|
-
<span class="cline-any cline-neutral"> </span>
|
|
592
|
-
<span class="cline-any cline-no"> </span>
|
|
593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
595
|
-
<span class="cline-any cline-neutral"> </span>
|
|
596
|
-
<span class="cline-any cline-yes">1x</span>
|
|
597
|
-
<span class="cline-any cline-no"> </span>
|
|
598
|
-
<span class="cline-any cline-neutral"> </span>
|
|
599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
601
|
-
<span class="cline-any cline-yes">1x</span>
|
|
602
|
-
<span class="cline-any cline-no"> </span>
|
|
603
|
-
<span class="cline-any cline-neutral"> </span>
|
|
604
|
-
<span class="cline-any cline-yes">1x</span>
|
|
605
|
-
<span class="cline-any cline-no"> </span>
|
|
606
|
-
<span class="cline-any cline-neutral"> </span>
|
|
607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
608
|
-
<span class="cline-any cline-yes">1x</span>
|
|
609
|
-
<span class="cline-any cline-no"> </span>
|
|
610
|
-
<span class="cline-any cline-neutral"> </span>
|
|
611
|
-
<span class="cline-any cline-neutral"> </span>
|
|
612
|
-
<span class="cline-any cline-neutral"> </span>
|
|
613
|
-
<span class="cline-any cline-neutral"> </span>
|
|
614
|
-
<span class="cline-any cline-neutral"> </span>
|
|
615
|
-
<span class="cline-any cline-neutral"> </span>
|
|
616
|
-
<span class="cline-any cline-neutral"> </span>
|
|
617
|
-
<span class="cline-any cline-neutral"> </span>
|
|
618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
619
|
-
<span class="cline-any cline-neutral"> </span>
|
|
620
|
-
<span class="cline-any cline-neutral"> </span>
|
|
621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
622
|
-
<span class="cline-any cline-yes">1x</span>
|
|
623
|
-
<span class="cline-any cline-neutral"> </span>
|
|
624
|
-
<span class="cline-any cline-neutral"> </span>
|
|
625
|
-
<span class="cline-any cline-neutral"> </span>
|
|
626
|
-
<span class="cline-any cline-yes">169x</span>
|
|
627
|
-
<span class="cline-any cline-no"> </span>
|
|
628
|
-
<span class="cline-any cline-neutral"> </span>
|
|
629
|
-
<span class="cline-any cline-yes">169x</span>
|
|
630
|
-
<span class="cline-any cline-neutral"> </span>
|
|
631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
635
|
-
<span class="cline-any cline-neutral"> </span>
|
|
636
|
-
<span class="cline-any cline-neutral"> </span>
|
|
637
|
-
<span class="cline-any cline-neutral"> </span>
|
|
638
|
-
<span class="cline-any cline-neutral"> </span>
|
|
639
|
-
<span class="cline-any cline-neutral"> </span>
|
|
640
|
-
<span class="cline-any cline-neutral"> </span>
|
|
641
|
-
<span class="cline-any cline-yes">1x</span>
|
|
642
|
-
<span class="cline-any cline-no"> </span>
|
|
643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
645
|
-
<span class="cline-any cline-neutral"> </span>
|
|
646
|
-
<span class="cline-any cline-yes">1x</span>
|
|
647
|
-
<span class="cline-any cline-yes">845x</span>
|
|
648
|
-
<span class="cline-any cline-neutral"> </span>
|
|
649
|
-
<span class="cline-any cline-neutral"> </span>
|
|
650
|
-
<span class="cline-any cline-neutral"> </span>
|
|
651
|
-
<span class="cline-any cline-yes">1x</span>
|
|
652
|
-
<span class="cline-any cline-no"> </span>
|
|
653
|
-
<span class="cline-any cline-neutral"> </span>
|
|
654
|
-
<span class="cline-any cline-neutral"> </span>
|
|
655
|
-
<span class="cline-any cline-neutral"> </span>
|
|
656
|
-
<span class="cline-any cline-neutral"> </span>
|
|
657
|
-
<span class="cline-any cline-neutral"> </span>
|
|
658
|
-
<span class="cline-any cline-neutral"> </span>
|
|
659
|
-
<span class="cline-any cline-neutral"> </span>
|
|
660
|
-
<span class="cline-any cline-neutral"> </span>
|
|
661
|
-
<span class="cline-any cline-yes">1x</span>
|
|
662
|
-
<span class="cline-any cline-neutral"> </span>
|
|
663
|
-
<span class="cline-any cline-neutral"> </span>
|
|
664
|
-
<span class="cline-any cline-no"> </span>
|
|
665
|
-
<span class="cline-any cline-no"> </span>
|
|
666
|
-
<span class="cline-any cline-neutral"> </span>
|
|
667
|
-
<span class="cline-any cline-neutral"> </span>
|
|
668
|
-
<span class="cline-any cline-neutral"> </span>
|
|
669
|
-
<span class="cline-any cline-neutral"> </span>
|
|
670
|
-
<span class="cline-any cline-neutral"> </span>
|
|
671
|
-
<span class="cline-any cline-neutral"> </span>
|
|
672
|
-
<span class="cline-any cline-yes">1x</span>
|
|
673
|
-
<span class="cline-any cline-no"> </span>
|
|
674
|
-
<span class="cline-any cline-no"> </span>
|
|
675
|
-
<span class="cline-any cline-neutral"> </span>
|
|
676
|
-
<span class="cline-any cline-no"> </span>
|
|
677
|
-
<span class="cline-any cline-neutral"> </span>
|
|
678
|
-
<span class="cline-any cline-neutral"> </span>
|
|
679
|
-
<span class="cline-any cline-neutral"> </span>
|
|
680
|
-
<span class="cline-any cline-neutral"> </span>
|
|
681
|
-
<span class="cline-any cline-neutral"> </span>
|
|
682
|
-
<span class="cline-any cline-neutral"> </span>
|
|
683
|
-
<span class="cline-any cline-neutral"> </span>
|
|
684
|
-
<span class="cline-any cline-yes">1x</span>
|
|
685
|
-
<span class="cline-any cline-neutral"> </span>
|
|
686
|
-
<span class="cline-any cline-neutral"> </span>
|
|
687
|
-
<span class="cline-any cline-no"> </span>
|
|
688
|
-
<span class="cline-any cline-neutral"> </span>
|
|
689
|
-
<span class="cline-any cline-neutral"> </span>
|
|
690
|
-
<span class="cline-any cline-neutral"> </span>
|
|
691
|
-
<span class="cline-any cline-neutral"> </span>
|
|
692
|
-
<span class="cline-any cline-neutral"> </span>
|
|
693
|
-
<span class="cline-any cline-neutral"> </span>
|
|
694
|
-
<span class="cline-any cline-neutral"> </span>
|
|
695
|
-
<span class="cline-any cline-yes">1x</span>
|
|
696
|
-
<span class="cline-any cline-neutral"> </span>
|
|
697
|
-
<span class="cline-any cline-no"> </span>
|
|
698
|
-
<span class="cline-any cline-neutral"> </span>
|
|
699
|
-
<span class="cline-any cline-neutral"> </span>
|
|
700
|
-
<span class="cline-any cline-neutral"> </span>
|
|
701
|
-
<span class="cline-any cline-neutral"> </span>
|
|
702
|
-
<span class="cline-any cline-neutral"> </span>
|
|
703
|
-
<span class="cline-any cline-neutral"> </span>
|
|
704
|
-
<span class="cline-any cline-neutral"> </span>
|
|
705
|
-
<span class="cline-any cline-yes">1x</span>
|
|
706
|
-
<span class="cline-any cline-neutral"> </span>
|
|
707
|
-
<span class="cline-any cline-neutral"> </span>
|
|
708
|
-
<span class="cline-any cline-yes">676x</span>
|
|
709
|
-
<span class="cline-any cline-no"> </span>
|
|
710
|
-
<span class="cline-any cline-neutral"> </span>
|
|
711
|
-
<span class="cline-any cline-neutral"> </span>
|
|
712
|
-
<span class="cline-any cline-neutral"> </span>
|
|
713
|
-
<span class="cline-any cline-neutral"> </span>
|
|
714
|
-
<span class="cline-any cline-yes">676x</span>
|
|
715
|
-
<span class="cline-any cline-yes">676x</span>
|
|
716
|
-
<span class="cline-any cline-yes">676x</span>
|
|
717
|
-
<span class="cline-any cline-neutral"> </span>
|
|
718
|
-
<span class="cline-any cline-neutral"> </span>
|
|
719
|
-
<span class="cline-any cline-neutral"> </span>
|
|
720
|
-
<span class="cline-any cline-neutral"> </span>
|
|
721
|
-
<span class="cline-any cline-neutral"> </span>
|
|
722
|
-
<span class="cline-any cline-yes">1x</span>
|
|
723
|
-
<span class="cline-any cline-no"> </span>
|
|
724
|
-
<span class="cline-any cline-no"> </span>
|
|
725
|
-
<span class="cline-any cline-neutral"> </span>
|
|
726
|
-
<span class="cline-any cline-neutral"> </span>
|
|
727
|
-
<span class="cline-any cline-neutral"> </span>
|
|
728
|
-
<span class="cline-any cline-neutral"> </span>
|
|
729
|
-
<span class="cline-any cline-no"> </span>
|
|
730
|
-
<span class="cline-any cline-no"> </span>
|
|
731
|
-
<span class="cline-any cline-no"> </span>
|
|
732
|
-
<span class="cline-any cline-neutral"> </span>
|
|
733
|
-
<span class="cline-any cline-no"> </span>
|
|
734
|
-
<span class="cline-any cline-no"> </span>
|
|
735
|
-
<span class="cline-any cline-no"> </span>
|
|
736
|
-
<span class="cline-any cline-neutral"> </span>
|
|
737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
738
|
-
<span class="cline-any cline-neutral"> </span>
|
|
739
|
-
<span class="cline-any cline-neutral"> </span>
|
|
740
|
-
<span class="cline-any cline-neutral"> </span>
|
|
741
|
-
<span class="cline-any cline-neutral"> </span>
|
|
742
|
-
<span class="cline-any cline-yes">1x</span>
|
|
743
|
-
<span class="cline-any cline-no"> </span>
|
|
744
|
-
<span class="cline-any cline-no"> </span>
|
|
745
|
-
<span class="cline-any cline-neutral"> </span>
|
|
746
|
-
<span class="cline-any cline-neutral"> </span>
|
|
747
|
-
<span class="cline-any cline-neutral"> </span>
|
|
748
|
-
<span class="cline-any cline-no"> </span>
|
|
749
|
-
<span class="cline-any cline-no"> </span>
|
|
750
|
-
<span class="cline-any cline-neutral"> </span>
|
|
751
|
-
<span class="cline-any cline-no"> </span>
|
|
752
|
-
<span class="cline-any cline-no"> </span>
|
|
753
|
-
<span class="cline-any cline-no"> </span>
|
|
754
|
-
<span class="cline-any cline-neutral"> </span>
|
|
755
|
-
<span class="cline-any cline-no"> </span>
|
|
756
|
-
<span class="cline-any cline-no"> </span>
|
|
757
|
-
<span class="cline-any cline-neutral"> </span>
|
|
758
|
-
<span class="cline-any cline-neutral"> </span>
|
|
759
|
-
<span class="cline-any cline-no"> </span>
|
|
760
|
-
<span class="cline-any cline-no"> </span>
|
|
761
|
-
<span class="cline-any cline-no"> </span>
|
|
762
|
-
<span class="cline-any cline-no"> </span>
|
|
763
|
-
<span class="cline-any cline-neutral"> </span>
|
|
764
|
-
<span class="cline-any cline-neutral"> </span>
|
|
765
|
-
<span class="cline-any cline-no"> </span>
|
|
766
|
-
<span class="cline-any cline-no"> </span>
|
|
767
|
-
<span class="cline-any cline-no"> </span>
|
|
768
|
-
<span class="cline-any cline-no"> </span>
|
|
769
|
-
<span class="cline-any cline-neutral"> </span>
|
|
770
|
-
<span class="cline-any cline-no"> </span>
|
|
771
|
-
<span class="cline-any cline-neutral"> </span>
|
|
772
|
-
<span class="cline-any cline-neutral"> </span>
|
|
773
|
-
<span class="cline-any cline-neutral"> </span>
|
|
774
|
-
<span class="cline-any cline-neutral"> </span>
|
|
775
|
-
<span class="cline-any cline-neutral"> </span>
|
|
776
|
-
<span class="cline-any cline-neutral"> </span>
|
|
777
|
-
<span class="cline-any cline-neutral"> </span>
|
|
778
|
-
<span class="cline-any cline-neutral"> </span>
|
|
779
|
-
<span class="cline-any cline-neutral"> </span>
|
|
780
|
-
<span class="cline-any cline-neutral"> </span>
|
|
781
|
-
<span class="cline-any cline-neutral"> </span>
|
|
782
|
-
<span class="cline-any cline-neutral"> </span>
|
|
783
|
-
<span class="cline-any cline-neutral"> </span>
|
|
784
|
-
<span class="cline-any cline-no"> </span>
|
|
785
|
-
<span class="cline-any cline-no"> </span>
|
|
786
|
-
<span class="cline-any cline-no"> </span>
|
|
787
|
-
<span class="cline-any cline-no"> </span>
|
|
788
|
-
<span class="cline-any cline-no"> </span>
|
|
789
|
-
<span class="cline-any cline-neutral"> </span>
|
|
790
|
-
<span class="cline-any cline-no"> </span>
|
|
791
|
-
<span class="cline-any cline-neutral"> </span>
|
|
792
|
-
<span class="cline-any cline-neutral"> </span>
|
|
793
|
-
<span class="cline-any cline-neutral"> </span>
|
|
794
|
-
<span class="cline-any cline-no"> </span>
|
|
795
|
-
<span class="cline-any cline-neutral"> </span>
|
|
796
|
-
<span class="cline-any cline-neutral"> </span>
|
|
797
|
-
<span class="cline-any cline-neutral"> </span>
|
|
798
|
-
<span class="cline-any cline-neutral"> </span>
|
|
799
|
-
<span class="cline-any cline-neutral"> </span>
|
|
800
|
-
<span class="cline-any cline-neutral"> </span>
|
|
801
|
-
<span class="cline-any cline-yes">1x</span>
|
|
802
|
-
<span class="cline-any cline-neutral"> </span>
|
|
803
|
-
<span class="cline-any cline-neutral"> </span>
|
|
804
|
-
<span class="cline-any cline-neutral"> </span>
|
|
805
|
-
<span class="cline-any cline-neutral"> </span>
|
|
806
|
-
<span class="cline-any cline-no"> </span>
|
|
807
|
-
<span class="cline-any cline-no"> </span>
|
|
808
|
-
<span class="cline-any cline-no"> </span>
|
|
809
|
-
<span class="cline-any cline-no"> </span>
|
|
810
|
-
<span class="cline-any cline-no"> </span>
|
|
811
|
-
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-neutral"> </span>
|
|
813
|
-
<span class="cline-any cline-neutral"> </span>
|
|
814
|
-
<span class="cline-any cline-neutral"> </span>
|
|
815
|
-
<span class="cline-any cline-neutral"> </span>
|
|
816
|
-
<span class="cline-any cline-no"> </span>
|
|
817
|
-
<span class="cline-any cline-neutral"> </span>
|
|
818
|
-
<span class="cline-any cline-neutral"> </span>
|
|
819
|
-
<span class="cline-any cline-neutral"> </span>
|
|
820
|
-
<span class="cline-any cline-neutral"> </span>
|
|
821
|
-
<span class="cline-any cline-neutral"> </span>
|
|
822
|
-
<span class="cline-any cline-neutral"> </span>
|
|
823
|
-
<span class="cline-any cline-neutral"> </span>
|
|
824
|
-
<span class="cline-any cline-yes">1x</span>
|
|
825
|
-
<span class="cline-any cline-neutral"> </span>
|
|
826
|
-
<span class="cline-any cline-no"> </span>
|
|
827
|
-
<span class="cline-any cline-no"> </span>
|
|
828
|
-
<span class="cline-any cline-no"> </span>
|
|
829
|
-
<span class="cline-any cline-no"> </span>
|
|
830
|
-
<span class="cline-any cline-no"> </span>
|
|
831
|
-
<span class="cline-any cline-neutral"> </span>
|
|
832
|
-
<span class="cline-any cline-neutral"> </span>
|
|
833
|
-
<span class="cline-any cline-no"> </span>
|
|
834
|
-
<span class="cline-any cline-neutral"> </span>
|
|
835
|
-
<span class="cline-any cline-neutral"> </span>
|
|
836
|
-
<span class="cline-any cline-neutral"> </span>
|
|
837
|
-
<span class="cline-any cline-neutral"> </span>
|
|
838
|
-
<span class="cline-any cline-neutral"> </span>
|
|
839
|
-
<span class="cline-any cline-neutral"> </span>
|
|
840
|
-
<span class="cline-any cline-yes">1x</span>
|
|
841
|
-
<span class="cline-any cline-neutral"> </span>
|
|
842
|
-
<span class="cline-any cline-neutral"> </span>
|
|
843
|
-
<span class="cline-any cline-neutral"> </span>
|
|
844
|
-
<span class="cline-any cline-neutral"> </span>
|
|
845
|
-
<span class="cline-any cline-neutral"> </span>
|
|
846
|
-
<span class="cline-any cline-neutral"> </span>
|
|
847
|
-
<span class="cline-any cline-no"> </span>
|
|
848
|
-
<span class="cline-any cline-no"> </span>
|
|
849
|
-
<span class="cline-any cline-neutral"> </span>
|
|
850
|
-
<span class="cline-any cline-neutral"> </span>
|
|
851
|
-
<span class="cline-any cline-neutral"> </span>
|
|
852
|
-
<span class="cline-any cline-no"> </span>
|
|
853
|
-
<span class="cline-any cline-no"> </span>
|
|
854
|
-
<span class="cline-any cline-neutral"> </span>
|
|
855
|
-
<span class="cline-any cline-neutral"> </span>
|
|
856
|
-
<span class="cline-any cline-neutral"> </span>
|
|
857
|
-
<span class="cline-any cline-neutral"> </span>
|
|
858
|
-
<span class="cline-any cline-no"> </span>
|
|
859
|
-
<span class="cline-any cline-no"> </span>
|
|
860
|
-
<span class="cline-any cline-neutral"> </span>
|
|
861
|
-
<span class="cline-any cline-neutral"> </span>
|
|
862
|
-
<span class="cline-any cline-neutral"> </span>
|
|
863
|
-
<span class="cline-any cline-neutral"> </span>
|
|
864
|
-
<span class="cline-any cline-neutral"> </span>
|
|
865
|
-
<span class="cline-any cline-neutral"> </span>
|
|
866
|
-
<span class="cline-any cline-no"> </span>
|
|
867
|
-
<span class="cline-any cline-neutral"> </span>
|
|
868
|
-
<span class="cline-any cline-neutral"> </span>
|
|
869
|
-
<span class="cline-any cline-neutral"> </span>
|
|
870
|
-
<span class="cline-any cline-no"> </span>
|
|
871
|
-
<span class="cline-any cline-no"> </span>
|
|
872
|
-
<span class="cline-any cline-no"> </span>
|
|
873
|
-
<span class="cline-any cline-no"> </span>
|
|
874
|
-
<span class="cline-any cline-neutral"> </span>
|
|
875
|
-
<span class="cline-any cline-neutral"> </span>
|
|
876
|
-
<span class="cline-any cline-neutral"> </span>
|
|
877
|
-
<span class="cline-any cline-neutral"> </span>
|
|
878
|
-
<span class="cline-any cline-no"> </span>
|
|
879
|
-
<span class="cline-any cline-neutral"> </span>
|
|
880
|
-
<span class="cline-any cline-neutral"> </span>
|
|
881
|
-
<span class="cline-any cline-no"> </span>
|
|
882
|
-
<span class="cline-any cline-neutral"> </span>
|
|
883
|
-
<span class="cline-any cline-neutral"> </span>
|
|
884
|
-
<span class="cline-any cline-neutral"> </span>
|
|
885
|
-
<span class="cline-any cline-no"> </span>
|
|
886
|
-
<span class="cline-any cline-neutral"> </span>
|
|
887
|
-
<span class="cline-any cline-neutral"> </span>
|
|
888
|
-
<span class="cline-any cline-neutral"> </span>
|
|
889
|
-
<span class="cline-any cline-neutral"> </span>
|
|
890
|
-
<span class="cline-any cline-no"> </span>
|
|
891
|
-
<span class="cline-any cline-no"> </span>
|
|
892
|
-
<span class="cline-any cline-neutral"> </span>
|
|
893
|
-
<span class="cline-any cline-no"> </span>
|
|
894
|
-
<span class="cline-any cline-neutral"> </span>
|
|
895
|
-
<span class="cline-any cline-neutral"> </span>
|
|
896
|
-
<span class="cline-any cline-no"> </span>
|
|
897
|
-
<span class="cline-any cline-neutral"> </span>
|
|
898
|
-
<span class="cline-any cline-neutral"> </span>
|
|
899
|
-
<span class="cline-any cline-yes">1x</span>
|
|
900
|
-
<span class="cline-any cline-neutral"> </span>
|
|
901
|
-
<span class="cline-any cline-neutral"> </span>
|
|
902
|
-
<span class="cline-any cline-no"> </span>
|
|
903
|
-
<span class="cline-any cline-neutral"> </span>
|
|
904
|
-
<span class="cline-any cline-neutral"> </span>
|
|
905
|
-
<span class="cline-any cline-neutral"> </span>
|
|
906
|
-
<span class="cline-any cline-neutral"> </span>
|
|
907
|
-
<span class="cline-any cline-neutral"> </span>
|
|
908
|
-
<span class="cline-any cline-neutral"> </span>
|
|
909
|
-
<span class="cline-any cline-neutral"> </span>
|
|
910
|
-
<span class="cline-any cline-neutral"> </span>
|
|
911
|
-
<span class="cline-any cline-neutral"> </span>
|
|
912
|
-
<span class="cline-any cline-neutral"> </span>
|
|
913
|
-
<span class="cline-any cline-neutral"> </span>
|
|
914
|
-
<span class="cline-any cline-neutral"> </span>
|
|
915
|
-
<span class="cline-any cline-neutral"> </span>
|
|
916
|
-
<span class="cline-any cline-neutral"> </span>
|
|
917
|
-
<span class="cline-any cline-neutral"> </span>
|
|
918
|
-
<span class="cline-any cline-neutral"> </span>
|
|
919
|
-
<span class="cline-any cline-neutral"> </span>
|
|
920
|
-
<span class="cline-any cline-neutral"> </span>
|
|
921
|
-
<span class="cline-any cline-neutral"> </span>
|
|
922
|
-
<span class="cline-any cline-neutral"> </span>
|
|
923
|
-
<span class="cline-any cline-neutral"> </span>
|
|
924
|
-
<span class="cline-any cline-neutral"> </span>
|
|
925
|
-
<span class="cline-any cline-neutral"> </span>
|
|
926
|
-
<span class="cline-any cline-neutral"> </span>
|
|
927
|
-
<span class="cline-any cline-neutral"> </span>
|
|
928
|
-
<span class="cline-any cline-neutral"> </span>
|
|
929
|
-
<span class="cline-any cline-neutral"> </span>
|
|
930
|
-
<span class="cline-any cline-neutral"> </span>
|
|
931
|
-
<span class="cline-any cline-neutral"> </span>
|
|
932
|
-
<span class="cline-any cline-neutral"> </span>
|
|
933
|
-
<span class="cline-any cline-neutral"> </span>
|
|
934
|
-
<span class="cline-any cline-neutral"> </span>
|
|
935
|
-
<span class="cline-any cline-neutral"> </span>
|
|
936
|
-
<span class="cline-any cline-neutral"> </span>
|
|
937
|
-
<span class="cline-any cline-neutral"> </span>
|
|
938
|
-
<span class="cline-any cline-neutral"> </span>
|
|
939
|
-
<span class="cline-any cline-neutral"> </span>
|
|
940
|
-
<span class="cline-any cline-neutral"> </span>
|
|
941
|
-
<span class="cline-any cline-neutral"> </span>
|
|
942
|
-
<span class="cline-any cline-yes">1x</span>
|
|
943
|
-
<span class="cline-any cline-no"> </span>
|
|
944
|
-
<span class="cline-any cline-neutral"> </span>
|
|
945
|
-
<span class="cline-any cline-neutral"> </span>
|
|
946
|
-
<span class="cline-any cline-neutral"> </span>
|
|
947
|
-
<span class="cline-any cline-neutral"> </span>
|
|
948
|
-
<span class="cline-any cline-neutral"> </span>
|
|
949
|
-
<span class="cline-any cline-neutral"> </span>
|
|
950
|
-
<span class="cline-any cline-yes">1x</span>
|
|
951
|
-
<span class="cline-any cline-no"> </span>
|
|
952
|
-
<span class="cline-any cline-neutral"> </span>
|
|
953
|
-
<span class="cline-any cline-neutral"> </span>
|
|
954
|
-
<span class="cline-any cline-yes">1x</span>
|
|
955
|
-
<span class="cline-any cline-no"> </span>
|
|
956
|
-
<span class="cline-any cline-neutral"> </span>
|
|
957
|
-
<span class="cline-any cline-yes">1x</span>
|
|
958
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*
|
|
959
|
-
* Copyright 2005 Google Inc.
|
|
960
|
-
*
|
|
961
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
962
|
-
* you may not use this file except in compliance with the License.
|
|
963
|
-
* You may obtain a copy of the License at
|
|
964
|
-
*
|
|
965
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
966
|
-
*
|
|
967
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
968
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
969
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
970
|
-
* See the License for the specific language governing permissions and
|
|
971
|
-
* limitations under the License.
|
|
972
|
-
*/
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
import {S2Region} from "./S2Region";
|
|
976
|
-
import {S2} from "./S2";
|
|
977
|
-
import {S2Point} from "./S2Point";
|
|
978
|
-
import {S1Angle} from "./S1Angle";
|
|
979
|
-
import {S2LatLngRect} from "./S2LatLngRect";
|
|
980
|
-
import {S2LatLng} from "./S2LatLng";
|
|
981
|
-
import {R1Interval} from "./R1Interval";
|
|
982
|
-
import {S1Interval} from "./S1Interval";
|
|
983
|
-
import {S2Cell} from "./S2Cell";
|
|
984
|
-
import Long = require('long');
|
|
985
|
-
import {Decimal} from './decimal';
|
|
986
|
-
/**
|
|
987
|
-
* This class represents a spherical cap, i.e. a portion of a sphere cut off by
|
|
988
|
-
* a plane. The cap is defined by its axis and height. This representation has
|
|
989
|
-
* good numerical accuracy for very small caps (unlike the (axis,
|
|
990
|
-
* min-distance-from-origin) representation), and is also efficient for
|
|
991
|
-
* containment tests (unlike the (axis, angle) representation).
|
|
992
|
-
*
|
|
993
|
-
* Here are some useful relationships between the cap height (h), the cap
|
|
994
|
-
* opening angle (theta), the maximum chord length from the cap's center (d),
|
|
995
|
-
* and the radius of cap's base (a). All formulas assume a unit radius.
|
|
996
|
-
*
|
|
997
|
-
* h = 1 - cos(theta) = 2 sin^2(theta/2) d^2 = 2 h = a^2 + h^2
|
|
998
|
-
*
|
|
999
|
-
*/
|
|
1000
|
-
export class S2Cap implements S2Region {
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
/**
|
|
1004
|
-
* Multiply a positive number by this constant to ensure that the result of a
|
|
1005
|
-
* floating point operation is at least as large as the true
|
|
1006
|
-
* infinite-precision result.
|
|
1007
|
-
*/
|
|
1008
|
-
private static ROUND_UP = S2.toDecimal(1).dividedBy(new Long(1).shiftLeft(52).toString()).plus(1);
|
|
1009
|
-
|
|
1010
|
-
public axis:S2Point;
|
|
1011
|
-
public height:decimal.Decimal;
|
|
1012
|
-
|
|
1013
|
-
/**
|
|
1014
|
-
* Create a cap given its axis and the cap height, i.e. the maximum projected
|
|
1015
|
-
* distance along the cap axis from the cap center. 'axis' should be a
|
|
1016
|
-
* unit-length vector.
|
|
1017
|
-
*/
|
|
1018
|
-
constructor(axis:S2Point, _height:number|decimal.Decimal) {
|
|
1019
|
-
this.axis = axis;
|
|
1020
|
-
this.height = S2.toDecimal(_height);
|
|
1021
|
-
// assert (isValid());
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
|
-
/**
|
|
1025
|
-
* Create a cap given its axis and the cap opening angle, i.e. maximum angle
|
|
1026
|
-
* between the axis and a point on the cap. 'axis' should be a unit-length
|
|
1027
|
-
* vector, and 'angle' should be between 0 and 180 degrees.
|
|
1028
|
-
*/
|
|
1029
|
-
public static fromAxisAngle(axis:S2Point, angle:S1Angle):S2Cap {
|
|
1030
|
-
// The height of the cap can be computed as 1-cos(angle), but this isn't
|
|
1031
|
-
// very accurate for angles close to zero (where cos(angle) is almost 1).
|
|
1032
|
-
// Computing it as 2*(sin(angle/2)**2) gives much better precision.
|
|
1033
|
-
|
|
1034
|
-
// assert (S2.isUnitLength(axis));
|
|
1035
|
-
const d = angle.radians.times(0.5).sin();
|
|
1036
|
-
// ecimal.sin(0.5 * angle.radians.times(0.5));
|
|
1037
|
-
return new S2Cap(axis, d.pow(2).times(2));
|
|
1038
|
-
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
/**
|
|
1042
|
-
* Create a cap given its axis and its area in steradians. 'axis' should be a
|
|
1043
|
-
* unit-length vector, and 'area' should be between 0 and 4 * M_PI.
|
|
1044
|
-
*/
|
|
1045
|
-
<span class="fstat-no" title="function not covered" > public static fromAxisArea(</span>axis:S2Point, _area:number|decimal.Decimal):S2Cap {
|
|
1046
|
-
const area = <span class="cstat-no" title="statement not covered" >S2.toDecimal(_area);</span>
|
|
1047
|
-
// assert (S2.isUnitLength(axis));
|
|
1048
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(axis, area.dividedBy(S2.toDecimal(2).times(S2.M_PI)));</span>
|
|
1049
|
-
}
|
|
1050
|
-
|
|
1051
|
-
/** Return an empty cap, i.e. a cap that contains no points. */
|
|
1052
|
-
<span class="fstat-no" title="function not covered" > public static empty():S2Cap {</span>
|
|
1053
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(new S2Point(1, 0, 0), -1);</span>
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
/** Return a full cap, i.e. a cap that contains all points. */
|
|
1057
|
-
<span class="fstat-no" title="function not covered" > public static full():S2Cap {</span>
|
|
1058
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(new S2Point(1, 0, 0), 2);</span>
|
|
1059
|
-
}
|
|
1060
|
-
<span class="fstat-no" title="function not covered" > getCapBound():S2Cap {</span>
|
|
1061
|
-
<span class="cstat-no" title="statement not covered" > return this;</span>
|
|
1062
|
-
}
|
|
1063
|
-
|
|
1064
|
-
<span class="fstat-no" title="function not covered" > public area():decimal.Decimal {</span>
|
|
1065
|
-
<span class="cstat-no" title="statement not covered" > return Decimal.max(</span>
|
|
1066
|
-
0,
|
|
1067
|
-
this.height
|
|
1068
|
-
)
|
|
1069
|
-
.times(S2.M_PI)
|
|
1070
|
-
.times(2);
|
|
1071
|
-
// return 2 * S2.M_PI * Math.max(0.0, this.height);
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
|
-
/**
|
|
1075
|
-
* Return the cap opening angle in radians, or a negative number for empty
|
|
1076
|
-
* caps.
|
|
1077
|
-
*/
|
|
1078
|
-
public angle():S1Angle {
|
|
1079
|
-
// This could also be computed as acos(1 - height_), but the following
|
|
1080
|
-
// formula is much more accurate when the cap height is small. It
|
|
1081
|
-
// follows from the relationship h = 1 - cos(theta) = 2 sin^2(theta/2).
|
|
1082
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (this.isEmpty()) {
|
|
1083
|
-
<span class="cstat-no" title="statement not covered" > return new S1Angle(-1);</span>
|
|
1084
|
-
}
|
|
1085
|
-
return new S1Angle(
|
|
1086
|
-
Decimal.asin(
|
|
1087
|
-
this.height.times(0.5).sqrt()
|
|
1088
|
-
)
|
|
1089
|
-
.times(2)
|
|
1090
|
-
);
|
|
1091
|
-
}
|
|
1092
|
-
|
|
1093
|
-
/**
|
|
1094
|
-
* We allow negative heights (to represent empty caps) but not heights greater
|
|
1095
|
-
* than 2.
|
|
1096
|
-
*/
|
|
1097
|
-
<span class="fstat-no" title="function not covered" > public isValid():boolean {</span>
|
|
1098
|
-
<span class="cstat-no" title="statement not covered" > return S2.isUnitLength(this.axis) && this.height.lte(2);</span>
|
|
1099
|
-
}
|
|
1100
|
-
|
|
1101
|
-
/** Return true if the cap is empty, i.e. it contains no points. */
|
|
1102
|
-
public isEmpty():boolean {
|
|
1103
|
-
return this.height.lt(0);
|
|
1104
|
-
}
|
|
1105
|
-
|
|
1106
|
-
/** Return true if the cap is full, i.e. it contains all points. */
|
|
1107
|
-
<span class="fstat-no" title="function not covered" > public isFull():boolean {</span>
|
|
1108
|
-
<span class="cstat-no" title="statement not covered" > return this.height.gte(2);</span>
|
|
1109
|
-
}
|
|
1110
|
-
|
|
1111
|
-
/**
|
|
1112
|
-
* Return the complement of the interior of the cap. A cap and its complement
|
|
1113
|
-
* have the same boundary but do not share any interior points. The complement
|
|
1114
|
-
* operator is not a bijection, since the complement of a singleton cap
|
|
1115
|
-
* (containing a single point) is the same as the complement of an empty cap.
|
|
1116
|
-
*/
|
|
1117
|
-
<span class="fstat-no" title="function not covered" > public complement():S2Cap {</span>
|
|
1118
|
-
// The complement of a full cap is an empty cap, not a singleton.
|
|
1119
|
-
// Also make sure that the complement of an empty cap has height 2.
|
|
1120
|
-
let cHeight = <span class="cstat-no" title="statement not covered" >this.isFull() ? -1 : Decimal.max(this.height, 0).neg().plus(2);</span>
|
|
1121
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(S2Point.neg(this.axis), cHeight);</span>
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
|
-
/**
|
|
1125
|
-
* Return true if and only if this cap contains the given other cap (in a set
|
|
1126
|
-
* containment sense, e.g. every cap contains the empty cap).
|
|
1127
|
-
*/
|
|
1128
|
-
<span class="fstat-no" title="function not covered" > public containsCap(</span>other:S2Cap):boolean {
|
|
1129
|
-
<span class="cstat-no" title="statement not covered" > if (this.isFull() || other.isEmpty()) {</span>
|
|
1130
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1131
|
-
}
|
|
1132
|
-
<span class="cstat-no" title="statement not covered" > return this.angle().radians.gte(this.axis.angle(other.axis).plus(other.angle().radians));</span>
|
|
1133
|
-
}
|
|
1134
|
-
|
|
1135
|
-
/**
|
|
1136
|
-
* Return true if and only if the interior of this cap intersects the given
|
|
1137
|
-
* other cap. (This relationship is not symmetric, since only the interior of
|
|
1138
|
-
* this cap is used.)
|
|
1139
|
-
*/
|
|
1140
|
-
<span class="fstat-no" title="function not covered" > public interiorIntersects(</span>other:S2Cap):boolean {
|
|
1141
|
-
// Interior(X) intersects Y if and only if Complement(Interior(X))
|
|
1142
|
-
// does not contain Y.
|
|
1143
|
-
<span class="cstat-no" title="statement not covered" > return !this.complement().containsCap(other);</span>
|
|
1144
|
-
}
|
|
1145
|
-
|
|
1146
|
-
/**
|
|
1147
|
-
* Return true if and only if the given point is contained in the interior of
|
|
1148
|
-
* the region (i.e. the region excluding its boundary). 'p' should be a
|
|
1149
|
-
* unit-length vector.
|
|
1150
|
-
*/
|
|
1151
|
-
<span class="fstat-no" title="function not covered" > public interiorContains(</span>p:S2Point):boolean {
|
|
1152
|
-
// assert (S2.isUnitLength(p));
|
|
1153
|
-
<span class="cstat-no" title="statement not covered" > return this.isFull() || S2Point.sub(this.axis, p).norm2().lt(this.height.times(2));</span>
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
/**
|
|
1157
|
-
* Increase the cap height if necessary to include the given point. If the cap
|
|
1158
|
-
* is empty the axis is set to the given point, but otherwise it is left
|
|
1159
|
-
* unchanged. 'p' should be a unit-length vector.
|
|
1160
|
-
*/
|
|
1161
|
-
public addPoint(p:S2Point):S2Cap {
|
|
1162
|
-
// Compute the squared chord length, then convert it into a height.
|
|
1163
|
-
// assert (S2.isUnitLength(p));
|
|
1164
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (this.isEmpty()) {
|
|
1165
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(p, 0);</span>
|
|
1166
|
-
} else {
|
|
1167
|
-
// To make sure that the resulting cap actually includes this point,
|
|
1168
|
-
// we need to round up the distance calculation. That is, after
|
|
1169
|
-
// calling cap.AddPoint(p), cap.Contains(p) should be true.
|
|
1170
|
-
let dist2 = S2Point.sub(this.axis, p).norm2();
|
|
1171
|
-
let newHeight = Decimal.max(this.height, S2Cap.ROUND_UP.times(0.5).times(dist2));
|
|
1172
|
-
return new S2Cap(this.axis, newHeight);
|
|
1173
|
-
}
|
|
1174
|
-
}
|
|
1175
|
-
|
|
1176
|
-
// Increase the cap height if necessary to include "other". If the current
|
|
1177
|
-
// cap is empty it is set to the given other cap.
|
|
1178
|
-
<span class="fstat-no" title="function not covered" > public addCap(</span>other:S2Cap):S2Cap {
|
|
1179
|
-
<span class="cstat-no" title="statement not covered" > if (this.isEmpty()) {</span>
|
|
1180
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(other.axis, other.height);</span>
|
|
1181
|
-
} else {
|
|
1182
|
-
// See comments for FromAxisAngle() and AddPoint(). This could be
|
|
1183
|
-
// optimized by doing the calculation in terms of cap heights rather
|
|
1184
|
-
// than cap opening angles.
|
|
1185
|
-
let angle = <span class="cstat-no" title="statement not covered" >this.axis.angle(other.axis).plus(other.angle().radians);</span>
|
|
1186
|
-
<span class="cstat-no" title="statement not covered" > if (angle.gte(S2.M_PI)) {</span>
|
|
1187
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(this.axis, 2); </span>//Full cap
|
|
1188
|
-
} else {
|
|
1189
|
-
let d = <span class="cstat-no" title="statement not covered" >angle.times(0.5).sin();</span>
|
|
1190
|
-
let newHeight = <span class="cstat-no" title="statement not covered" >Decimal.max(this.height, S2Cap.ROUND_UP.times(2).times(d.pow(2)));</span>
|
|
1191
|
-
<span class="cstat-no" title="statement not covered" > return new S2Cap(this.axis, newHeight);</span>
|
|
1192
|
-
}
|
|
1193
|
-
}
|
|
1194
|
-
}
|
|
1195
|
-
|
|
1196
|
-
// //////////////////////////////////////////////////////////////////////
|
|
1197
|
-
// S2Region interface (see {@code S2Region} for details):
|
|
1198
|
-
<span class="fstat-no" title="function not covered" > public getRectBound():S2LatLngRect {</span>
|
|
1199
|
-
<span class="cstat-no" title="statement not covered" > if (this.isEmpty()) {</span>
|
|
1200
|
-
<span class="cstat-no" title="statement not covered" > return S2LatLngRect.empty();</span>
|
|
1201
|
-
}
|
|
1202
|
-
|
|
1203
|
-
// Convert the axis to a (lat,lng) pair, and compute the cap angle.
|
|
1204
|
-
const axisLatLng = <span class="cstat-no" title="statement not covered" >S2LatLng.fromPoint(this.axis);</span>
|
|
1205
|
-
const capAngle = <span class="cstat-no" title="statement not covered" >this.angle().radians;</span>
|
|
1206
|
-
|
|
1207
|
-
let allLongitudes = <span class="cstat-no" title="statement not covered" >false;</span>
|
|
1208
|
-
const lat:decimal.Decimal[] = <span class="cstat-no" title="statement not covered" >Array(2);</span>
|
|
1209
|
-
const lng:decimal.Decimal[] = <span class="cstat-no" title="statement not covered" >Array(2);</span>
|
|
1210
|
-
|
|
1211
|
-
<span class="cstat-no" title="statement not covered" > lng[0] = S2.toDecimal(-S2.M_PI);</span>
|
|
1212
|
-
<span class="cstat-no" title="statement not covered" > lng[1] = S2.toDecimal(S2.M_PI);</span>
|
|
1213
|
-
|
|
1214
|
-
// Check whether cap includes the south pole.
|
|
1215
|
-
<span class="cstat-no" title="statement not covered" > lat[0] = axisLatLng.latRadians.minus(capAngle);</span>
|
|
1216
|
-
<span class="cstat-no" title="statement not covered" > if (lat[0].lte(-S2.M_PI_2)) {</span>
|
|
1217
|
-
<span class="cstat-no" title="statement not covered" > lat[0] = S2.toDecimal(-S2.M_PI_2);</span>
|
|
1218
|
-
<span class="cstat-no" title="statement not covered" > allLongitudes = true;</span>
|
|
1219
|
-
}
|
|
1220
|
-
// Check whether cap includes the north pole.
|
|
1221
|
-
<span class="cstat-no" title="statement not covered" > lat[1] = axisLatLng.latRadians.plus(capAngle);</span>
|
|
1222
|
-
<span class="cstat-no" title="statement not covered" > if (lat[1].gte(S2.M_PI_2)) {</span>
|
|
1223
|
-
<span class="cstat-no" title="statement not covered" > lat[1] = S2.toDecimal(S2.M_PI_2);</span>
|
|
1224
|
-
<span class="cstat-no" title="statement not covered" > allLongitudes = true;</span>
|
|
1225
|
-
}
|
|
1226
|
-
<span class="cstat-no" title="statement not covered" > if (!allLongitudes) {</span>
|
|
1227
|
-
// Compute the range of longitudes covered by the cap. We use the law
|
|
1228
|
-
// of sines for spherical triangles. Consider the triangle ABC where
|
|
1229
|
-
// A is the north pole, B is the center of the cap, and C is the point
|
|
1230
|
-
// of tangency between the cap boundary and a line of longitude. Then
|
|
1231
|
-
// C is a right angle, and letting a,b,c denote the sides opposite A,B,C,
|
|
1232
|
-
// we have sin(a)/sin(A) = sin(c)/sin(C), or sin(A) = sin(a)/sin(c).
|
|
1233
|
-
// Here "a" is the cap angle, and "c" is the colatitude (90 degrees
|
|
1234
|
-
// minus the latitude). This formula also works for negative latitudes.
|
|
1235
|
-
//
|
|
1236
|
-
// The formula for sin(a) follows from the relationship h = 1 - cos(a).
|
|
1237
|
-
|
|
1238
|
-
// double sinA = Math.sqrt(this.height * (2 - this.height));
|
|
1239
|
-
// double sinC = Math.cos(axisLatLng.lat().radians());
|
|
1240
|
-
const sinA = <span class="cstat-no" title="statement not covered" >this.height.times(this.height.neg().plus(2)).sqrt();</span>
|
|
1241
|
-
const sinC = <span class="cstat-no" title="statement not covered" >axisLatLng.latRadians.cos();</span>
|
|
1242
|
-
<span class="cstat-no" title="statement not covered" > if (sinA.lte(sinC)) {</span>
|
|
1243
|
-
const angleA = <span class="cstat-no" title="statement not covered" >Decimal.asin(sinA.dividedBy(sinC));</span>
|
|
1244
|
-
<span class="cstat-no" title="statement not covered" > lng[0] = S2.IEEEremainder(axisLatLng.lngRadians.minus(angleA),</span>
|
|
1245
|
-
2 * S2.M_PI);
|
|
1246
|
-
<span class="cstat-no" title="statement not covered" > lng[1] = S2.IEEEremainder(axisLatLng.lngRadians.plus(angleA),</span>
|
|
1247
|
-
2 * S2.M_PI);
|
|
1248
|
-
}
|
|
1249
|
-
}
|
|
1250
|
-
<span class="cstat-no" title="statement not covered" > return new S2LatLngRect(</span>
|
|
1251
|
-
new R1Interval(lat[0], lat[1]),
|
|
1252
|
-
new S1Interval(lng[0], lng[1])
|
|
1253
|
-
);
|
|
1254
|
-
}
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
<span class="fstat-no" title="function not covered" > public containsC(</span>cell:S2Cell):boolean {
|
|
1258
|
-
// If the cap does not contain all cell vertices, return false.
|
|
1259
|
-
// We check the vertices before taking the Complement() because we can't
|
|
1260
|
-
// accurately represent the complement of a very small cap (a height
|
|
1261
|
-
// of 2-epsilon is rounded off to 2).
|
|
1262
|
-
const vertices:S2Point[] = <span class="cstat-no" title="statement not covered" >new Array(4);</span>
|
|
1263
|
-
<span class="cstat-no" title="statement not covered" > for (let k = 0; k < 4; ++k) {</span>
|
|
1264
|
-
<span class="cstat-no" title="statement not covered" > vertices[k] = cell.getVertex(k);</span>
|
|
1265
|
-
<span class="cstat-no" title="statement not covered" > if (!this.contains(vertices[k])) {</span>
|
|
1266
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1267
|
-
}
|
|
1268
|
-
}
|
|
1269
|
-
// Otherwise, return true if the complement of the cap does not intersect
|
|
1270
|
-
// the cell. (This test is slightly conservative, because technically we
|
|
1271
|
-
// want Complement().InteriorIntersects() here.)
|
|
1272
|
-
<span class="cstat-no" title="statement not covered" > return !this.complement().intersects(cell, vertices);</span>
|
|
1273
|
-
}
|
|
1274
|
-
|
|
1275
|
-
// public mayIntersectC(cell:S2Cell):boolean {
|
|
1276
|
-
// const toRet = this._mayIntersectC(cell);
|
|
1277
|
-
// console.log("intersects? ",toRet, cell.id.pos().toString(16), cell.level);
|
|
1278
|
-
// return toRet;
|
|
1279
|
-
// }
|
|
1280
|
-
<span class="fstat-no" title="function not covered" > public mayIntersectC(</span>cell:S2Cell):boolean {
|
|
1281
|
-
// If the cap contains any cell vertex, return true.
|
|
1282
|
-
const vertices:S2Point[] = <span class="cstat-no" title="statement not covered" >new Array(4);</span>
|
|
1283
|
-
<span class="cstat-no" title="statement not covered" > for (let k = 0; k < 4; ++k) {</span>
|
|
1284
|
-
<span class="cstat-no" title="statement not covered" > vertices[k] = cell.getVertex(k);</span>
|
|
1285
|
-
<span class="cstat-no" title="statement not covered" > if (this.contains(vertices[k])) {</span>
|
|
1286
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1287
|
-
}
|
|
1288
|
-
}
|
|
1289
|
-
<span class="cstat-no" title="statement not covered" > return this.intersects(cell, vertices);</span>
|
|
1290
|
-
}
|
|
1291
|
-
|
|
1292
|
-
/**
|
|
1293
|
-
* Return true if the cap intersects 'cell', given that the cap vertices have
|
|
1294
|
-
* alrady been checked.
|
|
1295
|
-
*/
|
|
1296
|
-
<span class="fstat-no" title="function not covered" > public intersects(</span>cell:S2Cell, vertices:S2Point[]):boolean {
|
|
1297
|
-
// Return true if this cap intersects any point of 'cell' excluding its
|
|
1298
|
-
// vertices (which are assumed to already have been checked).
|
|
1299
|
-
|
|
1300
|
-
// If the cap is a hemisphere or larger, the cell and the complement of the
|
|
1301
|
-
// cap are both convex. Therefore since no vertex of the cell is contained,
|
|
1302
|
-
// no other interior point of the cell is contained either.
|
|
1303
|
-
<span class="cstat-no" title="statement not covered" > if (this.height.gte(1)) {</span>
|
|
1304
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1305
|
-
}
|
|
1306
|
-
|
|
1307
|
-
// We need to check for empty caps due to the axis check just below.
|
|
1308
|
-
<span class="cstat-no" title="statement not covered" > if (this.isEmpty()) {</span>
|
|
1309
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1310
|
-
}
|
|
1311
|
-
|
|
1312
|
-
// Optimization: return true if the cell contains the cap axis. (This
|
|
1313
|
-
// allows half of the edge checks below to be skipped.)
|
|
1314
|
-
<span class="cstat-no" title="statement not covered" > if (cell.contains(this.axis)) {</span>
|
|
1315
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1316
|
-
}
|
|
1317
|
-
|
|
1318
|
-
// At this point we know that the cell does not contain the cap axis,
|
|
1319
|
-
// and the cap does not contain any cell vertex. The only way that they
|
|
1320
|
-
// can intersect is if the cap intersects the interior of some edge.
|
|
1321
|
-
|
|
1322
|
-
const sin2Angle = <span class="cstat-no" title="statement not covered" >this.height.times(this.height.neg().plus(2));</span> // sin^2(capAngle)
|
|
1323
|
-
// if (cell.id.pos().toString(16) === '77c040000000000') {
|
|
1324
|
-
// console.log("DIOCAN");
|
|
1325
|
-
// }
|
|
1326
|
-
<span class="cstat-no" title="statement not covered" > for (let k = 0; k < 4; ++k) {</span>
|
|
1327
|
-
let edge = <span class="cstat-no" title="statement not covered" >cell.getEdgeRaw(k);</span>
|
|
1328
|
-
let dot = <span class="cstat-no" title="statement not covered" >this.axis.dotProd(edge);</span>
|
|
1329
|
-
<span class="cstat-no" title="statement not covered" > if (dot.gt(0)) {</span>
|
|
1330
|
-
// The axis is in the interior half-space defined by the edge. We don't
|
|
1331
|
-
// need to consider these edges, since if the cap intersects this edge
|
|
1332
|
-
// then it also intersects the edge on the opposite side of the cell
|
|
1333
|
-
// (because we know the axis is not contained with the cell).
|
|
1334
|
-
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1335
|
-
}
|
|
1336
|
-
// The Norm2() factor is necessary because "edge" is not normalized.
|
|
1337
|
-
<span class="cstat-no" title="statement not covered" > if (dot.pow(2).gt(sin2Angle.times(edge.norm2()))) {</span>
|
|
1338
|
-
// if (cell.id.pos().toString(16) === '77c040000000000') {
|
|
1339
|
-
// console.log("DIOCaAN", k, dot.toString(), sin2Angle.toString(), sin2Angle.times(edge.norm2()).toString());
|
|
1340
|
-
// }
|
|
1341
|
-
<span class="cstat-no" title="statement not covered" > return false; </span>// Entire cap is on the exterior side of this edge.
|
|
1342
|
-
}
|
|
1343
|
-
// Otherwise, the great circle containing this edge intersects
|
|
1344
|
-
// the interior of the cap. We just need to check whether the point
|
|
1345
|
-
// of closest approach occurs between the two edge endpoints.
|
|
1346
|
-
const dir = <span class="cstat-no" title="statement not covered" >S2Point.crossProd(edge, this.axis);</span>
|
|
1347
|
-
<span class="cstat-no" title="statement not covered" > if (dir.dotProd(vertices[k]).lt(0)</span>
|
|
1348
|
-
&& dir.dotProd(vertices[(k + 1) & 3]).gt(0)) {
|
|
1349
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1350
|
-
}
|
|
1351
|
-
}
|
|
1352
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1353
|
-
}
|
|
1354
|
-
|
|
1355
|
-
<span class="fstat-no" title="function not covered" > public contains(</span>p:S2Point):boolean {
|
|
1356
|
-
// The point 'p' should be a unit-length vector.
|
|
1357
|
-
// assert (S2.isUnitLength(p));
|
|
1358
|
-
<span class="cstat-no" title="statement not covered" > return S2Point.sub(this.axis, p).norm2().lte(this.height.times(2));</span>
|
|
1359
|
-
|
|
1360
|
-
}
|
|
1361
|
-
|
|
1362
|
-
//
|
|
1363
|
-
// /** Return true if two caps are identical. */
|
|
1364
|
-
// public equals(that:Object ):boolean {
|
|
1365
|
-
//
|
|
1366
|
-
// if (!(that instanceof S2Cap)) {
|
|
1367
|
-
// return false;
|
|
1368
|
-
// }
|
|
1369
|
-
//
|
|
1370
|
-
// S2Cap other = (S2Cap) that;
|
|
1371
|
-
// return (this.axis.equals(other.axis) && this.height == other.height)
|
|
1372
|
-
// || (isEmpty() && other.isEmpty()) || (isFull() && other.isFull());
|
|
1373
|
-
//
|
|
1374
|
-
// }
|
|
1375
|
-
//
|
|
1376
|
-
// @Override
|
|
1377
|
-
// public int hashCode() {
|
|
1378
|
-
// if (isFull()) {
|
|
1379
|
-
// return 17;
|
|
1380
|
-
// } else if (isEmpty()) {
|
|
1381
|
-
// return 37;
|
|
1382
|
-
// }
|
|
1383
|
-
// int result = 17;
|
|
1384
|
-
// result = 37 * result + this.axis.hashCode();
|
|
1385
|
-
// long heightBits = Double.doubleToLongBits(this.height);
|
|
1386
|
-
// result = 37 * result + (int) ((heightBits >>> 32) ^ heightBits);
|
|
1387
|
-
// return result;
|
|
1388
|
-
// }
|
|
1389
|
-
|
|
1390
|
-
// /////////////////////////////////////////////////////////////////////
|
|
1391
|
-
// The following static methods are convenience functions for assertions
|
|
1392
|
-
// and testing purposes only.
|
|
1393
|
-
|
|
1394
|
-
/**
|
|
1395
|
-
* Return true if the cap axis and height differ by at most "max_error" from
|
|
1396
|
-
* the given cap "other".
|
|
1397
|
-
*/
|
|
1398
|
-
<span class="fstat-no" title="function not covered" > public approxEquals(</span>other:S2Cap, <span class="cstat-no" title="statement not covered" >maxError:number = 1e-14)</span>:boolean {
|
|
1399
|
-
<span class="cstat-no" title="statement not covered" > return (this.axis.aequal(other.axis, maxError) && this.height.minus(other.height).lte(maxError))</span>
|
|
1400
|
-
|| (this.isEmpty() && other.height.lte(maxError))
|
|
1401
|
-
|| (other.isEmpty() && this.height.lte(maxError))
|
|
1402
|
-
|| (this.isFull() && other.height.gte(2 - maxError))
|
|
1403
|
-
|| (other.isFull() && this.height.gte(2 - maxError));
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1406
|
-
<span class="fstat-no" title="function not covered" > public toString():string {</span>
|
|
1407
|
-
<span class="cstat-no" title="statement not covered" > return "[Point = " + this.axis.toString() + " Height = " + this.height.toString() + "]";</span>
|
|
1408
|
-
}
|
|
1409
|
-
|
|
1410
|
-
<span class="fstat-no" title="function not covered" > public toGEOJSON(){</span>
|
|
1411
|
-
<span class="cstat-no" title="statement not covered" > return this.getRectBound().toGEOJSON();</span>
|
|
1412
|
-
}
|
|
1413
|
-
}
|
|
1414
|
-
</pre></td></tr>
|
|
1415
|
-
</table></pre>
|
|
1416
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
1417
|
-
</div><!-- /wrapper -->
|
|
1418
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
1419
|
-
Code coverage
|
|
1420
|
-
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Wed Sep 28 2016 14:48:27 GMT+0200 (CEST)
|
|
1421
|
-
</div>
|
|
1422
|
-
</div>
|
|
1423
|
-
<script src="prettify.js"></script>
|
|
1424
|
-
<script>
|
|
1425
|
-
window.onload = function () {
|
|
1426
|
-
if (typeof prettyPrint === 'function') {
|
|
1427
|
-
prettyPrint();
|
|
1428
|
-
}
|
|
1429
|
-
};
|
|
1430
|
-
</script>
|
|
1431
|
-
<script src="sorter.js"></script>
|
|
1432
|
-
</body>
|
|
1433
|
-
</html>
|