HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
line_segment.hpp
Go to the documentation of this file.
1// Copyright Take Vos 2021.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
9#pragma once
10
11#include "point3.hpp"
12#include "vector3.hpp"
13
14namespace hi {
15inline namespace v1 {
16
21public:
22 constexpr line_segment(line_segment const &) noexcept = default;
23 constexpr line_segment(line_segment &&) noexcept = default;
24 constexpr line_segment &operator=(line_segment const &) noexcept = default;
25 constexpr line_segment &operator=(line_segment &&) noexcept = default;
26
27 [[nodiscard]] constexpr line_segment(point3 p, vector3 v) noexcept : _p(p), _v(v) {}
28
29 [[nodiscard]] constexpr line_segment(point3 p0, point3 p1) noexcept : line_segment(p0, p1 - p0) {}
30
31 [[nodiscard]] constexpr point3 origin() const noexcept
32 {
33 return _p;
34 }
35
36 [[nodiscard]] constexpr vector3 direction() const noexcept
37 {
38 return _v;
39 }
40
41 [[nodiscard]] friend float hypot(line_segment const &rhs) noexcept
42 {
43 return hypot(rhs._v);
44 }
45
46 template<std::size_t I>
47 [[nodiscard]] constexpr friend point3 get(line_segment const &rhs) noexcept
48 {
49 if constexpr (I == 0) {
50 return rhs._p;
51 } else if constexpr (I == 1) {
52 return rhs._p + rhs._v;
53 } else {
55 }
56 }
57
58 [[nodiscard]] constexpr friend point3 midpoint(line_segment const &rhs) noexcept
59 {
60 return rhs._p + rhs._v * 0.5f;
61 }
62
63private:
64 point3 _p;
65 vector3 _v;
66};
67
68
69}}
70
#define hi_static_no_default(...)
This part of the code should not be reachable, unless a programming bug.
Definition assert.hpp:323
DOXYGEN BUG.
Definition algorithm.hpp:13
geometry/margins.hpp
Definition cache.hpp:11
Line segment.
Definition line_segment.hpp:20
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector3.hpp:19