#indices #2d #coordinates #index #2d-grid #matrix

wrapping_coords2d

Translate between 1D indices and 2D coordinates with wrapping

11 releases

0.1.10 May 7, 2022
0.1.9 Mar 7, 2020
0.1.8 Feb 25, 2020

#637 in Math

Apache-2.0

58KB
515 lines

wrapping_coords2d

Rust crate to translate between 1D indices and 2D coordinates with wrapping.

Crate Downloads Documentation License

Copyright © 2020-2022 Fabio A. Correa Duran facorread@gmail.com

Use WrappingCoords2d to store data from a 2D grid into a 1D container such as std::vec::Vec. Both x and y coordinates wrap around the limits of the grid. WrappingCoords2d is not a container; it is just a tool to manipulate indices. For a 2D container, see array2d. For coordinate translation without wrapping, see ameda.

WrappingCoords2d is useful to design cellular automata, agent-based models, and game worlds in 2D and 3D. You can use WrappingCoords2d as part of an Entity-Component-System (ECS) software architecture for high-performing models and flexible games. See my ABM project for an example.

See more examples in the documentation for the wrapping_coords2d crate.

FAQ

Why not create iterators to the neighbors of a cell?

Indices make more sense than iterators in an ECS design. It's generally more idiomatic to use a for loop with indices than iterator chains. If a game world or a model landscape has several components, such as color, depth, and fertility, it makes sense to keep each component in its own vector. The simplest approach is to use indices on them. However, I am open to a pull request contributing code for iterators into neighbors.

Does this crate use the unsafe keyword?

No.

No runtime deps