Documentation ¶
Overview ¶
Package hilbert is for mapping values to and from space-filling curves, such as Hilbert and Peano curves.
Example ¶
package main import ( "fmt" "github.com/google/hilbert" ) func main() { // Create a Hilbert curve for mapping to and from a 16 by 16 space. s, _ := hilbert.NewHilbert(16) // Create a Peano curve for mapping to and from a 27 by 27 space. //s, _ := hilbert.NewPeano(27) // Now map one dimension numbers in the range [0, N*N-1], to an x,y // coordinate on the curve where both x and y are in the range [0, N-1]. x, y, _ := s.Map(96) // Also map back from (x,y) to t. t, _ := s.MapInverse(x, y) fmt.Printf("x = %d, y = %d, t = %d\n", x, y, t) }
Output: x = 4, y = 12, t = 96
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrNotPositive = errors.New("N must be greater than zero") ErrNotPowerOfTwo = errors.New("N must be a power of two") ErrNotPowerOfThree = errors.New("N must be a power of three") ErrOutOfRange = errors.New("value is out of range") )
Errors returned when validating input.
Functions ¶
This section is empty.
Types ¶
type Hilbert ¶
type Hilbert struct { N int // contains filtered or unexported fields }
Hilbert represents a 2D Hilbert space of order N for mapping to and from. Implements SpaceFilling interface.
func NewHilbert ¶
NewHilbert returns a Hilbert space which maps integers to and from the curve. n must be a power of two. If verticalCompatible is true, the Hilbert curve will be rotated 90 degrees and rotated around the Y-axis. In other words instead of the Hilbert curve representing the shaper of the letter U, it will look like a backwards letter C. This allows multiple square Hilbert curves to be vertically stacked and maintain the Hilbert locality property.
func (*Hilbert) GetDimensions ¶
GetDimensions returns the width and height of the 2D space.
type Peano ¶
type Peano struct {
N int // Always a power of three, and is the width/height of the space.
}
Peano represents a 2D Peano curve of order N for mapping to and from. Implements SpaceFilling interface.
func NewPeano ¶
NewPeano returns a new Peano space filling curve which maps integers to and from the curve. n must be a power of three.
func (*Peano) GetDimensions ¶
GetDimensions returns the width and height of the 2D space.
type SpaceFilling ¶
type SpaceFilling interface { // Map transforms a one dimension value, t, in the range [0, n^2-1] to coordinates on the // curve in the two-dimension space, where x and y are within [0,n-1]. Map(t int) (x, y int, err error) // MapInverse transform coordinates on the curve from (x,y) to t. MapInverse(x, y int) (t int, err error) // GetDimensions returns the width and height of the 2D space. GetDimensions() (x, y int) }
SpaceFilling represents a space-filling curve that can map points from one dimensions to two.