Computational geometry and spatial indexing on the sphere

Overview

S2 Geometry Library

Build Status

Overview

This is a package for manipulating geometric shapes. Unlike many geometry libraries, S2 is primarily designed to work with spherical geometry, i.e., shapes drawn on a sphere rather than on a planar 2D map. This makes it especially suitable for working with geographic data.

If you want to learn more about the library, start by reading the overview and quick start document, then read the introduction to the basic types.

S2 documentation can be found on s2geometry.io.

Requirements for End Users

On Ubuntu, all of these can be installed via apt-get:

sudo apt-get install cmake libgflags-dev libgoogle-glog-dev libgtest-dev libssl-dev

Otherwise, you may need to install some from source.

On macOS, use MacPorts or Homebrew. For MacPorts:

sudo port install cmake gflags google-glog openssl

Do not install gtest from MacPorts; instead download release 1.8.0, unpack, and substitute

cmake -DGTEST_ROOT=/...absolute path to.../googletest-release-1.8.0/googletest ..

in the build instructions below.

Thorough testing has only been done on Ubuntu 14.04.3 and macOS 10.12.

Build and Install

You may either download the source as a ZIP archive, or clone the git repository.

Via ZIP archive

Download ZIP file

cd [parent of directory where you want to put S2]
unzip [path to ZIP file]/s2geometry-master.zip
cd s2geometry-master

Via git clone

cd [parent of directory where you want to put S2]
git clone https://github.com/google/s2geometry.git
cd s2geometry

Building

From the appropriate directory depending on how you got the source:

mkdir build
cd build
# You can omit -DGTEST_ROOT to skip tests; see above for macOS.
cmake -DGTEST_ROOT=/usr/src/gtest ..
make
make test  # If GTEST_ROOT specified above.
sudo make install

Enable gflags and glog with cmake -DWITH_GFLAGS=ON -DWITH_GLOG=ON ....

Disable building of shared libraries with -DBUILD_SHARED_LIBS=OFF.

Python

If you want the Python interface, you will also need:

  • SWIG (for Python support, optional)

which can be installed via

sudo apt-get install swig

or on macOS:

sudo port install swig

Expect to see some warnings if you build with swig 2.0.

Python 3 is required.

Other S2 implementations

  • Go (Approximately 40% complete.)
  • Java (Older version; last updated in 2011.)

Disclaimer

This is not an official Google product.

