#pragma once #include "Vector.hpp" namespace Math { struct GridCellBoundaries { float 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_for_point(Vector<2> point); struct CubeCellBoundaries { float 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_for_point(Vector<3> point); }