@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.
- package/.circleci/config.yml +45 -0
- package/.dockerignore +1 -0
- package/.gitmodules +3 -0
- package/CHANGELOG.md +33 -0
- package/LICENSE +201 -0
- package/README.md +147 -0
- package/binding.gyp +170 -0
- package/docker/Dockerfile.node20.test +8 -0
- package/docker/Dockerfile.node22.test +8 -0
- package/docker/Dockerfile.node24.test +8 -0
- package/index.d.ts +117 -0
- package/index.js +6 -0
- package/jest.config.js +184 -0
- package/package.json +43 -0
- package/publish-linux.sh +18 -0
- package/publish-osx.sh +19 -0
- package/src/builder.cc +84 -0
- package/src/builder.h +29 -0
- package/src/cell.cc +71 -0
- package/src/cell.h +26 -0
- package/src/cell_id.cc +210 -0
- package/src/cell_id.h +44 -0
- package/src/cell_union.cc +237 -0
- package/src/cell_union.h +34 -0
- package/src/earth.cc +185 -0
- package/src/earth.h +33 -0
- package/src/latlng.cc +132 -0
- package/src/latlng.h +28 -0
- package/src/loop.cc +51 -0
- package/src/loop.h +21 -0
- package/src/point.cc +69 -0
- package/src/point.h +23 -0
- package/src/polygon.cc +36 -0
- package/src/polygon.h +20 -0
- package/src/polyline.cc +186 -0
- package/src/polyline.h +34 -0
- package/src/region_coverer.cc +450 -0
- package/src/region_coverer.h +56 -0
- package/src/s2.cc +27 -0
- package/test/Cell.test.js +37 -0
- package/test/CellId.test.js +135 -0
- package/test/CellUnion.test.js +150 -0
- package/test/Earth.test.js +62 -0
- package/test/LatLng.test.js +45 -0
- package/test/Point.test.js +14 -0
- package/test/Polyline.test.js +78 -0
- package/test/RegionCoverer.test.js +301 -0
- package/test.sh +16 -0
- package/third_party/s2geometry/.travis.yml +163 -0
- package/third_party/s2geometry/AUTHORS +13 -0
- package/third_party/s2geometry/CONTRIBUTING.md +65 -0
- package/third_party/s2geometry/CONTRIBUTORS +30 -0
- package/third_party/s2geometry/LICENSE +202 -0
- package/third_party/s2geometry/NOTICE +5 -0
- package/third_party/s2geometry/README.md +127 -0
- package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
- package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
- package/third_party/s2geometry/doc/examples/term_index.py +101 -0
- package/third_party/s2geometry/src/python/coder.i +125 -0
- package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
- package/third_party/s2geometry/src/python/s2.i +37 -0
- package/third_party/s2geometry/src/python/s2_common.i +756 -0
- package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
- package/third_party/s2geometry/src/s2/base/casts.h +318 -0
- package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
- package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
- package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
- package/third_party/s2geometry/src/s2/base/logging.h +173 -0
- package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
- package/third_party/s2geometry/src/s2/base/port.h +999 -0
- package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
- package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
- package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
- package/third_party/s2geometry/src/s2/base/timer.h +50 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
- package/third_party/s2geometry/src/s2/r1interval.h +220 -0
- package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
- package/third_party/s2geometry/src/s2/r2.h +26 -0
- package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
- package/third_party/s2geometry/src/s2/r2rect.h +234 -0
- package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
- package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
- package/third_party/s2geometry/src/s2/s1angle.h +336 -0
- package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
- package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
- package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
- package/third_party/s2geometry/src/s2/s1interval.h +266 -0
- package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
- package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
- package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
- package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
- package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
- package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
- package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
- package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
- package/third_party/s2geometry/src/s2/s2cap.h +286 -0
- package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
- package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
- package/third_party/s2geometry/src/s2/s2cell.h +249 -0
- package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
- package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
- package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
- package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
- package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
- package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
- package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
- package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
- package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
- package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
- package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
- package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
- package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
- package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
- package/third_party/s2geometry/src/s2/s2coords.h +459 -0
- package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
- package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
- package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
- package/third_party/s2geometry/src/s2/s2debug.h +69 -0
- package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
- package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
- package/third_party/s2geometry/src/s2/s2earth.h +268 -0
- package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
- package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
- package/third_party/s2geometry/src/s2/s2error.cc +29 -0
- package/third_party/s2geometry/src/s2/s2error.h +147 -0
- package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
- package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
- package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
- package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
- package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
- package/third_party/s2geometry/src/s2/s2loop.h +711 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
- package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
- package/third_party/s2geometry/src/s2/s2measures.h +78 -0
- package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
- package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
- package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
- package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
- package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
- package/third_party/s2geometry/src/s2/s2point.h +38 -0
- package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
- package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
- package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
- package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
- package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
- package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
- package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
- package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
- package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
- package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
- package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
- package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
- package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
- package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
- package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
- package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
- package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
- package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
- package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
- package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
- package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
- package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
- package/third_party/s2geometry/src/s2/s2projections.h +161 -0
- package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
- package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
- package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
- package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2region.cc +26 -0
- package/third_party/s2geometry/src/s2/s2region.h +142 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
- package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
- package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
- package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
- package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
- package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
- package/third_party/s2geometry/src/s2/s2shape.h +283 -0
- package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
- package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
- package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
- package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
- package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
- package/third_party/s2geometry/src/s2/s2testing.h +385 -0
- package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
- package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
- package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
- package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
- package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
- package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
- package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
- package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
- package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
- package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
- package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
- package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
- package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
- package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
- package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
- package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
- package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
- package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
- package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
- package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
- package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
- package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
- package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
- package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
- package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
- package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
- package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
- package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
- package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
- 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_
|