mirror of
https://github.com/gonum/gonum.git
synced 2025-10-08 00:20:11 +08:00
39 lines
1.9 KiB
Go
39 lines
1.9 KiB
Go
// Copyright ©2024 The Gonum Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package curve defines space filling curves. A space filling curve is a curve
|
|
// whose range contains the entirety of a finite k-dimensional space. Space
|
|
// filling curves can be used to map between a linear space and a 2D, 3D, or 4D
|
|
// space.
|
|
//
|
|
// # Hilbert Curves
|
|
//
|
|
// The Hilbert curve is a continuous, space filling curve first described by
|
|
// David Hilbert. The implementation of Hilbert2D is based on example code from
|
|
// the [Hilbert curve (Wikipedia)]. The implementation of Hilbert3D and
|
|
// Hilbert4D are extrapolated from Hilbert2D.
|
|
//
|
|
// Technically, a Hilbert curve is a continuous, fractal, space-filling curve of
|
|
// infinite length, constructed as the limit of a series of piecewise linear
|
|
// curves. We refer to the kth piecewise linear curve as the k-order Hilbert
|
|
// curve. The first-order 2D Hilbert curve looks like ⊐. The k-order
|
|
// n-dimensional curve can be constructed from 2ⁿ copies of the (k-1) order
|
|
// curve. These (finite) Hilbert curves are iterative/recursive, and the order
|
|
// refers to the iteration number.
|
|
//
|
|
// The runtime of Space and Curve scales as O(n∙k) where n is the dimension and
|
|
// k is the order. The length of the curve is 2^(n∙k).
|
|
//
|
|
// # Limitations
|
|
//
|
|
// An n-dimensional, k-order Hilbert curve will not be fully usable if 2ⁿᵏ
|
|
// overflows int (which is dependent on architecture). Len will overflow if n∙k
|
|
// ≥ bits.UintSize-1. Curve will overflow if n∙k > bits.UintSize-1 for some
|
|
// values of v. Space will not overflow, but it cannot be called with values
|
|
// that do not fit in a signed integer, thus only a subset of the curve can be
|
|
// utilized.
|
|
//
|
|
// [Hilbert curve (Wikipedia)]: https://en.wikipedia.org/w/index.php?title=Hilbert_curve&oldid=1011599190
|
|
package curve
|