1 package net.sf.geographiclib.test;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
10 private static boolean isNaN(
double x) {
return x !=
x; }
18 for (
int i = 0;
i < points.length; ++
i) {
26 for (
int i = 0;
i < points.length; ++
i) {
33 {35.60777, -139.44815, 111.098748429560326,
34 -11.17491, -69.95921, 129.289270889708762,
35 8935244.5604818305, 80.50729714281974, 6273170.2055303837,
36 0.16606318447386067, 0.16479116945612937, 12841384694976.432},
37 {55.52454, 106.05087, 22.020059880982801,
38 77.03196, 197.18234, 109.112041110671519,
39 4105086.1713924406, 36.892740690445894, 3828869.3344387607,
40 0.80076349608092607, 0.80101006984201008, 61674961290615.615},
41 {-21.97856, 142.59065, -32.44456876433189,
42 41.84138, 98.56635, -41.84359951440466,
43 8394328.894657671, 75.62930491011522, 6161154.5773110616,
44 0.24816339233950381, 0.24930251203627892, -6637997720646.717},
45 {-66.99028, 112.2363, 173.73491240878403,
46 -12.70631, 285.90344, 2.512956620913668,
47 11150344.2312080241, 100.278634181155759, 6289939.5670446687,
48 -0.17199490274700385, -0.17722569526345708, -121287239862139.744},
49 {-17.42761, 173.34268, -159.033557661192928,
50 -15.84784, 5.93557, -20.787484651536988,
51 16076603.1631180673, 144.640108810286253, 3732902.1583877189,
52 -0.81273638700070476, -0.81299800519154474, 97825992354058.708},
53 {32.84994, 48.28919, 150.492927788121982,
54 -56.28556, 202.29132, 48.113449399816759,
55 16727068.9438164461, 150.565799985466607, 3147838.1910180939,
56 -0.87334918086923126, -0.86505036767110637, -72445258525585.010},
57 {6.96833, 52.74123, 92.581585386317712,
58 -7.39675, 206.17291, 90.721692165923907,
59 17102477.2496958388, 154.147366239113561, 2772035.6169917581,
60 -0.89991282520302447, -0.89986892177110739, -1311796973197.995},
61 {-50.56724, -16.30485, -105.439679907590164,
62 -33.56571, -94.97412, -47.348547835650331,
63 6455670.5118668696, 58.083719495371259, 5409150.7979815838,
64 0.53053508035997263, 0.52988722644436602, 41071447902810.047},
65 {-58.93002, -8.90775, 140.965397902500679,
66 -8.91104, 133.13503, 19.255429433416599,
67 11756066.0219864627, 105.755691241406877, 6151101.2270708536,
68 -0.26548622269867183, -0.27068483874510741, -86143460552774.735},
69 {-68.82867, -74.28391, 93.774347763114881,
70 -50.63005, -8.36685, 34.65564085411343,
71 3956936.926063544, 35.572254987389284, 3708890.9544062657,
72 0.81443963736383502, 0.81420859815358342, -41845309450093.787},
73 {-10.62672, -32.0898, -86.426713286747751,
74 5.883, -134.31681, -80.473780971034875,
75 11470869.3864563009, 103.387395634504061, 6184411.6622659713,
76 -0.23138683500430237, -0.23155097622286792, 4198803992123.548},
77 {-21.76221, 166.90563, 29.319421206936428,
78 48.72884, 213.97627, 43.508671946410168,
79 9098627.3986554915, 81.963476716121964, 6299240.9166992283,
80 0.13965943368590333, 0.14152969707656796, 10024709850277.476},
81 {-19.79938, -174.47484, 71.167275780171533,
82 -11.99349, -154.35109, 65.589099775199228,
83 2319004.8601169389, 20.896611684802389, 2267960.8703918325,
84 0.93427001867125849, 0.93424887135032789, -3935477535005.785},
85 {-11.95887, -116.94513, 92.712619830452549,
86 4.57352, 7.16501, 78.64960934409585,
87 13834722.5801401374, 124.688684161089762, 5228093.177931598,
88 -0.56879356755666463, -0.56918731952397221, -9919582785894.853},
89 {-87.85331, 85.66836, -65.120313040242748,
90 66.48646, 16.09921, -4.888658719272296,
91 17286615.3147144645, 155.58592449699137, 2635887.4729110181,
92 -0.90697975771398578, -0.91095608883042767, 42667211366919.534},
93 {1.74708, 128.32011, -101.584843631173858,
94 -11.16617, 11.87109, -86.325793296437476,
95 12942901.1241347408, 116.650512484301857, 5682744.8413270572,
96 -0.44857868222697644, -0.44824490340007729, 10763055294345.653},
97 {-25.72959, -144.90758, -153.647468693117198,
98 -57.70581, -269.17879, -48.343983158876487,
99 9413446.7452453107, 84.664533838404295, 6356176.6898881281,
100 0.09492245755254703, 0.09737058264766572, 74515122850712.444},
101 {-41.22777, 122.32875, 14.285113402275739,
102 -7.57291, 130.37946, 10.805303085187369,
103 3812686.035106021, 34.34330804743883, 3588703.8812128856,
104 0.82605222593217889, 0.82572158200920196, -2456961531057.857},
105 {11.01307, 138.25278, 79.43682622782374,
106 6.62726, 247.05981, 103.708090215522657,
107 11911190.819018408, 107.341669954114577, 6070904.722786735,
108 -0.29767608923657404, -0.29785143390252321, 17121631423099.696},
109 {-29.47124, 95.14681, -163.779130441688382,
110 -27.46601, -69.15955, -15.909335945554969,
111 13487015.8381145492, 121.294026715742277, 5481428.9945736388,
112 -0.51527225545373252, -0.51556587964721788, 104679964020340.318}};
125 assertEquals(lon2, inv.
lon2, 1
e-13);
126 assertEquals(azi1, inv.
azi1, 1
e-13);
127 assertEquals(azi2, inv.
azi2, 1
e-13);
128 assertEquals(s12, inv.
s12, 1
e-8);
129 assertEquals(a12, inv.
a12, 1
e-13);
130 assertEquals(m12, inv.
m12, 1
e-8);
131 assertEquals(M12, inv.
M12, 1
e-15);
132 assertEquals(M21, inv.
M21, 1
e-15);
133 assertEquals(S12, inv.
S12, 0.1);
148 assertEquals(lat2, dir.
lat2, 1
e-13);
149 assertEquals(lon2, dir.
lon2, 1
e-13);
150 assertEquals(azi2, dir.
azi2, 1
e-13);
151 assertEquals(a12, dir.
a12, 1
e-13);
152 assertEquals(m12, dir.
m12, 1
e-8);
153 assertEquals(M12, dir.
M12, 1
e-15);
154 assertEquals(M21, dir.
M21, 1
e-15);
155 assertEquals(S12, dir.
S12, 0.1);
170 assertEquals(lat2, dir.
lat2, 1
e-13);
171 assertEquals(lon2, dir.
lon2, 1
e-13);
172 assertEquals(azi2, dir.
azi2, 1
e-13);
173 assertEquals(s12, dir.
s12, 1
e-8);
174 assertEquals(m12, dir.
m12, 1
e-8);
175 assertEquals(M12, dir.
M12, 1
e-15);
176 assertEquals(M21, dir.
M21, 1
e-15);
177 assertEquals(S12, dir.
S12, 0.1);
185 assertEquals(inv.
azi1, 53.47022, 0.5e-5);
186 assertEquals(inv.
azi2, 111.59367, 0.5e-5);
187 assertEquals(inv.
s12, 5853226, 0.5);
194 assertEquals(dir.
lat2, 49.01467, 0.5e-5);
195 assertEquals(dir.
lon2, 2.56106, 0.5e-5);
196 assertEquals(dir.
azi2, 111.62947, 0.5e-5);
204 assertEquals(inv.
azi1, 90.00078, 0.5e-5);
205 assertEquals(inv.
azi2, 90.00078, 0.5e-5);
206 assertEquals(inv.
s12, 20106193, 0.5);
207 inv = geod.
Inverse(0.1, 0, -0.1, 180);
208 assertEquals(inv.
azi1, 90.00105, 0.5e-5);
209 assertEquals(inv.
azi2, 90.00105, 0.5e-5);
210 assertEquals(inv.
s12, 20106193, 0.5);
217 36.49334942879201, .0000008);
218 assertEquals(inv.
s12, 0.072, 0.5e-3);
225 assertEquals(dir.
lat2, 90, 0.5e-5);
227 assertEquals(dir.
lon2, -150, 0.5e-5);
228 assertEquals(Math.abs(dir.
azi2), 180, 0.5e-5);
230 assertEquals(dir.
lon2, 30, 0.5e-5);
231 assertEquals(dir.
azi2, 0, 0.5e-5);
241 -88.202499451857, 179.981022032992859592);
242 assertEquals(inv.
s12, 20003898.214, 0.5e-3);
244 -89.262080389218, 179.992207982775375662);
245 assertEquals(inv.
s12, 20003925.854, 0.5e-3);
247 179.99295812360148422);
248 assertEquals(inv.
s12, 20003926.881, 0.5e-3);
256 -56.320923501171, 179.664747671772880215);
257 assertEquals(inv.
s12, 19993558.287, 0.5e-3);
266 -52.784459512563990912, 179.634407464943777557);
267 assertEquals(inv.
s12, 19991596.095, 0.5e-3);
276 -48.52287673545898293, 179.599720456223079643);
277 assertEquals(inv.
s12, 19989144.774, 0.5e-3);
287 assertEquals(inv.
azi1, 120.27, 1
e-2);
288 assertEquals(inv.
azi2, 105.15, 1
e-2);
289 assertEquals(inv.
s12, 266.7, 1
e-1);
307 assertEquals(dir.
S12, 23700, 0.5);
316 assertEquals(dir.
lat2, -39, 1);
317 assertEquals(dir.
lon2, -254, 1);
318 assertEquals(dir.
azi2, -170, 1);
321 assertEquals(dir.
lat2, -39, 1);
322 assertEquals(dir.
lon2, -254, 1);
323 assertEquals(dir.
azi2, -170, 1);
325 assertEquals(dir.
lat2, -39, 1);
326 assertEquals(dir.
lon2, 105, 1);
327 assertEquals(dir.
azi2, -170, 1);
329 assertEquals(dir.
lat2, -39, 1);
330 assertEquals(dir.
lon2, 105, 1);
331 assertEquals(dir.
azi2, -170, 1);
339 assertEquals(inv.
S12, 49911046115.0, 0.5);
348 assertEquals(dir.
a12, 48.55570690, 0.5e-8);
355 assertEquals(dir.
lon1, 179, 1
e-10);
356 assertEquals(dir.
lon2, -179, 1
e-10);
357 assertEquals(dir.
s12, 222639, 0.5);
361 assertEquals(dir.
lon1, 539, 1
e-10);
362 assertEquals(dir.
lon2, 541, 1
e-10);
363 assertEquals(dir.
s12, 222639, 0.5);
372 assertEquals(inv.
azi1, 90.00000, 0.5e-5);
373 assertEquals(inv.
azi2, 90.00000, 0.5e-5);
374 assertEquals(inv.
s12, 19926189, 0.5);
376 assertEquals(inv.
azi1, 55.96650, 0.5e-5);
377 assertEquals(inv.
azi2, 124.03350, 0.5e-5);
378 assertEquals(inv.
s12, 19980862, 0.5);
380 assertEquals(inv.
azi1, 0.00000, 0.5e-5);
381 assertEquals(Math.abs(inv.
azi2), 180.00000, 0.5e-5);
382 assertEquals(inv.
s12, 20003931, 0.5);
384 assertEquals(inv.
azi1, 0.00000, 0.5e-5);
385 assertEquals(Math.abs(inv.
azi2), 180.00000, 0.5e-5);
386 assertEquals(inv.
s12, 19893357, 0.5);
388 inv = geod.
Inverse(0, 0, 0, 179);
389 assertEquals(inv.
azi1, 90.00000, 0.5e-5);
390 assertEquals(inv.
azi2, 90.00000, 0.5e-5);
391 assertEquals(inv.
s12, 19994492, 0.5);
392 inv = geod.
Inverse(0, 0, 0, 180);
393 assertEquals(inv.
azi1, 0.00000, 0.5e-5);
394 assertEquals(Math.abs(inv.
azi2), 180.00000, 0.5e-5);
395 assertEquals(inv.
s12, 20106193, 0.5);
396 inv = geod.
Inverse(0, 0, 1, 180);
397 assertEquals(inv.
azi1, 0.00000, 0.5e-5);
398 assertEquals(Math.abs(inv.
azi2), 180.00000, 0.5e-5);
399 assertEquals(inv.
s12, 19994492, 0.5);
400 geod =
new Geodesic(6.4e6, -1/300.0);
401 inv = geod.
Inverse(0, 0, 0, 179);
402 assertEquals(inv.
azi1, 90.00000, 0.5e-5);
403 assertEquals(inv.
azi2, 90.00000, 0.5e-5);
404 assertEquals(inv.
s12, 19994492, 0.5);
405 inv = geod.
Inverse(0, 0, 0, 180);
406 assertEquals(inv.
azi1, 90.00000, 0.5e-5);
407 assertEquals(inv.
azi2, 90.00000, 0.5e-5);
408 assertEquals(inv.
s12, 20106193, 0.5);
409 inv = geod.
Inverse(0, 0, 0.5, 180);
410 assertEquals(inv.
azi1, 33.02493, 0.5e-5);
411 assertEquals(inv.
azi2, 146.97364, 0.5e-5);
412 assertEquals(inv.
s12, 20082617, 0.5);
413 inv = geod.
Inverse(0, 0, 1, 180);
414 assertEquals(inv.
azi1, 0.00000, 0.5e-5);
415 assertEquals(Math.abs(inv.
azi2), 180.00000, 0.5e-5);
416 assertEquals(inv.
s12, 20027270, 0.5);
437 assertEquals(inv.
azi1, 0.000000000000035, 1.5e-14);
438 assertEquals(inv.
azi2, 179.99999999999996, 1.5e-14);
439 assertEquals(inv.
s12, 18345191.174332713, 4
e-9);
448 assertEquals(dir.
lat2, 45.30632, 0.5e-5);
449 assertEquals(dir.
lon2, -180, 0.5e-5);
450 assertEquals(Math.abs(dir.
azi2), 180, 0.5e-5);
452 -0.000000000000000003);
454 assertEquals(dir.
lat2, 45.30632, 0.5e-5);
455 assertEquals(dir.
lon2, -180, 0.5e-5);
456 assertEquals(Math.abs(dir.
azi2), 180, 0.5e-5);
468 assertEquals(dir.
lat1, 30.00000 , 0.5e-5);
469 assertEquals(dir.
lon1, -0.00000 , 0.5e-5);
470 assertEquals(Math.abs(dir.
azi1), 180.00000, 0.5e-5);
471 assertEquals(dir.
lat2, -60.23169 , 0.5e-5);
472 assertEquals(dir.
lon2, -0.00000 , 0.5e-5);
473 assertEquals(Math.abs(dir.
azi2), 180.00000, 0.5e-5);
474 assertEquals(dir.
s12 , 10000000 , 0.5);
475 assertEquals(dir.
a12 , 90.06544 , 0.5e-5);
476 assertEquals(dir.
m12 , 6363636 , 0.5);
477 assertEquals(dir.
M12 , -0.0012834, 0.5e7);
478 assertEquals(dir.
M21 , 0.0013749 , 0.5e-7);
479 assertEquals(dir.
S12 , 0 , 0.5);
481 assertEquals(dir.
lat1, 30.00000 , 0.5e-5);
482 assertEquals(dir.
lon1, -0.00000 , 0.5e-5);
483 assertEquals(Math.abs(dir.
azi1), 180.00000, 0.5e-5);
484 assertEquals(dir.
lat2, -30.03547 , 0.5e-5);
485 assertEquals(dir.
lon2, -180.00000, 0.5e-5);
486 assertEquals(dir.
azi2, -0.00000 , 0.5e-5);
487 assertEquals(dir.
s12 , 20000000 , 0.5);
488 assertEquals(dir.
a12 , 179.96459 , 0.5e-5);
489 assertEquals(dir.
m12 , 54342 , 0.5);
490 assertEquals(dir.
M12 , -1.0045592, 0.5e7);
491 assertEquals(dir.
M21 , -0.9954339, 0.5e-7);
492 assertEquals(dir.
S12 , 127516405431022.0, 0.5);
503 assertEquals(dir.
lat2, 4.96445 , 0.5e-5);
504 assertEquals(dir.
lon2, -180.00000, 0.5e-5);
505 assertEquals(dir.
azi2, -0.00000 , 0.5e-5);
508 assertEquals(dir.
lat2, -87.52461 , 0.5e-5);
509 assertEquals(dir.
lon2, -0.00000 , 0.5e-5);
510 assertEquals(dir.
azi2, -180.00000, 0.5e-5);
520 assertEquals(dir.
lat2, 30.92625, 0.5e-5);
521 assertEquals(dir.
lon2, 37.54640, 0.5e-5);
522 assertEquals(dir.
azi2, 55.43104, 0.5e-5);
531 assertEquals(dir.
lat2, 81.04623, 0.5e-5);
532 assertEquals(dir.
lon2, -170, 0.5e-5);
533 assertEquals(dir.
azi2, 0, 0.5e-5);
543 assertEquals(inv.
azi1, 55.723110355, 5
e-9);
544 assertEquals(inv.
azi2, 55.723515675, 5
e-9);
545 assertEquals(inv.
s12, 39.527686385, 5
e-9);
546 assertEquals(inv.
a12, 0.000355495, 5
e-9);
547 assertEquals(inv.
m12, 39.527686385, 5
e-9);
548 assertEquals(inv.
M12, 0.999999995, 5
e-9);
549 assertEquals(inv.
M21, 0.999999995, 5
e-9);
550 assertEquals(inv.
S12, 286698586.30197, 5
e-4);
558 40+58/60.0, -(5+30/60.0));
559 assertEquals(inv.
azi1, 160.39137649664, 0.5e-11);
560 assertEquals(inv.
azi2, 19.50042925176, 0.5e-11);
561 assertEquals(inv.
s12, 19960543.857179, 0.5e-6);
568 assertEquals(inv.
azi1, 45.82468716758, 0.5e-11);
569 assertEquals(inv.
azi2, 134.22776532670, 0.5e-11);
570 assertEquals(inv.
s12, 19974354.765767, 0.5e-6);
576 double pa[][] = {{89, 0}, {89, 90}, {89, 180}, {89, 270}};
578 assertEquals(
a.perimeter, 631819.8745, 1
e-4);
579 assertEquals(
a.area, 24952305678.0, 1);
581 double pb[][] = {{-89, 0}, {-89, 90}, {-89, 180}, {-89, 270}};
583 assertEquals(
a.perimeter, 631819.8745, 1
e-4);
584 assertEquals(
a.area, -24952305678.0, 1);
586 double pc[][] = {{0, -1}, {-1, 0}, {0, 1}, {1, 0}};
588 assertEquals(
a.perimeter, 627598.2731, 1
e-4);
589 assertEquals(
a.area, 24619419146.0, 1);
591 double pd[][] = {{90, 0}, {0, 0}, {0, 90}};
593 assertEquals(
a.perimeter, 30022685, 1);
594 assertEquals(
a.area, 63758202715511.0, 1);
596 assertEquals(
a.perimeter, 20020719, 1);
597 assertTrue(
isNaN(
a.area));
603 double points[][] = {{89, 0.1}, {89, 90.1}, {89, -179.9}};
605 assertEquals(
a.perimeter, 539297, 1);
606 assertEquals(
a.area, 12476152838.5, 1);
612 double pa[][] = {{9, -0.00000000000001}, {9, 180}, {9, 0}};
614 assertEquals(
a.perimeter, 36026861, 1);
615 assertEquals(
a.area, 0, 1);
616 double pb[][] = {{9, 0.00000000000001}, {9, 0}, {9, 180}};
618 assertEquals(
a.perimeter, 36026861, 1);
619 assertEquals(
a.area, 0, 1);
620 double pc[][] = {{9, 0.00000000000001}, {9, 180}, {9, 0}};
622 assertEquals(
a.perimeter, 36026861, 1);
623 assertEquals(
a.area, 0, 1);
624 double pd[][] = {{9, -0.00000000000001}, {9, 0}, {9, 180}};
626 assertEquals(
a.perimeter, 36026861, 1);
627 assertEquals(
a.area, 0, 1);
633 double points[][] = {{66.562222222, 0}, {66.562222222, 180}};
635 assertEquals(
a.perimeter, 10465729, 1);
636 assertEquals(
a.area, 0, 1);
642 double points[][] = {{89,-360}, {89,-240}, {89,-120},
643 {89,0}, {89,120}, {89,240}};
645 assertEquals(
a.perimeter, 1160741, 1);
646 assertEquals(
a.area, 32415230256.0, 1);