BlondeBurrito / hexagonal_pathfinding_astar

An implementation of the A-Star pathfinding algorithm tailored for traversing a bespoke collection of weighted hexagons. It's intended to calculate the most optimal path to a target hexagon where you are traversing from the centre of one hexagon to the next along a line orthogonal to a hexagon edge
Other
20 stars 1 forks source link

Support spiral coordinates #13

Open virtualritz opened 2 years ago

virtualritz commented 2 years ago

See the hex-spiral crate.

Stack Exchange

BlondeBurrito commented 2 years ago

Hey, thanks for the issue, it looks very interesting managing the coordinate conversion and neighbour hex discovery. I'll dig into it over the weekend and think about what can be done

virtualritz commented 2 years ago

Awesome.

I think the original idea is from Paul Bourke. He calls it a Spiral Honeycomb Mosaic (SHM).

See his Tiling on The Plane page. Scroll down to the section titled Hexagonal Lattice (contains links to source code with coordinate conversions).

BlondeBurrito commented 2 years ago

Just to let you know the next feature version will have a form of SHM, I don't think it's feasible to have "spikey" spirals so there must be a set number of rings around the origin. Something like if a giant letter P was made of hexagons I can't think of way to safe guard the bottom sticking out in neighbour discovery, so the implementation will be very similar to axial/cubic geometry where it's a circular grid. Once I push it up I'll tag you on the PR to see if it's what you expect if that's ok?

Once that makes 1.1.0 I'll very shortly after be releasing 2.0.0 to handle an edge case across all the coordinate systems which does mean the overall return type will become an Option<Vec<(i32, i32)>> rather than the current Vec<(i32, i32)> where None means there's no path based on #12. Just as an FYI in case you're wanting to use this for something

virtualritz commented 2 years ago

Very cool! Let me know when there is something in the repo to test. :)

ljedrz commented 2 years ago

I think the original idea is from Paul Bourke. He calls it a Spiral Honeycomb Mosaic (SHM).

For the record, I came up with the spiral coordinates in hex-spiral without any existing influences (though it's quite simple, so it's likely to have existed as a concept already), and the coordinates in Spiral Honeycomb Mosaic seem to work differently at first glance.

virtualritz commented 2 years ago

I think the original idea is from Paul Bourke. He calls it a Spiral Honeycomb Mosaic (SHM).

For the record, I came up with the spiral coordinates in hex-spiral without any existing influences (though it's quite simple, so it's likely to have existed as a concept already), and the coordinates in Spiral Honeycomb Mosaic seem to work differently at first glance.

They do indeed. My bad. And since there is no Rust crate that supports SHM at all I would ask @BlondeBurrito to use hex-spiral as a testbed for the spiral a-star pathfinding being added to this crate.

virtualritz commented 1 year ago

Just to let you know the next feature version will have a form of SHM, [...]

Is there any update on this or code that can be tested?

BlondeBurrito commented 1 year ago

Hey, please accept my apologies, in truth I forgot about this - I reached a point of burnout with work and haven't had the energy to hobby code very much.

I've tidied up what I did and raised PR #15 which introduces Spiral Hex based coordinates in the style of @ljedrz. Tests are passing. The coordinate style in the works of Paul Bourke making use of clusters of hexagons with a base7 numbering system proved too hard really but hopefully this is still useful. Most of it boils down to converting Spiral Hex coords into Cubic coords as they're a bit easier to work with.

Let me know what you think and once merged I'll tag it and publish a new crate version