Comments
  • S2 compatible with python3?

    S2 compatible with python3?

    I followed the instructions as given here - http://s2geometry.io/about/platforms.html but I am getting these errors when I run cmake

    -- The following features have been enabled:

    • GFLAGS, allows changing command line flags.
    • GLOG, provides logging configurability.
    • SHARED_LIBS, builds shared libraries instead of static.

    GTEST_ROOT: /usr/src/googletest File "/usr/lib/python3.6/site.py", line 183 file=sys.stderr) ^ SyntaxError: invalid syntax CMake Error at src/python/CMakeLists.txt:30 (install): install TARGETS given no LIBRARY DESTINATION for module target "_pywraps2".

    CMake Error at src/python/CMakeLists.txt:31 (install): install FILES given no DESTINATION!

    -- Configuring incomplete, errors occurred! See also "/home/winash12/S2source/s2geometry/CMakeFiles/CMakeOutput.log". See also "/home/winash12/S2source/s2geometry/CMakeFiles/CMakeError.log". This is on Ubuntu 18.04 LTS.

    opened by winash12 27
  • Array bounds warning when compiling with gcc11

    Array bounds warning when compiling with gcc11

    We're trying to track down the source of a warning that we are required to silence for the R package s2 (in order to keep the package on CRAN). A new test has been added to the CRAN servers with the development version of gcc (i.e., gcc11). Compiling the s2 package gives new warnings with -Warray-bounds in s2/util/gtl/btree.h, and nether myself nor @edzer have the expertise to know if these errors are (1) a bug in gcc11, (2) real but not important, or (3) an actual out-of-bounds array error. There is an issue thread of our struggles with this here: https://github.com/r-spatial/s2/issues/79

    I've put together a reprex to illustrate the problem...unfortunately it involves building gcc11 from source (which is what CRAN has done). The gist version is here: https://gist.github.com/paleolimbot/51db5e587b5f3e57a637b6a24655fe87

    Note that all of

    • gcc11/devel
    • map[4] = 4; (i.e., insertion)
    • -DNDEBUG and
    • -O2

    ...are necessary to reproduce.

    git clone https://gist.github.com/51db5e587b5f3e57a637b6a24655fe87.git gcc11-gtl-btree
    cd gcc11-gtl-btree
    # this takes several hours
    docker build . --tag r-gcc11
    docker run --rm r-gcc11 g++ --version
    
    g++ (GCC) 11.0.0 20201024 (experimental)
    Copyright (C) 2020 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    # with latest github s2
    curl -L https://github.com/google/s2geometry/archive/master.zip --output s2.zip
    unzip s2.zip
    docker run --rm -v $(pwd):/test -w /test r-gcc11 g++ -std=c++11 -I s2geometry-master/src -O2 -DNDEBUG -Warray-bounds test.cpp -o test
    
    In file included from s2geometry-master/src/s2/util/gtl/btree_map.h:34,
                     from test.cpp:3:
    s2geometry-master/src/s2/util/gtl/btree.h: In function ‘int main()’:
    s2geometry-master/src/s2/util/gtl/btree.h:604:22: warning: array subscript [33, 287] is outside array bounds of ‘absl::container_internal::Allocate<8, std::allocator<std::pair<int* const, std::pair<int, bool> > > >::M [32]’ [-Warray-bounds]
      604 |     mutable_child(i) = c;
          |     ~~~~~~~~~~~~~~~~~^~~
    In file included from /usr/local/include/c++/11.0.0/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
                     from /usr/local/include/c++/11.0.0/bits/allocator.h:46,
                     from /usr/local/include/c++/11.0.0/memory:64,
                     from s2geometry-master/src/s2/util/gtl/btree_map.h:30,
                     from test.cpp:3:
    /usr/local/include/c++/11.0.0/ext/new_allocator.h:121:48: note: referencing an object of size between 48 and 256 allocated by ‘void* operator new(std::size_t)’
      121 |         return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
          |                                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
    In file included from s2geometry-master/src/s2/util/gtl/btree_map.h:34,
                     from test.cpp:3:
    s2geometry-master/src/s2/util/gtl/btree.h:597:58: warning: array subscript [32, 287] is outside array bounds of ‘absl::container_internal::Allocate<8, std::allocator<std::pair<int* const, std::pair<int, bool> > > >::M [32]’ [-Warray-bounds]
      597 |   btree_node *child(int i) const { return GetField<3>()[i]; }
          |                                                          ^
    In file included from /usr/local/include/c++/11.0.0/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
                     from /usr/local/include/c++/11.0.0/bits/allocator.h:46,
                     from /usr/local/include/c++/11.0.0/memory:64,
                     from s2geometry-master/src/s2/util/gtl/btree_map.h:30,
                     from test.cpp:3:
    /usr/local/include/c++/11.0.0/ext/new_allocator.h:121:48: note: referencing an object of size between 48 and 256 allocated by ‘void* operator new(std::size_t)’
      121 |         return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
          |                                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
    
    opened by paleolimbot 20
  • Tag a release

    Tag a release

    Hey, having read #40, I'd like to push again for a tagged release. Reason for asking is that package managers, e.g. Homebrew, won't accept a package for S2 unless there is a tagged version. It would be very much appreciated.

    opened by DennisOSRM 20
  • Adding openssl 1.1 compat code

    Adding openssl 1.1 compat code

    I added some code which should make the exactfloat class compatible with OpenSSL 1.1 Could probably be faster by using unaligned memory access on x86 https://github.com/google/s2geometry/issues/5

    For reference see the manual page: https://www.openssl.org/docs/man1.1.0/crypto/BN_bn2lebinpad.html

    opened by graetzer 14
  • Request: Option to not require external dependencies for static linking scenarios

    Request: Option to not require external dependencies for static linking scenarios

    Hi, great to see the new version of S2 out - very cool!

    I know a lot of people use the old version of S2 (us for example) and link it statically into their application. That was fairly easy to do with the old version, but now with the GFlags, GLog dependencies it's a lot more onerous and also affects downstream build system requirements.

    Is there any chance you might consider an option to allow building the core without requiring any dependencies, aside from libssl of course.

    Best

    opened by socmag 13
  • S2Loop and S2Builder for mbr intersection

    S2Loop and S2Builder for mbr intersection

    I am trying to write a function to check if two MBRs intersect. My first thought was to create two S2Polygons and use the intersectsmethod. In order to do that I have to create S2Loops from the points of each MBR with something like this:

        vector<S2Point> points1;
    
        points1.push_back(S2Point(s.xLow, s.yLow,0));
        points1.push_back(S2Point(s.xHigh, s.yLow,0));
        points1.push_back(S2Point(s.xHigh, s.yHigh,0));
        points1.push_back(S2Point(s.xLow, s.yHigh,0));
        S2Polygon a(make_unique<S2Loop>(points1));
    

    I do not use .Normalize() as my points are already normalized. I get the following error ERROR Edge 1 crosses edge 3. I believe that this is caused because S2Loop creates the full loop and connects every point with every other.

    Question 1: Is it possible to connect only the 4 points I give in that order?

    Following the recommendations given at the S2Loop manual, I then tried S2Builder. I had the same error as before when I was using S2Loop. I somehow managed to bypass it using S2Polyline and here comes

    Question 2: How can I use S2Builder to check for intersection?

    I found no documentation regarding S2Builder, even though it is recommended for unsorted collection of edges. As a result, all my efforts are based on reading tests from the source code and trying to adapt the methods to my problem.

    opened by DinosL 11
  • Remove

    Remove "using std::string" from port.h.

    Exposing the "using" directive in the port header will cause it to be leaked into any codebase that uses this library. While it is possible to just fix up the headers and use the directive only in the source files, this change uses std::string everywhere.

    opened by gregcoombe 11
  • compilation error because of deprecated BIGNUM functions in openssl 1.1

    compilation error because of deprecated BIGNUM functions in openssl 1.1

    as of 8a8746c7f4d4c53e8561e78e6ca380e8d4a0b9d3

    compilation is failing on Arch because of openssl 1.1:

    In file included from /home/akh/tmp/s2geometry/src/s2/s2predicates_internal.h:29:0,
                     from /home/akh/tmp/s2geometry/src/s2/s2edge_crossings.cc:28:
    /home/akh/tmp/s2geometry/src/s2/util/math/exactfloat/exactfloat.h:516:10: error: field ‘bn_’ has incomplete type ‘BIGNUM {aka bignum_st}’
       BIGNUM bn_;
              ^~~
    In file included from /usr/include/openssl/bn.h:32:0,
                     from /home/akh/tmp/s2geometry/src/s2/util/math/exactfloat/exactfloat.h:119,
                     from /home/akh/tmp/s2geometry/src/s2/s2predicates_internal.h:29,
                     from /home/akh/tmp/s2geometry/src/s2/s2edge_crossings.cc:28:
    /usr/include/openssl/ossl_typ.h:80:16: note: forward declaration of ‘BIGNUM {aka struct bignum_st}’
     typedef struct bignum_st BIGNUM;
                    ^~~~~~~~~
    In file included from /home/akh/tmp/s2geometry/src/s2/s2predicates_internal.h:29:0,
                     from /home/akh/tmp/s2geometry/src/s2/s2edge_crossings.cc:28:
    /home/akh/tmp/s2geometry/src/s2/util/math/exactfloat/exactfloat.h: In constructor ‘ExactFloat::ExactFloat()’:
    /home/akh/tmp/s2geometry/src/s2/util/math/exactfloat/exactfloat.h:576:3: error: ‘BN_init’ was not declared in this scope
       BN_init(&bn_);
       ^~~~~~~
    /home/akh/tmp/s2geometry/src/s2/util/math/exactfloat/exactfloat.h:576:3: note: suggested alternative: ‘BN_print’
       BN_init(&bn_);
       ^~~~~~~
       BN_print
    make[2]: *** [CMakeFiles/s2.dir/build.make:879: CMakeFiles/s2.dir/src/s2/s2edge_crossings.cc.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/s2.dir/all] Error 2
    make: *** [Makefile:130: all] Error 2
    
    

    BN_init() was removed in OpenSSL 1.1.0; use BN_new() instead. source https://www.openssl.org/docs/man1.1.0/crypto/BN_new.html

    Solution for Arch is: cmake -DOPENSSL_INCLUDE_DIR="/usr/include/openssl-1.0" -DOPENSSL_SSL_LIBRARY=/usr/lib/openssl-1.0/libssl.so ..

    It will become an issue for every distribution with recent openssl.

    opened by akhenakh 11
  • Please make a new release 0.10 (and tag it)

    Please make a new release 0.10 (and tag it)

    I would love to package libs2 for Debian (in fact I have a local packaging repo at at https://salsa.debian.org/Mobian-team/puremaps-packaging/s2geometry-deb), but would love to package a nice reference release, instead of a random commit hash. The last formal release is 2 years ago, libs2 already announces itself as 0.10.0 to the world, so can we make a release please?

    Would be appreciated, and thanks for s2geometry!

    opened by spaetz 9
  • Improve portability and reduce warnings

    Improve portability and reduce warnings

    We've been working on integrating S2 into our project for a little while, and we've found a few issues with portability (especially compiling on Windows), and with some extraneous compile warnings (e.g. with gcc-7.2). This PR contains a mish-mash of small changes to address these concerns, hopefully in a way that can benefit everyone.

    opened by dhly-etc 9
  • Cannot find load file error on cmake

    Cannot find load file error on cmake

    Hi, I am trying to cmake s2 using the following command, cmake -DWITH_GFLAGS=ON -WITH_GTEST=ON \ -DGTEST_ROOT=/usr/src/gtest \ -DOPENSSL_INCLUDE_DIR=/usr/include/openssl -Dabsl_DIR=/home/vidhi/Documents/BII/abseil/Source/abseil-cpp/build -DWITH_PYTHON=ON ..

    I get this error on running the command, -- The following features have been enabled:

    • GFLAGS, allows changing command line flags.
    • GLOG, provides logging configurability.
    • SHARED_LIBS, builds shared libraries instead of static.
    • PYTHON, provides python interface to S2

    CMake Error at /home/vidhi/Documents/BII/abseil/Source/abseil-cpp/build/abslConfig.cmake:32 (include): include could not find load file:

    /home/vidhi/Documents/BII/abseil/Source/abseil-cpp/build/abslTargets.cmake
    

    Call Stack (most recent call first): CMakeLists.txt:74 (find_package)

    I have abseil build and installed following the instructions from here https://abseil.io/docs/cpp/quickstart-cmake. But I cannot find this abslTargets.cmake file anywhere. What did I miss?

    opened by elixir-1 8
  • Update to latest google3 version

    Update to latest google3 version

    • Require C++14 instead of C++11 (abseil-cpp requires it now)
    • Require googletest >= 1.10 (for gmock)
      • Location is now specified with -DGOOGLETEST_ROOT
    • New classes:
      • S2CellIterator
      • S2CellIteratorJoin
      • S2Coder
    • New StableAngle function
    • Delete many deprecated functions
    • S2Point is now a different class from Vector3_d, not a typedeffor it

    Fixes #259, #280, #295.

    opened by jmr 1
  • Improvements

    Improvements

    opened by MBkkt 3
  • Points only optimization doesn't exist for indexing

    Points only optimization doesn't exist for indexing

    https://github.com/google/s2geometry/blob/master/src/s2/s2region_term_indexer.cc#L213

    It looks like same possible for index terms, am I right?

    Why do I need other terms (not true_max_level) if query contains only points?

    opened by MBkkt 6
  • Build warning: s2winding_operation.cc:413:1: warning: control reaches end of non-void function

    Build warning: s2winding_operation.cc:413:1: warning: control reaches end of non-void function

    Compiler warns about

    /<<PKGBUILDDIR>>/src/s2/s2winding_operation.cc: In member function ‘bool s2builderutil::WindingLayer::MatchesRule(int) const’:
    /<<PKGBUILDDIR>>/src/s2/s2winding_operation.cc:413:1: warning: control reaches end of non-void function [-Wreturn-type]
      413 | }
          | ^
    
    bool WindingLayer::MatchesRule(int winding) const {
      switch (op_.rule_) {
        case WindingRule::POSITIVE:  return winding > 0;
        case WindingRule::NEGATIVE:  return winding < 0;
        case WindingRule::NON_ZERO:  return winding != 0;
        case WindingRule::ODD:       return (winding & 1) != 0;
      }
    }
    
    

    And indeed, if winding were a different value than POS, NEG, ODD or NON_ZERO, we would return void, so a catchall return is needed to make the compiler happy. Perhaps return False if we fall through?

    opened by spaetz 4
  • fails to build on on ppc64el

    fails to build on on ppc64el

    Hi, s2geometry is in Debian, great. However, it fails to build on 2 architectures, and I have no clue what could be wrong, or how to fix it. (This is tag/v0.10.0, BTW)

    The Debian issue is at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1023961 pointing to the build protocol at: https://buildd.debian.org/status/fetch.php?pkg=s2geometry&arch=ppc64el&ver=0.10.0-2&stamp=1667081576&raw=0

    The relevant bit seems to be:

    /<<PKGBUILDDIR>>/src/s2/s2edge_crossings.cc: In instantiation of ‘bool S2::internal::GetStableCrossProd(const Vector3<T>&, const Vector3<T>&, Vector3<T>*) [with T = long double]’:
    /<<PKGBUILDDIR>>/src/s2/s2edge_crossings.cc:127:54:   required from here
    /<<PKGBUILDDIR>>/src/s2/s2edge_crossings.cc:115:31: error: ‘(6.15348059642740421245081038903225e-15l / 5.40431955284459475358983848622456e+16l)’ is not a constant expression
      115 |       (32 * kSqrt3 * DBL_ERR) /
          |       ~~~~~~~~~~~~~~~~~~~~~~~~^
      116 |       (kRobustCrossProdError.radians() / T_ERR - (1 + 2 * kSqrt3));
          |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /<<PKGBUILDDIR>>/src/s2/s2edge_crossings.cc: In instantiation of ‘bool S2::GetIntersectionSimple(const Vector3<T>&, const Vector3<T>&, const Vector3<T>&, const Vector3<T>&, Vector3<T>*) [with T = long double]’:
    /<<PKGBUILDDIR>>/src/s2/s2edge_crossings.cc:485:28:   required from here
    /<<PKGBUILDDIR>>/src/s2/s2edge_crossings.cc:458:10: error: ‘(1.2e+1l / 7.20575940379279305358983848622456e+16l)’ is not a constant expression
      458 |       12 / (kIntersectionError.radians() / T_ERR - (2 + 2 * kSqrt3));
          |       ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    make[3]: *** [CMakeFiles/s2.dir/build.make:653: CMakeFiles/s2.dir/src/s2/s2edge_crossings.cc.o] Error 1
    
    
    opened by spaetz 5
