Tatooine
ray.h
Go to the documentation of this file.
1#ifndef TATOOINE_RAY_H
2#define TATOOINE_RAY_H
3//==============================================================================
4#include <tatooine/tensor.h>
5#include <tatooine/concepts.h>
6//==============================================================================
7namespace tatooine {
8//==============================================================================
9template <typename Real, size_t N>
10struct ray {
11 static_assert(is_floating_point<Real>);
12 template <typename OtherReal, size_t OtherN>
13 friend struct ray;
15 using pos_type = vec_t;
16 //============================================================================
17 private:
20 //============================================================================
21 public:
22 ray(ray const&) = default;
23 ray(ray&&) noexcept = default;
24 //----------------------------------------------------------------------------
25 template <floating_point OtherReal>
26 ray(ray<OtherReal, N> const& other)
27 : m_origin{other.m_origin}, m_direction{other.m_direction} {}
28 //----------------------------------------------------------------------------
29 ray& operator=(ray const&) = default;
30 ray& operator=(ray&&) noexcept = default;
31 //----------------------------------------------------------------------------
35 : m_origin{std::move(origin)}, m_direction{direction} {}
37 : m_origin{origin}, m_direction{std::move(direction)} {}
39 : m_origin{std::move(origin)}, m_direction{std::move(direction)} {}
40 //============================================================================
41 auto origin() -> auto& {
42 return m_origin;
43 }
44 auto origin() const -> auto const& {
45 return m_origin;
46 }
47 auto origin(size_t i) -> auto& {
48 return m_origin(i);
49 }
50 auto origin(size_t i) const {
51 return m_origin(i);
52 }
53 //----------------------------------------------------------------------------
54 auto direction() -> auto& {
55 return m_direction;
56 }
57 auto direction() const -> auto const& {
58 return m_direction;
59 }
60 auto direction(size_t i) -> auto& {
61 return m_direction(i);
62 }
63 auto direction(size_t i) const {
64 return m_direction(i);
65 }
66 //----------------------------------------------------------------------------
67 [[nodiscard]] auto operator()(Real t) const {
68 return at(t);
69 }
70 [[nodiscard]] auto at(Real t) const {
71 return m_origin + m_direction * t;
72 }
73 //----------------------------------------------------------------------------
74 void normalize() {
76 }
77};
78//==============================================================================
79} // namespace tatooine
80//==============================================================================
81#endif
Definition: concepts.h:30
Definition: algorithm.h:6
constexpr auto normalize(base_tensor< Tensor, T, N > const &t_in) -> vec< T, N >
Definition: tensor_operations.h:100
Definition: ray.h:10
void normalize()
Definition: ray.h:74
auto direction() -> auto &
Definition: ray.h:54
auto origin() const -> auto const &
Definition: ray.h:44
pos_type m_origin
Definition: ray.h:18
ray(pos_type const &origin, vec_t &&direction)
Definition: ray.h:36
ray(pos_type &&origin, vec_t const &direction)
Definition: ray.h:34
ray & operator=(ray &&) noexcept=default
auto direction(size_t i) const
Definition: ray.h:63
ray & operator=(ray const &)=default
ray(pos_type &&origin, vec_t &&direction)
Definition: ray.h:38
auto origin(size_t i) -> auto &
Definition: ray.h:47
auto direction(size_t i) -> auto &
Definition: ray.h:60
auto operator()(Real t) const
Definition: ray.h:67
ray(ray &&) noexcept=default
auto origin() -> auto &
Definition: ray.h:41
auto direction() const -> auto const &
Definition: ray.h:57
ray(ray const &)=default
auto at(Real t) const
Definition: ray.h:70
vec< Real, N > vec_t
Definition: ray.h:14
vec_t m_direction
Definition: ray.h:19
auto origin(size_t i) const
Definition: ray.h:50