https://github.com/msokalski/delabella
2D Delaunay triangulation (dela) - super stable (bella!)
https://github.com/msokalski/delabella
Last synced: 14 days ago
JSON representation
2D Delaunay triangulation (dela) - super stable (bella!)
- Host: GitHub
- URL: https://github.com/msokalski/delabella
- Owner: msokalski
- License: other
- Created: 2018-07-18T16:22:01.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-02-13T17:22:01.000Z (about 1 year ago)
- Last Synced: 2024-11-02T20:31:52.183Z (5 months ago)
- Language: C++
- Size: 10.3 MB
- Stars: 223
- Watchers: 11
- Forks: 26
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-game-engine-dev - Delabella - Super stable 2D delaunay triangulation. (Libraries / C++)
- AwesomeCppGameDev - delabella - super stable (bella!) (Maths)
README
# DelaBella
## 2D Exact Delaunay triangulation- Bunch of credits must go to David for inventing such beautiful algorithm (Newton Apple Wrapper):
http://www.s-hull.org/
- It is pretty well described in this paper:
https://arxiv.org/ftp/arxiv/papers/1602/1602.04707.pdf
- Currently DelaBella makes use of adaptive-exact predicates by William C. Lenthe
https://github.com/wlenthe/GeometricPredicates
## What you can do with DelaBella?- Delaunay triangulations

- Voronoi diagrams

- Constrained Delaunay triangulations

- Interior / exterior detection based on constraint edges

## Minimalistic DelaBella usage:
```cpp
#include "delabella.h"
// ...// somewhere in your code ...
int POINTS = 1000000;
typedef double MyCoord;
struct MyPoint
{
MyCoord x;
MyCoord y;
// ...
};MyPoint* cloud = new MyPoint[POINTS];
srand(36341);
// gen some random input
for (int i = 0; i < POINTS; i++)
{
cloud[i].x = rand();
cloud[i].y = rand();
}IDelaBella2* idb = IDelaBella2::Create();
int verts = idb->Triangulate(POINTS, &cloud->x, &cloud->y, sizeof(MyPoint));
// if positive, all ok
if (verts>0)
{
int tris = idb->GetNumPolygons();
const IDelaBella2::Simplex* dela = idb->GetFirstDelaunaySimplex();
for (int i = 0; inext;
}
}
else
{
// no points given or all points are colinear
// make emergency call ...
}delete[] cloud;
idb->Destroy();// ...
```
## On the go progress information for all lengthy functions

## Benchmarks

For more tests and informations please see [Benchmarks](./bench/bench.md)