#pragma once #include "Vector.hpp" namespace Math { struct GridCellBoundaries { Real x1, x2, y1, y2; [[nodiscard]] Vector<2> top_left() const; [[nodiscard]] Vector<2> top_right() const; [[nodiscard]] Vector<2> bottom_left() const; [[nodiscard]] Vector<2> bottom_right() const; }; GridCellBoundaries grid_cell_containing_point(Vec2 point, Vec2 cell_size = Vec2(1.0)); GridCellBoundaries grid_cell_from_point(Vec2 point, Vec2 cell_size = Vec2(1.0)); struct CubeCellBoundaries { Real x1, x2, y1, y2, z1, z2; [[nodiscard]] Vector<3> front_top_left() const; [[nodiscard]] Vector<3> front_top_right() const; [[nodiscard]] Vector<3> front_bottom_left() const; [[nodiscard]] Vector<3> front_bottom_right() const; [[nodiscard]] Vector<3> back_top_left() const; [[nodiscard]] Vector<3> back_top_right() const; [[nodiscard]] Vector<3> back_bottom_left() const; [[nodiscard]] Vector<3> back_bottom_right() const; [[nodiscard]] GridCellBoundaries grid_cell() const; }; CubeCellBoundaries cube_cell_containing_point(Vec3 point, Vec3 cell_size = Vec3(1.0)); CubeCellBoundaries cube_cell_from_point(Vec3 point, Vec3 cell_size = Vec3(1.0)); }