@sentryware/s2-node 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/.circleci/config.yml +45 -0
  2. package/.dockerignore +1 -0
  3. package/.gitmodules +3 -0
  4. package/CHANGELOG.md +33 -0
  5. package/LICENSE +201 -0
  6. package/README.md +147 -0
  7. package/binding.gyp +170 -0
  8. package/docker/Dockerfile.node20.test +8 -0
  9. package/docker/Dockerfile.node22.test +8 -0
  10. package/docker/Dockerfile.node24.test +8 -0
  11. package/index.d.ts +117 -0
  12. package/index.js +6 -0
  13. package/jest.config.js +184 -0
  14. package/package.json +43 -0
  15. package/publish-linux.sh +18 -0
  16. package/publish-osx.sh +19 -0
  17. package/src/builder.cc +84 -0
  18. package/src/builder.h +29 -0
  19. package/src/cell.cc +71 -0
  20. package/src/cell.h +26 -0
  21. package/src/cell_id.cc +210 -0
  22. package/src/cell_id.h +44 -0
  23. package/src/cell_union.cc +237 -0
  24. package/src/cell_union.h +34 -0
  25. package/src/earth.cc +185 -0
  26. package/src/earth.h +33 -0
  27. package/src/latlng.cc +132 -0
  28. package/src/latlng.h +28 -0
  29. package/src/loop.cc +51 -0
  30. package/src/loop.h +21 -0
  31. package/src/point.cc +69 -0
  32. package/src/point.h +23 -0
  33. package/src/polygon.cc +36 -0
  34. package/src/polygon.h +20 -0
  35. package/src/polyline.cc +186 -0
  36. package/src/polyline.h +34 -0
  37. package/src/region_coverer.cc +450 -0
  38. package/src/region_coverer.h +56 -0
  39. package/src/s2.cc +27 -0
  40. package/test/Cell.test.js +37 -0
  41. package/test/CellId.test.js +135 -0
  42. package/test/CellUnion.test.js +150 -0
  43. package/test/Earth.test.js +62 -0
  44. package/test/LatLng.test.js +45 -0
  45. package/test/Point.test.js +14 -0
  46. package/test/Polyline.test.js +78 -0
  47. package/test/RegionCoverer.test.js +301 -0
  48. package/test.sh +16 -0
  49. package/third_party/s2geometry/.travis.yml +163 -0
  50. package/third_party/s2geometry/AUTHORS +13 -0
  51. package/third_party/s2geometry/CONTRIBUTING.md +65 -0
  52. package/third_party/s2geometry/CONTRIBUTORS +30 -0
  53. package/third_party/s2geometry/LICENSE +202 -0
  54. package/third_party/s2geometry/NOTICE +5 -0
  55. package/third_party/s2geometry/README.md +127 -0
  56. package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
  57. package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
  58. package/third_party/s2geometry/doc/examples/term_index.py +101 -0
  59. package/third_party/s2geometry/src/python/coder.i +125 -0
  60. package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
  61. package/third_party/s2geometry/src/python/s2.i +37 -0
  62. package/third_party/s2geometry/src/python/s2_common.i +756 -0
  63. package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
  64. package/third_party/s2geometry/src/s2/base/casts.h +318 -0
  65. package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
  66. package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
  67. package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
  68. package/third_party/s2geometry/src/s2/base/logging.h +173 -0
  69. package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
  70. package/third_party/s2geometry/src/s2/base/port.h +999 -0
  71. package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
  72. package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
  73. package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
  74. package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
  75. package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
  76. package/third_party/s2geometry/src/s2/base/timer.h +50 -0
  77. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
  78. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
  79. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
  80. package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
  81. package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
  82. package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
  83. package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
  84. package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
  85. package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
  86. package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
  87. package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
  88. package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
  89. package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
  90. package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
  91. package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
  92. package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
  93. package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
  94. package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
  95. package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
  96. package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
  97. package/third_party/s2geometry/src/s2/r1interval.h +220 -0
  98. package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
  99. package/third_party/s2geometry/src/s2/r2.h +26 -0
  100. package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
  101. package/third_party/s2geometry/src/s2/r2rect.h +234 -0
  102. package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
  103. package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
  104. package/third_party/s2geometry/src/s2/s1angle.h +336 -0
  105. package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
  106. package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
  107. package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
  108. package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
  109. package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
  110. package/third_party/s2geometry/src/s2/s1interval.h +266 -0
  111. package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
  112. package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
  113. package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
  114. package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
  115. package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
  116. package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
  117. package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
  118. package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
  119. package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
  120. package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
  121. package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
  122. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
  123. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
  124. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
  125. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
  126. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
  127. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
  128. package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
  129. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
  130. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
  131. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
  132. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
  133. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
  134. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
  135. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
  136. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
  137. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
  138. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
  139. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
  140. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
  141. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
  142. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
  143. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
  144. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
  145. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
  146. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
  147. package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
  148. package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
  149. package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
  150. package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
  151. package/third_party/s2geometry/src/s2/s2cap.h +286 -0
  152. package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
  153. package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
  154. package/third_party/s2geometry/src/s2/s2cell.h +249 -0
  155. package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
  156. package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
  157. package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
  158. package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
  159. package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
  160. package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
  161. package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
  162. package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
  163. package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
  164. package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
  165. package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
  166. package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
  167. package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
  168. package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
  169. package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
  170. package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
  171. package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
  172. package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
  173. package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
  174. package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
  175. package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
  176. package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
  177. package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
  178. package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
  179. package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
  180. package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
  181. package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
  182. package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
  183. package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
  184. package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
  185. package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
  186. package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
  187. package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
  188. package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
  189. package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
  190. package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
  191. package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
  192. package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
  193. package/third_party/s2geometry/src/s2/s2coords.h +459 -0
  194. package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
  195. package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
  196. package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
  197. package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
  198. package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
  199. package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
  200. package/third_party/s2geometry/src/s2/s2debug.h +69 -0
  201. package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
  202. package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
  203. package/third_party/s2geometry/src/s2/s2earth.h +268 -0
  204. package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
  205. package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
  206. package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
  207. package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
  208. package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
  209. package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
  210. package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
  211. package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
  212. package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
  213. package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
  214. package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
  215. package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
  216. package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
  217. package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
  218. package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
  219. package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
  220. package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
  221. package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
  222. package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
  223. package/third_party/s2geometry/src/s2/s2error.cc +29 -0
  224. package/third_party/s2geometry/src/s2/s2error.h +147 -0
  225. package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
  226. package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
  227. package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
  228. package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
  229. package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
  230. package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
  231. package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
  232. package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
  233. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
  234. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
  235. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
  236. package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
  237. package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
  238. package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
  239. package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
  240. package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
  241. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
  242. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
  243. package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
  244. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
  245. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
  246. package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
  247. package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
  248. package/third_party/s2geometry/src/s2/s2loop.h +711 -0
  249. package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
  250. package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
  251. package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
  252. package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
  253. package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
  254. package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
  255. package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
  256. package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
  257. package/third_party/s2geometry/src/s2/s2measures.h +78 -0
  258. package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
  259. package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
  260. package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
  261. package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
  262. package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
  263. package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
  264. package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
  265. package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
  266. package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
  267. package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
  268. package/third_party/s2geometry/src/s2/s2point.h +38 -0
  269. package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
  270. package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
  271. package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
  272. package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
  273. package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
  274. package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
  275. package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
  276. package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
  277. package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
  278. package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
  279. package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
  280. package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
  281. package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
  282. package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
  283. package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
  284. package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
  285. package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
  286. package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
  287. package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
  288. package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
  289. package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
  290. package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
  291. package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
  292. package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
  293. package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
  294. package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
  295. package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
  296. package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
  297. package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
  298. package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
  299. package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
  300. package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
  301. package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
  302. package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
  303. package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
  304. package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
  305. package/third_party/s2geometry/src/s2/s2projections.h +161 -0
  306. package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
  307. package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
  308. package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
  309. package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
  310. package/third_party/s2geometry/src/s2/s2region.cc +26 -0
  311. package/third_party/s2geometry/src/s2/s2region.h +142 -0
  312. package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
  313. package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
  314. package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
  315. package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
  316. package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
  317. package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
  318. package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
  319. package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
  320. package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
  321. package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
  322. package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
  323. package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
  324. package/third_party/s2geometry/src/s2/s2shape.h +283 -0
  325. package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
  326. package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
  327. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
  328. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
  329. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
  330. package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
  331. package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
  332. package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
  333. package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
  334. package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
  335. package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
  336. package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
  337. package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
  338. package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
  339. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
  340. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
  341. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
  342. package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
  343. package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
  344. package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
  345. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
  346. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
  347. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
  348. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
  349. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
  350. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
  351. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
  352. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
  353. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
  354. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
  355. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
  356. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
  357. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
  358. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
  359. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
  360. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
  361. package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
  362. package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
  363. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
  364. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
  365. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
  366. package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
  367. package/third_party/s2geometry/src/s2/s2testing.h +385 -0
  368. package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
  369. package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
  370. package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
  371. package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
  372. package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
  373. package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
  374. package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
  375. package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
  376. package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
  377. package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
  378. package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
  379. package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
  380. package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
  381. package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
  382. package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
  383. package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
  384. package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
  385. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
  386. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
  387. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
  388. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
  389. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
  390. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
  391. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
  392. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
  393. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
  394. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
  395. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
  396. package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
  397. package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
  398. package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
  399. package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
  400. package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
  401. package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
  402. package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
  403. package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
  404. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
  405. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
  406. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
  407. package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
  408. package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
  409. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
  410. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
  411. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
  412. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
  413. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
  414. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
  415. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
  416. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
  417. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
  418. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
  419. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
  420. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
  421. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
  422. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
  423. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
  424. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
  425. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
  426. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
  427. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
  428. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
  429. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
  430. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
  431. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
  432. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
  433. package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
  434. package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
  435. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
  436. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
  437. package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
  438. package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
  439. package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
  440. package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
  441. package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
  442. package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
  443. package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
  444. package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
  445. package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
  446. package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
  447. package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
  448. package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
  449. package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
  450. package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
  451. package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
  452. package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
  453. package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
  454. package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
  455. package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
  456. package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
  457. package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
  458. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
  459. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
  460. package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
  461. package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
  462. package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
  463. package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
  464. package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
  465. package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
  466. package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
  467. package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
  468. package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
  469. package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
  470. package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
  471. package/third_party/s2geometry/third_party/cmake/FindGlog.cmake +48 -0
