binaryimage/hilbertcurve.go
xoy f710ed8451 [Rendering of binary files]
Ways to render:

- Hilbert Curve
- Snake
2025-02-24 01:05:36 +01:00

54 lines
813 B
Go

package main
type HilbertCurve struct {
order int
curve *Matrix
}
func NewHilbertCurve() *HilbertCurve {
h := &HilbertCurve{
curve: NewMatrix(2, 2),
}
h.curve.Set(0, 0, 1)
h.curve.Set(0, 1, 0)
h.curve.Set(1, 0, 2)
h.curve.Set(1, 1, 3)
return h
}
func (h *HilbertCurve) ToString() string {
return h.curve.ToString()
}
func (h *HilbertCurve) Length() int {
return h.curve.width * h.curve.height
}
func (h *HilbertCurve) Expand() {
length := h.Length()
m3 := h.curve.Transpose()
m0 := m3.Mirror()
m3.Add(3 * length)
h.curve.Add(length)
m2 := h.curve.Clone()
m2.Add(length)
bottom := m0.MergeRight(m3)
h.curve = h.curve.MergeRight(m2).MergeBottom(bottom)
h.order++
}
func (h *HilbertCurve) Order() int {
return h.order
}
func (h *HilbertCurve) Get() *Matrix {
return h.curve
}