Releases(v0.10.0)
  • v0.10.0(Apr 8, 2022)

    • Add new files
      • s2buffer_operation
      • s2builderutil_get_snapped_winding_delta
      • s2builderutil_lax_polyline_layer
      • s2memory_tracker
      • s2shapeutil_conversion
      • s2winding_operation
      • s2wrapped_shape
      • thread_testing
    • Expose some new functions in pywraps2
    • Remove internal absl; depend on released absl
    • Require SWIG 4
    • Remove internal files that are no longer needed
    • Improved documentation of EncodedS2ShapeIndex
    • Fix accidental dependence on gtest even when not enabled.
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0-2022.02.23.00(Feb 23, 2022)

    • Add new files
      • s2buffer_operation
      • s2builderutil_get_snapped_winding_delta
      • s2builderutil_lax_polyline_layer
      • s2memory_tracker
      • s2shapeutil_conversion
      • s2winding_operation
      • s2wrapped_shape
      • thread_testing
    • Expose some new functions in pywraps2
    • Remove internal absl; depend on released absl
    • Require SWIG 4
    • Remove internal files that are no longer needed
    • Improved documentation of EncodedS2ShapeIndex
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Mar 5, 2019)

  • v0.9.0-2019.03.04.00(Mar 4, 2019)

  • v0.9.0-2019.03.01.00(Mar 1, 2019)

    Changes since v0.9.0-2019.02.11.00:

    New functionality:

    • Add S2ShapeIndex Dump function
    • Add Init to Graph nested classes
    • S2Polygon::InitToOperation: Propagate S2Error

    Bug fixes:

    • Fix S2BooleanOperation empty/full handling
    • Minor compilation fixes for nacl
    • Fix LaxPolygonLayer bug
    • Fix rare bug in S2BooleanOperation
    • Fix rare bug in VisitCrossingEdgePairs
    • Fix UB discovered by -D_GLIBCXX_DEBUG
    • S2Cap::Add: Fix bug with empty other cap
    • OwningShape: Fix potential memory leak
    • S2Builder: Clear layer_is_full_polygon_predicates_
    • S2EdgeTesselator: Improve error estimation
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0-2019.02.11.00(Feb 11, 2019)

