This is a Go library used to handle regular hexagons.
It's based on the algorithms described by Amit Patel in his wonderful guide to hexagons -- I highly recommend reading through that page.
Usage
Importing
import "github.com/falanger/hexgrid"
Examples
Creating hexagons
hexagonA := hexgrid.NewHex(1, 2) //at axial coordinates Q=1 R=2 hexagonB := hexgrid.NewHex(2, 3) //at axial coordinates Q=2 R=3
Measuring the distance (in hexagons) between one hexagon and another
distance := hexagonA.DistanceTo(hexagonB)
Getting the array of hexagons on the path between one hexagon and another
origin := hexgrid.NewHex(10,20) destination := hexgrid.NewHex(30,40) path := origin.LineDraw(destination)
Creating a layout
origin := hexgrid.Point{X: 0, Y: 0} // The coordinate that corresponds to the center of hexagon 0,0 size := hexgrid.Point{X: 100, Y: 100} // The length of an hexagon side => 100 layout: = hexgrid.Layout{Origin: origin, Size: size, Orientation: hexagon.OrientationFlat}
Obtaining the pixel that corresponds to a given hexagon
hex := hexgrid.NewHex(1,0) pixel := hexgrid.HexToPixel(layout,hex) // Pixel that corresponds to the center of hex 1,0 (in the given layout)
Obtaining the hexagon that contains the given pixel (and rounding it)
point := hexgrid.Point{X: 10, Y: 20} hex := PixelToHex(layout, point).Round()
History
- 1.0.0: Combining multiple forks
- 0.1.0: First version
Credits
- Pedro Sousa, for the intial repo.
- Igor Shmulyan, Brendan Le Glaunec, Sergey Kolunov, Puzzlemaker1, and Patrick Fay for their forks.
- And of course Amit Patel of Red Blob Games, without which we wouldn't have any of this.
License
MIT