Fork me on GitHub

Computational geometry, in pure Go.
Exact predicates first, then everything built on them.

go-geometry is planned (wave 2 of the go-scikit roadmap): robust geometric predicates, convex hulls, Delaunay and Voronoi, k-d trees and mesh generation, validated against the tools that are the reference in the domain. No repository holds code yet.

planned (wave 2)4 packages in the planCGO=0 pure Go
status
status    planned (wave 2)
package   predicates (wave 2)
package   hull (wave 2)
package   nearest (wave 2)
package   meshgen (wave 3)
plan      github.com/go-scikit/roadmap
2 repositories โ€” no library yet: planned, wave 2
What it will cover

Scope: robust predicates, convex hulls, Delaunay, Voronoi, k-d trees, mesh generation.

Nothing here is released. This is the scope of the plan, as PLAN.md states it: item 7 of wave 2 (exact predicates, Quickhull, Delaunay, Voronoi, alpha shapes, k-d trees) and, in wave 3, item 13 (meshing).

โˆŽ

Exact predicates

Adaptive-precision orient2d, orient3d, incircle and insphere: the exact sign at close to floating-point cost. Planned first, because every other item silently builds invalid topology without them.

โ–ณ

Hulls, Delaunay, Voronoi

Quickhull in n dimensions, Delaunay triangulations in 2D and 3D, Voronoi diagrams and alpha shapes: the MATLAB convhull, delaunay, voronoi and alphaShape surface.

โŒ–

Nearest neighbours

k-d trees with exact neighbour search and a MATLAB-style knnsearch, adopting gonum's trees rather than rewriting them.

โ–ฆ

Mesh generation

Constrained Delaunay triangulation with Ruppert refinement in 2D, then 3D, in wave 3: the meshes go-fem solves on.

๐ŸŽฏ

Robust by construction

Hulls and triangulations are never shipped before the predicates they depend on, and are validated with the exact predicates, not with floating-point ones.

โš–๏ธ

Licences kept clean

Triangle, TetGen, CGAL and Gmsh are oracles only, run as external programs; nothing of them is ported.

What will be checked

4 kinds of check, each against the reference tool of the domain.

Every item of the plan is validated against the tools that are the reference in its domain, driven as oracles from Go. These are plans, taken from the roadmap's bibliography; no result exists yet.

Predicates against exact arithmetic

The sign of every predicate is compared with big.Rat arithmetic on random and near-degenerate input: zero mismatches allowed. (planned)

Combinatorial validity

Euler relation and the empty-circumsphere test with exact predicates; vertex sets equal to SciPy’s (Qhull) up to legitimate degeneracies. (planned)

Exact nearest neighbours

Index sets equal to brute force, ties broken by index, and to scipy.spatial.cKDTree. (planned)

Mesh quality

Minimum angle, aspect-ratio distribution and area conservation, reported as distributions and not only as a minimum. (planned)

Repositories and packages

What is here, and what is planned.

docs

site

The documentation (Hugo + Hextra): the scope, the plan and one page per planned package, with its references. Source โ†’

brand

assets

Logos and icons for the organization, in SVG / PNG / JPG / ICO / ICNS across colour, white and black variants.

predicates

planned (wave 2)

Exact geometric predicates at near floating-point cost. No repository yet; the name is a working name.

hull

planned (wave 2)

Convex hulls, Delaunay triangulations, Voronoi diagrams and alpha shapes. No repository yet; the name is a working name.

nearest

planned (wave 2)

k-d trees and exact nearest-neighbour search. No repository yet; the name is a working name.

meshgen

planned (wave 3)

Constrained Delaunay triangulation and quality mesh generation, 2D then 3D. No repository yet; the name is a working name.

Planned, in the open.

The plan and its progress are public: PLAN.md says what each domain covers and in which wave, STATUS.md says where each item stands. The documentation describes the planned packages and the references they will be validated against.

See the organization on GitHub โ†’