summary refs log tree commit diff
path: root/src/Math/Grid.hpp
blob: e2a50519dc66007b0a3dc33bf20ab8103f28283a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#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));

}