Owner
Google
Google ❤️ Open Source
Google
Interactive, thoroughly customizable maps in native Android, iOS, macOS, Node.js, and Qt applications, powered by vector tiles and OpenGL

Mapbox GL Native A C++ library that powers customizable vector maps in native applications on multiple platforms by taking stylesheets that conform to

Mapbox 4.2k Jan 6, 2023
C++ implementation of R*-tree, an MVR-tree and a TPR-tree with C API

libspatialindex Author: Marios Hadjieleftheriou Contact: [email protected] Revision: 1.9.3 Date: 10/23/2019 See http://libspatialindex.org for full doc

null 633 Dec 28, 2022
2D and 3D map renderer using OpenGL ES

Tangram ES Tangram ES is a C++ library for rendering 2D and 3D maps from vector data using OpenGL ES. It is a counterpart to Tangram. This repository

Tangram 750 Jan 1, 2023
Terrain Analysis Using Digital Elevation Models (TauDEM) software for hydrologic terrain analysis and channel network extraction.

TauDEM (Terrain Analysis Using Digital Elevation Models) is a suite of Digital Elevation Model (DEM) tools for the extraction and analysis of hydrolog

David Tarboton 191 Dec 28, 2022
Alternative LAZ implementation for C++ and JavaScript

What is this? Alternative LAZ implementation. It supports compilation and usage in JavaScript, usage in database contexts such as pgpointcloud and Ora

