GithubHelp home page GithubHelp logo

mdsumner / decido Goto Github PK

View Code? Open in Web Editor NEW

This project forked from dcooley/decido

0.0 1.0 0.0 4.07 MB

Constrained polygon triangulation by 'ear cutting'

Home Page: https://hypertidy.github.io/decido

License: Other

R 27.99% C++ 70.74% C 1.27%

decido's Introduction

R build status R build status R build status lifecycle Travis-CI Build Status AppVeyor Build Status Coverage status CRAN RStudio mirror downloads CRAN status

decido

The goal of decido is to provide an R binding to the Mapbox library earcut.hpp for constrained polygon triangulation. Decido is aimed at package developers at the moment, there are not high-level classes or objects but the earcut functionality can be easily used in higher-level tools or just used directly.

Ear cutting (or ear clipping) applies constrained triangulation by successively ‘cutting’ triangles from a polygon defined by path/s. Holes are supported, the earcut library works with single-island-with-holes polygons, analogous to the POLYGON type in simple features.

This augments the Javascript version available in rearcut (also an R wrapper of the JS version by Mapbox). Only very minimal comparison testing has yet been done to compare these implementations.

Installation

Install the released version from CRAN.

## install.packages("remotes")
remotes::install_cran("decido")

You can install the development version from GitHub with the following code. You will need the set of development tools for building source packages with binary code.

## install.packages("devtools")
devtools::install_github("hypertidy/decido", build_vignettes = TRUE)

Example

This is a basic example of triangulating a single-ring polygon. The output is a vector of triplet indices defining each triangle.

library(decido)
x <- c(0, 0, 0.75, 1, 0.5, 0.8, 0.69)
y <- c(0, 1, 1, 0.8, 0.7, 0.6, 0)
earcut(cbind(x, y))
#>  [1] 2 1 7 7 6 5 5 4 3 2 7 5 5 3 2

See the documentation and vignette for more.

Open the getting started vignette.

vignette("decido", package = "decido")

Development

This is motivated by the topology aspirations of silicate. We need tools for decomposing shape data into primitives for analysis and visualization. Decomposition into graph types is already well supported and exercised, but triangulations of paths versus triangulations from edges are two key facilities needed for greater control.

This broader project is fairly well advanced in silicate which provides ear-cutting triangulations and enhanced with high-quality methods in hypertidy/anglr.

To triangulate sf polygons see function here. For high-quality triangulations of sf polygons directly see sfdct.

Other implementations

Ear clipping (or ear cutting) is also available in the rgl function triangulate (implemented in R), and in the lawn function lawn_tesselate (implemented via the Mapbox Javascript library earcut). In rgl the function also classifies input coordinates according to their nesting, a necessary first step if the relaionship between holes and islands is not known. The INLA package has some kind of constraint-based triangulation, but I don’t yet know the details.

In comparison to path-based ear-clipping, other libraries ‘Triangle’ and ‘CGAL’ provide edge-based mostly Delaunay triangulation. The Triangle library is available in the R package RTriangle and for (some) R spatial formats in sfdct. Experimental implementations binding CGAL are in rcgal and laridae.

Do you know of others? Let me know! Triangulation is common across many R packages, but constrained algorithms are pretty rare (it’s hard). There are many Delaunay and other non-constrained implementations in many packages, and I’m compiling a list of those as well. OTOH there’s rgeos, sf, deldir, geometry, tripack, spatstat, akima, several mesh-related packages Rvcg, meshsimp, icosa, webglobe …


Please note that the decido project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

decido's People

Contributors

mdsumner avatar dcooley avatar mpadge avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.