https://github.com/michaco/earcut
Fast and robust ear-clipping polygon triangulation library for .NET 8+.
https://github.com/michaco/earcut
Last synced: 4 months ago
JSON representation
Fast and robust ear-clipping polygon triangulation library for .NET 8+.
- Host: GitHub
- URL: https://github.com/michaco/earcut
- Owner: MichaCo
- License: mit
- Created: 2026-02-17T18:39:10.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-02-19T12:47:49.000Z (4 months ago)
- Last Synced: 2026-02-20T17:43:11.944Z (4 months ago)
- Language: C#
- Homepage:
- Size: 154 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Earcut.NET
[](https://github.com/MichaCo/Earcut/actions/workflows/ci-cd.yml)
[](https://www.nuget.org/packages/Earcut.NET)
A C# port of the [mapbox/earcut](https://github.com/mapbox/earcut) polygon triangulation library.
> **Note:** This is a 100% AI-driven port, created entirely by AI agents to demonstrate modern .NET development practices.
Fast and robust ear-clipping polygon triangulation library for .NET 8+.
## Features
- Fast polygon triangulation using ear-clipping algorithm
- Supports holes
- Zero-order curve spatial indexing for performance
- Modern C# implementation with .NET 8+ optimizations
- Uses ReadOnlySpan for zero-copy performance
## Installation
```
dotnet add package Earcut.NET
```
## Usage
```csharp
using EarcutDotNet;
// Simple triangle polygon (3 vertices)
double[] coords = [0, 0, 1, 0, 0.5, 1];
var triangles = Earcut.Triangulate(coords);
// triangles: [1, 0, 2] — indices into coords (each vertex is x,y pair)
// Square polygon (4 vertices) — produces 2 triangles
double[] square = [0, 0, 1, 0, 1, 1, 0, 1];
var squareTriangles = Earcut.Triangulate(square);
// squareTriangles: [3, 0, 1, 3, 1, 2]
// Polygon with a hole
double[] polyWithHole = [
0, 0, 10, 0, 10, 10, 0, 10, // outer ring (4 vertices)
2, 2, 2, 8, 8, 8, 8, 2, // hole ring (4 vertices, starting at vertex index 4)
];
int[] holeIndices = [4]; // hole starts at vertex index 4
var result = Earcut.Triangulate(polyWithHole, holeIndices);
// Optional: verify triangulation quality (deviation should be close to 0)
double deviation = Earcut.Deviation(polyWithHole, holeIndices, 2, result.ToArray());
```
### 3D coordinates
Pass `dim: 3` when your data contains x, y, z per vertex (only x and y are used for triangulation):
```csharp
using EarcutDotNet;
double[] coords3d = [0, 0, 1, 1, 0, 0, 0.5, 1, 0]; // x,y,z per vertex
var triangles = Earcut.Triangulate(coords3d, dim: 3);
```
## Building
```bash
dotnet build
```
## Testing
```bash
dotnet test
```
## Benchmarking
```bash
dotnet run -c Release --project bench/Earcut.Benchmarks
```
## License
MIT License