Antkeeper  0.0.1
exposure.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef ANTKEEPER_PHYSICS_LIGHT_EV_HPP
21 #define ANTKEEPER_PHYSICS_LIGHT_EV_HPP
22 
23 #include <cmath>
24 
25 namespace physics {
26 namespace light {
27 
33 namespace ev {
34 
44 template <class T>
45 T from_luminance(T l, T s, T k)
46 {
47  return std::log2((l * s) / k);
48 }
49 
59 template <class T>
60 T from_illuminance(T e, T s, T c)
61 {
62  return std::log2((e * s) / c);
63 }
64 
74 template <class T>
75 T from_settings(T n, T t, T s)
76 {
77  return std::log2((n * n) / t * T(100) / s);
78 }
79 
89 template <class T>
90 T to_luminance(T ev, T s, T k)
91 {
92  return (k * std::exp2(ev)) / s;
93 }
94 
104 template <class T>
105 T to_illuminance(T ev, T s, T c)
106 {
107  return (c * std::exp2(ev)) / s;
108 }
109 
110 } // namespace ev
111 } // namespace light
112 } // namespace physics
113 
114 #endif // ANTKEEPER_PHYSICS_LIGHT_EV_HPP
consteval T exp2(T x) noexcept
Compile-time exp2 for unsigned integrals.
Definition: compile.hpp:51
T from_illuminance(T e, T s, T c)
Exposure value from illuminance.
Definition: exposure.hpp:60
T to_luminance(T ev, T s, T k)
Exposure value to luminance.
Definition: exposure.hpp:90
T from_luminance(T l, T s, T k)
Exposure value from luminance.
Definition: exposure.hpp:45
T from_settings(T n, T t, T s)
Exposure value from exposure settings.
Definition: exposure.hpp:75
T to_illuminance(T ev, T s, T c)
Exposure value to illuminance.
Definition: exposure.hpp:105
Physics.
Definition: constants.hpp:23