Howard Butler 55 Oct 25, 2022
A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. 📷

An open source command line toolkit for processing aerial drone imagery. ODM turns simple 2D images into: Classified Point Clouds 3D Textured Models G

OpenDroneMap 3.9k Jan 6, 2023
A C++17 image representation, processing and I/O library.

Selene Selene is a C++17 image representation, processing, and I/O library, focusing on ease of use and a clean, modern, type-safe API. Overview: Brie

Michael Hofmann 286 Oct 26, 2022
A fast algorithm for finding the pole of inaccessibility of a polygon (in JavaScript and C++)

A fast algorithm for finding polygon pole of inaccessibility, the most distant internal point from the polygon outline (not to be confused with centroid), implemented as a JavaScript library. Useful for optimal placement of a text label on a polygon.

Mapbox 1.2k Jan 6, 2023
A lean, efficient, accurate geohash encoder and decoder library implemented in C

Geohash encoder/decoder in C A lean, efficient, accurate geohash encoder and decoder library implemented in C. It does not depend on the C standard li

Christopher Wellons 20 Nov 20, 2022
A library of distance and occlusion generation routines

Distance/Occlusion Library + Tool From left to right: original, signed distance with zero at 0.5, red/green SDF, delta vectors to closest boundary poi

Andrew Willmott 105 Nov 2, 2022
Wykobi is an efficient, robust and simple to use multi-platform 2D/3D computational geometry library.

