intersection_cases.hpp 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. // Boost.Geometry
  2. // Unit Test
  3. // Copyright (c) 2016 Oracle and/or its affiliates.
  4. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
  5. // Use, modification and distribution is subject to the Boost Software License,
  6. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. #ifndef BOOST_GEOMETRY_TEST_INTERSECTION_CASES_HPP
  9. #define BOOST_GEOMETRY_TEST_INTERSECTION_CASES_HPP
  10. struct coordinates
  11. {
  12. double lon;
  13. double lat;
  14. };
  15. struct expected_result
  16. {
  17. double lon;
  18. double lat;
  19. };
  20. struct expected_results
  21. {
  22. coordinates p1;
  23. coordinates p2;
  24. coordinates q1;
  25. coordinates q2;
  26. expected_result gnomonic_vincenty;
  27. expected_result gnomonic_thomas;
  28. expected_result sjoberg_vincenty;
  29. expected_result sjoberg_thomas;
  30. expected_result sjoberg_andoyer;
  31. expected_result great_elliptic;
  32. };
  33. #define ND 1000
  34. expected_results expected[] =
  35. {
  36. {
  37. { -1, -1 },{ 1, 1 },
  38. { -1, 1 },{ 1, -1 },
  39. { 0.0000000000000000, 0.0000000000000000 },
  40. { 0.0000000000000000, 0.0000000000000000 },
  41. { 0.0000000000626537, -0.0000000000000000 },
  42. { -0.0000000187861002, -0.0000000000000000 },
  43. { -0.0000055778585615, -0.0000000000000000 },
  44. { -0.0000000000000000, -0.0000000000000000 }
  45. },{
  46. // TODO: Newton method in Sjoberg formula is not used in this case
  47. // due to f1 - f2 == 0. The other method is used instead.
  48. // Hence different results. Look into this.
  49. { 1, 1 },{ -1, -1 },
  50. { -1, 1 },{ 1, -1 },
  51. { 0.0000000000000000, 0.0000000000000000 },
  52. { 0.0000000000000000, 0.0000000000000000 },
  53. { 0.0000000000000000, 0.0000000000626632 },
  54. { -0.0000000000000006, -0.0000000187889745 },
  55. { -0.0000000000000001, -0.0000055787431353 },
  56. { -0.0000000000000000, 0.0000000000000000 }
  57. },{
  58. // TODO: Newton method in Sjoberg formula is not used in this case
  59. // due to f1 - f2 == 0. The other method is used instead.
  60. // Hence different results. Look into this.
  61. { -1, -1 },{ 1, 1 },
  62. { 1, -1 },{ -1, 1 },
  63. { 0.0000000000000000, 0.0000000000000000 },
  64. { 0.0000000000000000, 0.0000000000000000 },
  65. { -0.0000000000000000, -0.0000000000626632 },
  66. { -0.0000000000000004, 0.0000000187889746 },
  67. { 0.0000000000000001, 0.0000055787431353 },
  68. { 0.0000000000000000, 0.0000000000000000 }
  69. },{
  70. { 1, 1 },{ -1, -1 },
  71. { 1, -1 },{ -1, 1 },
  72. { 0.0000000000000000, 0.0000000000000000 },
  73. { 0.0000000000000000, 0.0000000000000000 },
  74. { -0.0000000000626537, -0.0000000000000000 },
  75. { 0.0000000187860994, 0.0000000000000001 },
  76. { 0.0000055778585615, -0.0000000000000000 },
  77. { -0.0000000000000000, 0.0000000000000000 }
  78. },{
  79. { 0, 0 },{ 1, 1 },
  80. { 0, 1 },{ 1, 0 },
  81. { 0.5000000000000000, 0.5000573755188470 },
  82. { 0.5000000000000000, 0.5000573755109839 },
  83. { 0.5000000000313266, 0.5000573755188389 },
  84. { 0.4999999906069524, 0.5000573755152582 },
  85. { 0.4999972102164753, 0.5000573755151276 },
  86. { 0.4999999999999999, 0.5000571197534014 }
  87. },{
  88. { 1, 1 },{ 0, 0 },
  89. { 0, 1 },{ 1, 0 },
  90. { 0.5000000000000000, 0.5000573755188470 },
  91. { 0.5000000000000000, 0.5000573755109839 },
  92. { 0.5000000000000000, 0.5000573755501669 },
  93. { 0.4999999999999996, 0.5000573661218464 },
  94. { 0.4999999999999999, 0.5000545856093679 },
  95. { 0.4999999999999999, 0.5000571197534014 }
  96. },{
  97. { 0, 0 },{ 1, 1 },
  98. { 1, 0 },{ 0, 1 },
  99. { 0.5000000000000000, 0.5000573755188470 },
  100. { 0.5000000000000000, 0.5000573755109839 },
  101. { 0.4999999999999999, 0.5000573754875109 },
  102. { 0.4999999999999999, 0.5000573849086647 },
  103. { 0.5000000000000000, 0.5000601654208935 },
  104. { 0.4999999999999999, 0.5000571197534014 }
  105. },{
  106. { 1, 1 },{ 0, 0 },
  107. { 1, 0 },{ 0, 1 },
  108. { 0.5000000000000000, 0.5000573755188470 },
  109. { 0.5000000000000000, 0.5000573755109839 },
  110. { 0.4999999999686731, 0.5000573755188389 },
  111. { 0.5000000093930521, 0.5000573755152582 },
  112. { 0.5000027897835244, 0.5000573755151276 },
  113. { 0.4999999999999999, 0.5000571197534014 }
  114. },{
  115. { 1, 1 }, {2, 2},
  116. {-2, -1}, {-1, -1},
  117. { ND, ND },
  118. { ND, ND },
  119. { -0.9981650042162076, -0.999999718164758 },
  120. { ND, ND },
  121. { ND, ND },
  122. { -0.9981731758085121, -0.9999997213000095 }
  123. },{
  124. {-25, -31}, {3, 44},
  125. {-66, -14}, {-1, -1},
  126. { ND, ND },
  127. { ND, ND },
  128. { -15.83269406235058, -4.87746450262433 },
  129. { ND, ND },
  130. { ND, ND },
  131. { -15.82846301029918, -4.869650527718342 }
  132. },{
  133. {-47, -8}, {-1, -4},
  134. {-40, -5}, {-5, -5},
  135. { ND, ND },
  136. { ND, ND },
  137. { -10.28209064194141, -5.124101297536392 },
  138. { ND, ND },
  139. { ND, ND },
  140. { -10.29663941896089, -5.123527178300465 }
  141. }, {
  142. {-43, -8}, {3, -4},
  143. {-43, -5}, {3, -7},
  144. { ND, ND },
  145. { ND, ND },
  146. { -19.95519754153282, -6.521540589691206 },
  147. { ND, ND },
  148. { ND, ND },
  149. { -19.95535387979888, -6.517861579906892 }
  150. }, {
  151. {-1, -17}, {-5, 3},
  152. {-40, -5}, {-1, -5},
  153. { ND, ND },
  154. { ND, ND },
  155. { -3.424525475838061, -5.070550173747042 },
  156. { ND, ND },
  157. { ND, ND },
  158. { -3.424493504575876, -5.070060631936228 }
  159. }, {
  160. {-29, -4}, {-1, -5},
  161. {-40, -5}, {-1, -5},
  162. { ND, ND },
  163. { ND, ND },
  164. { -0.9999999978280006, -5.00000000000684 },
  165. { ND, ND },
  166. { ND, ND },
  167. { -0.9999999999999919, -5 }
  168. }, {
  169. {-4, -6}, {-40, -5},
  170. {-40, -5}, {-1, -5},
  171. { ND, ND },
  172. { ND, ND },
  173. { -40.00000000470697, -4.999999999854269 },
  174. { ND, ND },
  175. { ND, ND },
  176. { -40.00000000000003, -4.999999999999998 }
  177. }, {
  178. {5, -4}, {-25, -5},
  179. {-40, -5}, {-1, -5},
  180. { ND, ND },
  181. { ND, ND },
  182. { -40.04870859732954, -4.998490166905039 },
  183. { ND, ND },
  184. { ND, ND },
  185. { -39.87674154148858, -5.003778171392734 }
  186. }, {
  187. {-44, -1}, {38, -7},
  188. {-54, -10}, {27, 3},
  189. { ND, ND },
  190. { ND, ND },
  191. { -12.49994722584679, -4.492062263169279 },
  192. { ND, ND },
  193. { ND, ND },
  194. { -12.49786552878283, -4.48224349980724 }
  195. }, {
  196. {-29, -5}, {10, -5},
  197. {-40, -5}, {-1, -5},
  198. { ND, ND },
  199. { ND, ND },
  200. { -14.99999999880286, -5.280237387890117 },
  201. { ND, ND },
  202. { ND, ND },
  203. { -14.99999999999999, -5.278284829442087 }
  204. }, {
  205. {-29, -5}, {7, -5},
  206. {-40, -5}, {-1, -5},
  207. { ND, ND },
  208. { ND, ND },
  209. { -12.68814198534678, -5.255404335144863 },
  210. { ND, ND },
  211. { ND, ND },
  212. { -12.68883814704657, -5.253634733357015 }
  213. }, {
  214. {-29, -5}, {2, -5},
  215. {-40, -5}, {-1, -5},
  216. { ND, ND },
  217. { ND, ND },
  218. { -6.793546728871506, -5.153444544719724 },
  219. { ND, ND },
  220. { ND, ND },
  221. { -6.794933162619669, -5.152409434095275 }
  222. }, {
  223. {-29, -5}, {2, -5},
  224. {-30, -5}, {-1, -5},
  225. { ND, ND },
  226. { ND, ND },
  227. { -22.13104411461423, -5.130155316882458 },
  228. { ND, ND },
  229. { ND, ND },
  230. { -22.13016591567375, -5.129277412801533 }
  231. }, {
  232. {-29, -5}, {2, -5},
  233. {-32, -5}, {-1, -5},
  234. { ND, ND },
  235. { ND, ND },
  236. { -14.99999999908104, -5.187213913248173 },
  237. { ND, ND },
  238. { ND, ND },
  239. { -15.00000000000009, -5.185931965560752 }
  240. }, {
  241. {-92, -24}, {44, 19},
  242. {-78, -5}, {50, -5},
  243. { ND, ND },
  244. { ND, ND },
  245. { -31.65127861442256, -10.84411293410938 },
  246. { ND, ND },
  247. { ND, ND },
  248. { -31.65294079308247, -10.76785432928444 }
  249. }, {
  250. {-93, -15}, {22, 3},
  251. {-78, -5}, {50, -5},
  252. { ND, ND },
  253. { ND, ND },
  254. { -32.33383382062637, -10.80295061031259 },
  255. { ND, ND },
  256. { ND, ND },
  257. { -32.26069578187354, -10.73176059393484 }
  258. }, {
  259. {-93, -15}, {28, 3},
  260. {-78, -5}, {50, -5},
  261. { ND, ND },
  262. { ND, ND },
  263. { -25.71257598566304, -11.13752154787724 },
  264. { ND, ND },
  265. { ND, ND },
  266. { -25.67761999514295, -11.05881610957402 }
  267. }, {
  268. {-54, -21}, {20, 17},
  269. {-59, -5}, {13, -5},
  270. { ND, ND },
  271. { ND, ND },
  272. { -22.96397490169162, -6.181426780426698 },
  273. { ND, ND },
  274. { ND, ND },
  275. { -22.95999443662035, -6.172089364736989 }
  276. }, {
  277. {-31, -10}, {-31, -2},
  278. {-37, -10}, {-25, -2},
  279. { ND, ND },
  280. { ND, ND },
  281. { -31.00000000000001, -6.062729839503469 },
  282. { ND, ND },
  283. { ND, ND },
  284. { -31, -6.062411484514648 }
  285. }, {
  286. {-26, -10}, {-26, 13},
  287. {-37, -4}, {-18, -4},
  288. { ND, ND },
  289. { ND, ND },
  290. { -25.99999999999969, -4.05441766735837 },
  291. { ND, ND },
  292. { ND, ND },
  293. { -26, -4.05405101510235 }
  294. }, {
  295. {-26, -10}, {154, 78},
  296. {-46, 41}, {-13, 36},
  297. { ND, ND },
  298. { ND, ND },
  299. { -26, 39.19492836828103 },
  300. { ND, ND },
  301. { ND, ND },
  302. { -26, 39.19004133747198 }
  303. }, {
  304. {-26, -10}, {154, 68},
  305. {-85, 79}, {22, 80},
  306. { ND, ND },
  307. { ND, ND },
  308. { -26.00000000000013, 83.7164889918963 },
  309. { ND, ND },
  310. { ND, ND },
  311. { -26.00000000000002, 83.71603758698208 }
  312. }, {
  313. {-25, 55}, {155, 68},
  314. {178, 79}, {124, 80},
  315. { ND, ND },
  316. { ND, ND },
  317. { 155, 80.55982670305147 },
  318. { ND, ND },
  319. { ND, ND },
  320. { 155, 80.55961176607357 }
  321. }
  322. };
  323. size_t const expected_size = sizeof(expected) / sizeof(expected_results);
  324. #endif // BOOST_GEOMETRY_TEST_INTERSECTION_CASES_HPP