Antkeeper  0.0.1
cct.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_COLOR_CCT_HPP
21 #define ANTKEEPER_COLOR_CCT_HPP
22 
23 #include <engine/color/ucs.hpp>
24 #include <engine/color/xyy.hpp>
25 #include <engine/math/vector.hpp>
26 
27 namespace color {
28 
31 
40 template <class T>
41 [[nodiscard]] math::vec2<T> cct_to_ucs(T t) noexcept
42 {
43  const T tt = t * t;
44  return math::vec2<T>
45  {
46  (T{0.860117757} + T{1.54118254e-4} * t + T{1.28641212e-7} * tt) / (T{1} + T{8.42420235e-4} * t + T{7.08145163e-7} * tt),
47  (T{0.317398726} + T{4.22806245e-5} * t + T{4.20481691e-8} * tt) / (T{1} - T{2.89741816e-5} * t + T{1.61456053e-7} * tt)
48  };
49 }
50 
57 template <class T>
59 {
60  return ucs_to_xyy(cct_to_ucs(t), T{1});
61 }
62 
69 template <class T>
71 {
72  return xyy_to_xyz(cct_to_xyy(t));
73 }
74 
75 } // namespace color
76 
77 #endif // ANTKEEPER_COLOR_CCT_HPP
Color science.
Definition: aces.hpp:27
math::vec3< T > cct_to_xyy(T t)
Calculates CIE xyY colorspace chromaticity coordinates given a correlated color temperature using Kry...
Definition: cct.hpp:58
constexpr math::vec3< T > xyy_to_xyz(const math::vec3< T > &x) noexcept
Transforms a CIE xyY color into the CIE XYZ colorspace.
Definition: xyy.hpp:65
constexpr math::vec3< T > ucs_to_xyy(const math::vec2< T > &uv, T y=T{1}) noexcept
Transforms CIE 1960 UCS chromaticity coordinates into the CIE xyY colorspace.
Definition: ucs.hpp:38
math::vec2< T > cct_to_ucs(T t) noexcept
Calculates CIE 1960 UCS colorspace chromaticity coordinates given a correlated color temperature usin...
Definition: cct.hpp:41
math::vec3< T > cct_to_xyz(T t)
Calculates CIE XYZ colorspace chromaticity coordinates given a correlated color temperature using Kry...
Definition: cct.hpp:70
n-dimensional vector.
Definition: vector.hpp:44