@@ -0,0 +1,574 @@
1
+ // Copyright 2003 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ //
17
+ // A simple class to handle 3x3 matrices
18
+ // The aim of this class is to be able to manipulate 3x3 matrices
19
+ // and 3D vectors as naturally as possible and make calculations
20
+ // readable.
21
+ // For that reason, the operators +, -, * are overloaded.
22
+ // (Reading a = a + b*2 - c is much easier to read than
23
+ // a = Sub(Add(a, Mul(b,2)),c) )
24
+ //
25
+ // Please be careful about overflows when using those matrices wth integer types
26
+ // The calculations are carried with VType. eg : if you are using uint8 as the
27
+ // base type, all values will be modulo 256.
28
+ // This feature is necessary to use the class in a more general framework with
29
+ // VType != plain old data type.
30
+
31
+ #ifndef S2_UTIL_MATH_MATRIX3X3_H_
32
+ #define S2_UTIL_MATH_MATRIX3X3_H_
33
+
34
+ #include <cmath>
35
+ #include <iosfwd>
36
+ #include <type_traits>
37
+
38
+ #include "s2/base/logging.h"
39
+ #include "s2/util/math/mathutil.h"
40
+ #include "s2/util/math/vector.h"
41
+
42
+ template <class VType>
43
+ class Matrix3x3 {
44
+ private:
45
+ VType m_[3][3];
46
+
47
+ public:
48
+ typedef Matrix3x3<VType> Self;
49
+ typedef VType BaseType;
50
+ typedef Vector3<VType> MVector;
51
+
52
+ // Initialize the matrix to 0
53
+ Matrix3x3() {
54
+ m_[0][2] = m_[0][1] = m_[0][0] = VType();
55
+ m_[1][2] = m_[1][1] = m_[1][0] = VType();
56
+ m_[2][2] = m_[2][1] = m_[2][0] = VType();
57
+ }
58
+
59
+ // Constructor explicitly setting the values of all the coefficient of
60
+ // the matrix
61
+ Matrix3x3(const VType &m00, const VType &m01, const VType &m02,
62
+ const VType &m10, const VType &m11, const VType &m12,
63
+ const VType &m20, const VType &m21, const VType &m22) {
64
+ m_[0][0] = m00;
65
+ m_[0][1] = m01;
66
+ m_[0][2] = m02;
67
+
68
+ m_[1][0] = m10;
69
+ m_[1][1] = m11;
70
+ m_[1][2] = m12;
71
+
72
+ m_[2][0] = m20;
73
+ m_[2][1] = m21;
74
+ m_[2][2] = m22;
75
+ }
76
+
77
+ // Casting constructor
78
+ template <class VType2>
79
+ static Matrix3x3 Cast(const Matrix3x3<VType2> &mb) {
80
+ return Matrix3x3(static_cast<VType>(mb(0, 0)),
81
+ static_cast<VType>(mb(0, 1)),
82
+ static_cast<VType>(mb(0, 2)),
83
+ static_cast<VType>(mb(1, 0)),
84
+ static_cast<VType>(mb(1, 1)),
85
+ static_cast<VType>(mb(1, 2)),
86
+ static_cast<VType>(mb(2, 0)),
87
+ static_cast<VType>(mb(2, 1)),
88
+ static_cast<VType>(mb(2, 2)));
89
+ }
90
+
91
+ // Change the value of all the coefficients of the matrix
92
+ inline Matrix3x3 &
93
+ Set(const VType &m00, const VType &m01, const VType &m02,
94
+ const VType &m10, const VType &m11, const VType &m12,
95
+ const VType &m20, const VType &m21, const VType &m22) {
96
+ m_[0][0] = m00;
97
+ m_[0][1] = m01;
98
+ m_[0][2] = m02;
99
+
100
+ m_[1][0] = m10;
101
+ m_[1][1] = m11;
102
+ m_[1][2] = m12;
103
+
104
+ m_[2][0] = m20;
105
+ m_[2][1] = m21;
106
+ m_[2][2] = m22;
107
+ return (*this);
108
+ }
109
+
110
+ // Matrix addition
111
+ inline Matrix3x3& operator+=(const Matrix3x3 &mb) {
112
+ m_[0][0] += mb.m_[0][0];
113
+ m_[0][1] += mb.m_[0][1];
114
+ m_[0][2] += mb.m_[0][2];
115
+
116
+ m_[1][0] += mb.m_[1][0];
117
+ m_[1][1] += mb.m_[1][1];
118
+ m_[1][2] += mb.m_[1][2];
119
+
120
+ m_[2][0] += mb.m_[2][0];
121
+ m_[2][1] += mb.m_[2][1];
122
+ m_[2][2] += mb.m_[2][2];
123
+ return (*this);
124
+ }
125
+
126
+ // Matrix subtration
127
+ inline Matrix3x3& operator-=(const Matrix3x3 &mb) {
128
+ m_[0][0] -= mb.m_[0][0];
129
+ m_[0][1] -= mb.m_[0][1];
130
+ m_[0][2] -= mb.m_[0][2];
131
+
132
+ m_[1][0] -= mb.m_[1][0];
133
+ m_[1][1] -= mb.m_[1][1];
134
+ m_[1][2] -= mb.m_[1][2];
135
+
136
+ m_[2][0] -= mb.m_[2][0];
137
+ m_[2][1] -= mb.m_[2][1];
138
+ m_[2][2] -= mb.m_[2][2];
139
+ return (*this);
140
+ }
141
+
142
+ // Matrix multiplication by a scalar
143
+ inline Matrix3x3& operator*=(const VType &k) {
144
+ m_[0][0] *= k;
145
+ m_[0][1] *= k;
146
+ m_[0][2] *= k;
147
+
148
+ m_[1][0] *= k;
149
+ m_[1][1] *= k;
150
+ m_[1][2] *= k;
151
+
152
+ m_[2][0] *= k;
153
+ m_[2][1] *= k;
154
+ m_[2][2] *= k;
155
+ return (*this);
156
+ }
157
+
158
+ // Matrix addition
159
+ inline Matrix3x3 operator+(const Matrix3x3 &mb) const {
160
+ return Matrix3x3(*this) += mb;
161
+ }
162
+
163
+ // Matrix subtraction
164
+ inline Matrix3x3 operator-(const Matrix3x3 &mb) const {
165
+ return Matrix3x3(*this) -= mb;
166
+ }
167
+
168
+ // Change the sign of all the coefficients in the matrix
169
+ friend inline Matrix3x3 operator-(const Matrix3x3 &vb) {
170
+ return Matrix3x3(-vb.m_[0][0], -vb.m_[0][1], -vb.m_[0][2],
171
+ -vb.m_[1][0], -vb.m_[1][1], -vb.m_[1][2],
172
+ -vb.m_[2][0], -vb.m_[2][1], -vb.m_[2][2]);
173
+ }
174
+
175
+ // Matrix multiplication by a scalar
176
+ inline Matrix3x3 operator*(const VType &k) const {
177
+ return Matrix3x3(*this) *= k;
178
+ }
179
+
180
+ friend inline Matrix3x3 operator*(const VType &k, const Matrix3x3 &mb) {
181
+ return Matrix3x3(mb)*k;
182
+ }
183
+
184
+ // Matrix multiplication
185
+ inline Matrix3x3 operator*(const Matrix3x3 &mb) const {
186
+ return Matrix3x3(
187
+ m_[0][0] * mb.m_[0][0] + m_[0][1] * mb.m_[1][0] + m_[0][2] * mb.m_[2][0],
188
+ m_[0][0] * mb.m_[0][1] + m_[0][1] * mb.m_[1][1] + m_[0][2] * mb.m_[2][1],
189
+ m_[0][0] * mb.m_[0][2] + m_[0][1] * mb.m_[1][2] + m_[0][2] * mb.m_[2][2],
190
+
191
+ m_[1][0] * mb.m_[0][0] + m_[1][1] * mb.m_[1][0] + m_[1][2] * mb.m_[2][0],
192
+ m_[1][0] * mb.m_[0][1] + m_[1][1] * mb.m_[1][1] + m_[1][2] * mb.m_[2][1],
193
+ m_[1][0] * mb.m_[0][2] + m_[1][1] * mb.m_[1][2] + m_[1][2] * mb.m_[2][2],
194
+
195
+ m_[2][0] * mb.m_[0][0] + m_[2][1] * mb.m_[1][0] + m_[2][2] * mb.m_[2][0],
196
+ m_[2][0] * mb.m_[0][1] + m_[2][1] * mb.m_[1][1] + m_[2][2] * mb.m_[2][1],
197
+ m_[2][0] * mb.m_[0][2] + m_[2][1] * mb.m_[1][2] + m_[2][2] * mb.m_[2][2]);
198
+ }
199
+
200
+ // Multiplication of a matrix by a vector
201
+ inline MVector operator*(const MVector &v) const {
202
+ return MVector(
203
+ m_[0][0] * v[0] + m_[0][1] * v[1] + m_[0][2] * v[2],
204
+ m_[1][0] * v[0] + m_[1][1] * v[1] + m_[1][2] * v[2],
205
+ m_[2][0] * v[0] + m_[2][1] * v[1] + m_[2][2] * v[2]);
206
+ }
207
+
208
+ // Return the determinant of the matrix
209
+ inline VType Det(void) const {
210
+ return m_[0][0] * m_[1][1] * m_[2][2]
211
+ + m_[0][1] * m_[1][2] * m_[2][0]
212
+ + m_[0][2] * m_[1][0] * m_[2][1]
213
+ - m_[2][0] * m_[1][1] * m_[0][2]
214
+ - m_[2][1] * m_[1][2] * m_[0][0]
215
+ - m_[2][2] * m_[1][0] * m_[0][1];
216
+ }
217
+
218
+ // Return the trace of the matrix
219
+ inline VType Trace(void) const {
220
+ return m_[0][0] + m_[1][1] + m_[2][2];
221
+ }
222
+
223
+ // Return a pointer to the data array for interface with other libraries
224
+ // like opencv
225
+ VType* Data() {
226
+ return reinterpret_cast<VType*>(m_);
227
+ }
228
+ const VType* Data() const {
229
+ return reinterpret_cast<const VType*>(m_);
230
+ }
231
+
232
+ // Return matrix element (i,j) with 0<=i<=2 0<=j<=2
233
+ inline VType &operator()(const int i, const int j) {
234
+ S2_DCHECK_GE(i, 0);
235
+ S2_DCHECK_LT(i, 3);
236
+ S2_DCHECK_GE(j, 0);
237
+ S2_DCHECK_LT(j, 3);
238
+ return m_[i][j];
239
+ }
240
+ inline VType operator()(const int i, const int j) const {
241
+ S2_DCHECK_GE(i, 0);
242
+ S2_DCHECK_LT(i, 3);
243
+ S2_DCHECK_GE(j, 0);
244
+ S2_DCHECK_LT(j, 3);
245
+ return m_[i][j];
246
+ }
247
+
248
+ // Return matrix element (i/3,i%3) with 0<=i<=8 (access concatenated rows).
249
+ inline VType &operator[](const int i) {
250
+ S2_DCHECK_GE(i, 0);
251
+ S2_DCHECK_LT(i, 9);
252
+ return reinterpret_cast<VType*>(m_)[i];
253
+ }
254
+ inline VType operator[](const int i) const {
255
+ S2_DCHECK_GE(i, 0);
256
+ S2_DCHECK_LT(i, 9);
257
+ return reinterpret_cast<const VType*>(m_)[i];
258
+ }
259
+
260
+ // Return the transposed matrix
261
+ inline Matrix3x3 Transpose(void) const {
262
+ return Matrix3x3(m_[0][0], m_[1][0], m_[2][0],
263
+ m_[0][1], m_[1][1], m_[2][1],
264
+ m_[0][2], m_[1][2], m_[2][2]);
265
+ }
266
+
267
+ // Return the transposed of the matrix of the cofactors
268
+ // (Useful for inversion for example)
269
+ inline Matrix3x3 ComatrixTransposed(void) const {
270
+ return Matrix3x3(
271
+ m_[1][1] * m_[2][2] - m_[2][1] * m_[1][2],
272
+ m_[2][1] * m_[0][2] - m_[0][1] * m_[2][2],
273
+ m_[0][1] * m_[1][2] - m_[1][1] * m_[0][2],
274
+
275
+ m_[1][2] * m_[2][0] - m_[2][2] * m_[1][0],
276
+ m_[2][2] * m_[0][0] - m_[0][2] * m_[2][0],
277
+ m_[0][2] * m_[1][0] - m_[1][2] * m_[0][0],
278
+
279
+ m_[1][0] * m_[2][1] - m_[2][0] * m_[1][1],
280
+ m_[2][0] * m_[0][1] - m_[0][0] * m_[2][1],
281
+ m_[0][0] * m_[1][1] - m_[1][0] * m_[0][1]);
282
+ }
283
+ // Matrix inversion
284
+ inline Matrix3x3 Inverse(void) const {
285
+ VType det = Det();
286
+ S2_CHECK_NE(det, VType(0)) << " Can't inverse. Determinant = 0.";
287
+ return (VType(1) / det) * ComatrixTransposed();
288
+ }
289
+
290
+ // Return the vector 3D at row i
291
+ inline MVector Row(const int i) const {
292
+ S2_DCHECK_GE(i, 0);
293
+ S2_DCHECK_LT(i, 3);
294
+ return MVector(m_[i][0], m_[i][1], m_[i][2]);
295
+ }
296
+
297
+ // Return the vector 3D at col i
298
+ inline MVector Col(const int i) const {
299
+ S2_DCHECK_GE(i, 0);
300
+ S2_DCHECK_LT(i, 3);
301
+ return MVector(m_[0][i], m_[1][i], m_[2][i]);
302
+ }
303
+
304
+ // Create a matrix from 3 row vectors
305
+ static inline Matrix3x3 FromRows(const MVector &v1,
306
+ const MVector &v2,
307
+ const MVector &v3) {
308
+ Matrix3x3 temp;
309
+ temp.Set(v1[0], v1[1], v1[2],
310
+ v2[0], v2[1], v2[2],
311
+ v3[0], v3[1], v3[2]);
312
+ return temp;
313
+ }
314
+
315
+ // Create a matrix from 3 column vectors
316
+ static inline Matrix3x3 FromCols(const MVector &v1,
317
+ const MVector &v2,
318
+ const MVector &v3) {
319
+ Matrix3x3 temp;
320
+ temp.Set(v1[0], v2[0], v3[0],
321
+ v1[1], v2[1], v3[1],
322
+ v1[2], v2[2], v3[2]);
323
+ return temp;
324
+ }
325
+
326
+ // Set the vector in row i to be v1
327
+ void SetRow(int i, const MVector &v1) {
328
+ S2_DCHECK_GE(i, 0);
329
+ S2_DCHECK_LT(i, 3);
330
+ m_[i][0] = v1[0];
331
+ m_[i][1] = v1[1];
332
+ m_[i][2] = v1[2];
333
+ }
334
+
335
+ // Set the vector in column i to be v1
336
+ void SetCol(int i, const MVector &v1) {
337
+ S2_DCHECK_GE(i, 0);
338
+ S2_DCHECK_LT(i, 3);
339
+ m_[0][i] = v1[0];
340
+ m_[1][i] = v1[1];
341
+ m_[2][i] = v1[2];
342
+ }
343
+
344
+ // Return a matrix M close to the original but verifying MtM = I
345
+ // (useful to compensate for errors in a rotation matrix)
346
+ Matrix3x3 Orthogonalize() const {
347
+ MVector r1, r2, r3;
348
+ r1 = Row(0).Normalize();
349
+ r2 = (Row(2).CrossProd(r1)).Normalize();
350
+ r3 = (r1.CrossProd(r2)).Normalize();
351
+ return FromRows(r1, r2, r3);
352
+ }
353
+
354
+ // Return the identity matrix
355
+ static inline Matrix3x3 Identity(void) {
356
+ Matrix3x3 temp;
357
+ temp.Set(VType(1), VType(0), VType(0), //
358
+ VType(0), VType(1), VType(0), //
359
+ VType(0), VType(0), VType(1));
360
+ return temp;
361
+ }
362
+
363
+ // Return a matrix full of zeros
364
+ static inline Matrix3x3 Zero(void) {
365
+ return Matrix3x3();
366
+ }
367
+
368
+ // Return a diagonal matrix with the coefficients in v
369
+ static inline Matrix3x3 Diagonal(const MVector &v) {
370
+ return Matrix3x3(v[0], VType(), VType(),
371
+ VType(), v[1], VType(),
372
+ VType(), VType(), v[2]);
373
+ }
374
+
375
+ // Return the matrix vvT
376
+ static Matrix3x3 Sym3(const MVector &v) {
377
+ return Matrix3x3(
378
+ v[0]*v[0], v[0]*v[1], v[0]*v[2],
379
+ v[1]*v[0], v[1]*v[1], v[1]*v[2],
380
+ v[2]*v[0], v[2]*v[1], v[2]*v[2]);
381
+ }
382
+ // Return a matrix M such that:
383
+ // for each u, M * u = v.CrossProd(u)
384
+ static Matrix3x3 AntiSym3(const MVector &v) {
385
+ return Matrix3x3(VType(), -v[2], v[1],
386
+ v[2], VType(), -v[0],
387
+ -v[1], v[0], VType());
388
+ }
389
+
390
+ // Returns matrix that rotates |rot| radians around axis rot.
391
+ static Matrix3x3 Rodrigues(const MVector &rot) {
392
+ Matrix3x3 R;
393
+ VType theta = rot.Norm();
394
+ MVector w = rot.Normalize();
395
+ Matrix3x3 Wv = Matrix3x3::AntiSym3(w);
396
+ Matrix3x3 I = Matrix3x3::Identity();
397
+ Matrix3x3 A = Matrix3x3::Sym3(w);
398
+ R = (1 - cos(theta)) * A + sin(theta) * Wv + cos(theta) * I;
399
+ return R;
400
+ }
401
+
402
+ // Returns v.Transpose() * (*this) * u
403
+ VType MulBothSides(const MVector &v, const MVector &u) const {
404
+ return ((*this) * u).DotProd(v);
405
+ }
406
+
407
+ // Use the 3x3 matrix as a projective transform for 2d points
408
+ Vector2<VType> Project(const Vector2<VType> &v) const {
409
+ MVector temp = (*this) * MVector(v[0], v[1], 1);
410
+ return Vector2<VType>(temp[0] / temp[2], temp[1] / temp[2]);
411
+ }
412
+
413
+ // Return the Frobenius norm of the matrix: sqrt(sum(aij^2))
414
+ VType FrobeniusNorm() const {
415
+ VType sum = VType();
416
+ for (int i = 0; i < 3; i++) {
417
+ for (int j = 0; j < 3; j++) {
418
+ sum += m_[i][j] * m_[i][j];
419
+ }
420
+ }
421
+ return sqrt(sum);
422
+ }
423
+
424
+ // Finds the eigen values of the matrix. Return the number of real eigenvalues
425
+ // found.
426
+ // If the matrix is known to be symmetric due to your problem formulation,
427
+ // then please use SymmetricEigenSolver, since this method does not guarantee
428
+ // finding all 3 real eigenvalues in pathological cases. See CL 49170250.
429
+ int EigenValues(MVector *eig_val) const {
430
+ long double r1, r2, r3; // NOLINT
431
+ // characteristic polynomial
432
+ // x^3 + a*x^2 + b*x + c
433
+ VType a = -Trace();
434
+ VType b = m_[0][0]*m_[1][1] + m_[1][1]*m_[2][2] + m_[2][2]*m_[0][0]
435
+ - m_[1][0]*m_[0][1] - m_[2][1]*m_[1][2] - m_[0][2]*m_[2][0];
436
+ VType c = -Det();
437
+ bool res = MathUtil::RealRootsForCubic(a, b, c, &r1, &r2, &r3);
438
+ (*eig_val)[0] = r1;
439
+ if (res) {
440
+ (*eig_val)[1] = r2;
441
+ (*eig_val)[2] = r3;
442
+ return 3;
443
+ }
444
+ return 1;
445
+ }
446
+
447
+ // Finds the eigen values and optional associated eigen vectors of a
448
+ // symmetric 3x3 matrix (not necessarily positive definite).
449
+ // eigen values are sorted in decreasing order;
450
+ // eig_val corresponds to the columns of the eig_vec matrix.
451
+ // Note: The routine will only use the lower diagonal part
452
+ // of the matrix, i.e.
453
+ // | a00, |
454
+ // | a10, a11, |
455
+ // | a20, a21, a22 |
456
+ void SymmetricEigenSolver(MVector *eig_val,
457
+ Matrix3x3 *eig_vec /*nullable*/) const {
458
+ // Compute characteristic polynomial coefficients.
459
+ double c2 = -Trace();
460
+ double c1 = -(m_[1][0] * m_[1][0] - m_[0][0] * m_[1][1]
461
+ - m_[0][0] * m_[2][2] - m_[1][1] * m_[2][2]
462
+ + m_[2][0] * m_[2][0] + m_[2][1] * m_[2][1]);
463
+ double c0 = -(m_[0][0] * m_[1][1] * m_[2][2] //
464
+ - m_[2][0] * m_[2][0] * m_[1][1] //
465
+ - m_[1][0] * m_[1][0] * m_[2][2] //
466
+ - m_[0][0] * m_[2][1] * m_[2][1] //
467
+ + 2 * m_[1][0] * m_[2][0] * m_[2][1]);
468
+
469
+ // Root finding x^3 + c2*x^2 + c1*x + c0 = 0.
470
+ // NOTE: Cannot reuse general cubic solver MathUtil::RealRootsForCubic()
471
+ // because it doesn't guarantee finding 3 real roots, e.g. it won't always
472
+ // return roots {2, 2, 0} for the cubic x^3 - 4*x^2 + 4*x + epsilon = 0.
473
+ double q = (c2*c2-3*c1)/9.0;
474
+ double r = (2*c2*c2*c2-9*c2*c1+27*c0)/54.0;
475
+ // Assume R^2 <= Q^3 so there are three real roots.
476
+ // Avoid sqrt of negative q, which can only happen due to numerical error.
477
+ if (q < 0) q = 0;
478
+ double sqrt_q = -2.0 * sqrt(q);
479
+ double q3_r2 = q * q * q - r * r;
480
+ // Avoid sqrt of negative q3_r2, which can only happen due to numerical
481
+ // error.
482
+ double theta = atan2(q3_r2 <= 0 ? 0 : sqrt(q3_r2), r);
483
+ double c2_3 = c2 / 3;
484
+ (*eig_val)[0] = sqrt_q * cos(theta / 3.0) - c2_3;
485
+ (*eig_val)[1] = sqrt_q * cos((theta + 2.0 * M_PI)/3.0) - c2_3;
486
+ (*eig_val)[2] = sqrt_q * cos((theta - 2.0 * M_PI)/3.0) - c2_3;
487
+
488
+ // Sort eigen value in decreasing order
489
+ Vector3<int> d_order = eig_val->ComponentOrder();
490
+ (*eig_val) = MVector((*eig_val)[d_order[2]],
491
+ (*eig_val)[d_order[1]],
492
+ (*eig_val)[d_order[0]]);
493
+
494
+ // Compute eigenvectors
495
+ if (!eig_vec) return;
496
+ for (int i = 0; i < 3; ++i) {
497
+ MVector r1 , r2 , r3 , e1 , e2 , e3;
498
+ r1[0] = m_[0][0] - (*eig_val)[i];
499
+ r2[0] = m_[1][0];
500
+ r3[0] = m_[2][0];
501
+ r1[1] = m_[1][0];
502
+ r2[1] = m_[1][1] - (*eig_val)[i];
503
+ r3[1] = m_[2][1];
504
+ r1[2] = m_[2][0];
505
+ r2[2] = m_[2][1];
506
+ r3[2] = m_[2][2] - (*eig_val)[i];
507
+
508
+ e1 = r1.CrossProd(r2);
509
+ e2 = r2.CrossProd(r3);
510
+ e3 = r3.CrossProd(r1);
511
+
512
+ // Make e2 and e3 point in the same direction as e1
513
+ if (e2.DotProd(e1) < 0) e2 = -e2;
514
+ if (e3.DotProd(e1) < 0) e3 = -e3;
515
+ MVector e = (e1 + e2 + e3).Normalize();
516
+ eig_vec->SetCol(i, e);
517
+ }
518
+ }
519
+
520
+ // Return true is one of the elements of the matrix is NaN
521
+ bool IsNaN() const {
522
+ for ( int i = 0; i < 3; ++i ) {
523
+ for ( int j = 0; j < 3; ++j ) {
524
+ if ( isnan(m_[i][j]) ) {
525
+ return true;
526
+ }
527
+ }
528
+ }
529
+ return false;
530
+ }
531
+
532
+ friend bool operator==(const Matrix3x3 &a, const Matrix3x3 &b) {
533
+ return a.m_[0][0] == b.m_[0][0] &&
534
+ a.m_[0][1] == b.m_[0][1] &&
535
+ a.m_[0][2] == b.m_[0][2] &&
536
+ a.m_[1][0] == b.m_[1][0] &&
537
+ a.m_[1][1] == b.m_[1][1] &&
538
+ a.m_[1][2] == b.m_[1][2] &&
539
+ a.m_[2][0] == b.m_[2][0] &&
540
+ a.m_[2][1] == b.m_[2][1] &&
541
+ a.m_[2][2] == b.m_[2][2];
542
+ }
543
+
544
+ friend bool operator!=(const Matrix3x3 &a, const Matrix3x3 &b) {
545
+ return !(a == b);
546
+ }
547
+
548
+ friend std::ostream &operator <<(std::ostream &out, const Matrix3x3 &mb) {
549
+ int i, j;
550
+ for (i = 0; i < 3; i++) {
551
+ if (i ==0) {
552
+ out << "[";
553
+ } else {
554
+ out << " ";
555
+ }
556
+ for (j = 0; j < 3; j++) {
557
+ out << mb(i, j) << " ";
558
+ }
559
+ if (i == 2) {
560
+ out << "]";
561
+ } else {
562
+ out << std::endl;
563
+ }
564
+ }
565
+ return out;
566
+ }
567
+ };
568
+
569
+ typedef Matrix3x3<int> Matrix3x3_i;
570
+ typedef Matrix3x3<float> Matrix3x3_f;
571
+ typedef Matrix3x3<double> Matrix3x3_d;
572
+
573
+
574
+ #endif // S2_UTIL_MATH_MATRIX3X3_H_