Skip to content

Releases: morishuz/delaunay32

Delaunay32 0.7.0

Choose a tag to compare

@morishuz morishuz released this 14 Sep 11:15

This release improves numeric edge-case handling, internal modularity, sparse polygon sampling, and SVG construction.

Migration

  • Rebuild all consumers: Triangulator has a new binary layout. Public method
    signatures remain unchanged. Versioned CMake consumers should request 0.7.
  • Seeded sampling remains reproducible within this release, but sparse
    multi-domain sample sequences differ from earlier releases.

Added

  • Add delaunay_workload_benchmark for constraints, full results, SVG construction
    and serialization, and rectangular/disconnected polygon sampling.

Changed

  • Sample sparse polygon unions through area-weighted domain bounds, correcting
    for overlapping proposal boxes. Dense regions retain global rejection
    sampling. Seeds remain deterministic, but sparse multi-domain sequences change.
  • Store SVG path coordinates contiguously with ring offsets, removing per-triangle
    allocations while preserving serialized output.
  • Hide triangulation implementation details behind a private implementation,
    with dedicated edge-arena storage/allocation and grouped constraint workspace.
    Public method signatures are unchanged; consumers must rebuild because the
    Triangulator binary layout changed.
  • Share SVG geometry construction and polygon query traversal between integer
    and floating-point overloads, retaining their distinct arithmetic predicates.
  • Preserve the topology kernel's specialized merge loops and direct storage
    access; moved-from triangulators can be configured for a new problem.

Fixed

  • Blue-noise sampling falls back to linear neighbor queries when tiny bounds
    cannot support finite grid reciprocals, avoiding invalid integer conversions.
  • Automatic quantization rejects nonzero spans that require an infinite scale
    instead of returning an invalid mapping and zero error report.
  • Jittered polygon sampling computes ring areas relative to a local origin,
    preserving small domains translated to large coordinates.
  • Sampling rejects overflowing axis spans for bounds and polygon regions
    before they can produce non-finite random coordinates.

Validation

  • All 11 local Release tests passed with compiler warnings treated as errors.
  • Installed-package consumer and 0.6/0.7 compatibility checks passed.
  • Core-only shared-library build and full triangulation/workload benchmarks passed.
  • All six release-commit CI jobs passed: Linux, macOS, Windows, AddressSanitizer/UndefinedBehaviorSanitizer, ThreadSanitizer, and forced 64-bit predicates.

Performance depends on the workload; sparse-domain sample sequences have changed as described above.

Delaunay32 0.6.3

Choose a tag to compare

@morishuz morishuz released this 13 Sep 23:30

Delaunay32 0.6.3 improves performance and fixes correctness and recovery issues. The public API, result format, and C++17 requirement remain unchanged.

Improvements

  • Faster serial Morton sorting with fused radix histograms and fewer passes.
  • Faster parallel topology construction through reduced cache-line sharing and reuse of child hull extrema.
  • Spatial indexing accelerates validation of larger polygon boundaries.
  • Full-result export builds adjacency in triangle order and inlines face discovery without adding a scratch buffer.

Fixes

  • Polygon clipping correctly excludes regions separated by standalone constraints outside polygons or inside holes.
  • Edge-arena allocation failures leave triangulators safe to reset and retry.
  • Parallel allocation rejects blocks too small to hold a complete edge and uses the existing serial fallback.
  • JSON and SVG output use locale-independent numeric formatting.

Validation covers Linux, macOS, Windows, address/undefined-behavior and thread sanitizers, and forced 64-bit predicates. Regression tests also cover sparse full results, reuse after collinear input, and output-allocation failure recovery.