Description Wykobi is an efficient, robust and simple to use multi-platform 2D/3D computational geometry library. Wykobi provides a concise, predictab

Arash Partow 131 Oct 24, 2022
Experimental 'RTree' Spatial Indexing

rtree The goal of rtree is to experiment with a few different types of spatial indexes at a pretty low level. Installation You can install the develop

Dewey Dunnington 6 May 20, 2022
✔️The smallest header-only GUI library(4 KLOC) for all platforms

Welcome to GUI-lite The smallest header-only GUI library (4 KLOC) for all platforms. 中文 Lightweight ✂️ Small: 4,000+ lines of C++ code, zero dependenc

null 6.6k Jan 8, 2023
GlueGD is a mod loader for Geometry Dash that does not require a modification to any existing Geometry Dash files or an external injector or launcher.

GlueGD is a mod loader for Geometry Dash that does not require a modification to any existing Geometry Dash files or an external injector or la

Aly Cerruti 9 Apr 10, 2022
graphics and computational physics framework

atto Graphics and computational physics research framework: aligned memory allocation, string manipulation, file IO, etc. 2-, 3- and 4-dimensional vec

Carlos Correia 0 Jul 24, 2022
OpenFOAM is a free, open source computational fluid dynamics (CFD) software package

acousticStreamingFoam About OpenFOAM OpenFOAM is a free, open source computational fluid dynamics (CFD) software package released by the OpenFOAM Foun

Bruno 3 Oct 28, 2022
RediSearch is a Redis module that provides querying, secondary indexing, and full-text search for Redis.

A query and indexing engine for Redis, providing secondary indexing, full-text search, and aggregations.

null 4k Jan 5, 2023
Slow5tools is a toolkit for converting (FAST5 <-> SLOW5), compressing, viewing, indexing and manipulating data in SLOW5 format.

slow5tools Slow5tools is a simple toolkit for converting (FAST5 <-> SLOW5), compressing, viewing, indexing and manipulating data in SLOW5 format. Abou

Hasindu Gamaarachchi 57 Dec 2, 2022
network packet indexing and querying

_______ _____.___. ________ _____ _____ \ \\__ | |/ _____/ / \ / _ \ / | \/ | / \ ___ / \ / \ / /_\

64k & stackless-goto 18 Dec 15, 2021
Hexagonal hierarchical geospatial indexing system

H3: A Hexagonal Hierarchical Geospatial Indexing System H3 is a geospatial indexing system using a hexagonal grid that can be (approximately) subdivid

Uber Open Source 3.8k Dec 30, 2022