Antkeeper  0.0.1
xyy.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_XYY_HPP
21 #define ANTKEEPER_COLOR_XYY_HPP
22 
23 #include <engine/math/vector.hpp>
24 
25 namespace color {
26 
29 
37 template <class T>
38 [[nodiscard]] inline constexpr T xyy_to_luminance(const math::vec3<T>& x) noexcept
39 {
40  return x[2];
41 }
42 
50 template <class T>
51 [[nodiscard]] constexpr math::vec2<T> xyy_to_ucs(const math::vec3<T>& x) noexcept
52 {
53  const T d = (T{1} / (T{-2} * x[0] + T{12} * x[1] + T{3}));
54  return math::vec2<T>{(T{4} * x[0]) * d, (T{6} * x[1]) * d};
55 }
56 
64 template <class T>
65 [[nodiscard]] constexpr math::vec3<T> xyy_to_xyz(const math::vec3<T>& x) noexcept
66 {
67  return math::vec3<T>{(x[0] * x[2]) / x[1], x[2], ((T{1} - x[0] - x[1]) * x[2]) / x[1]};
68 }
69 
71 
72 } // namespace color
73 
74 #endif // ANTKEEPER_COLOR_XYY_HPP
Color science.
Definition: aces.hpp:27
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 T xyy_to_luminance(const math::vec3< T > &x) noexcept
Returns the luminance of a CIE xyY color.
Definition: xyy.hpp:38
constexpr math::vec2< T > xyy_to_ucs(const math::vec3< T > &x) noexcept
Transforms a CIE xyY color into the CIE 1960 UCS colorspace.
Definition: xyy.hpp:51
n-dimensional vector.
Definition: vector.hpp:44