summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pgf-spectra/pgf-spectra.library.tempercolor.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/pgf-spectra/pgf-spectra.library.tempercolor.tex')
-rw-r--r--graphics/pgf/contrib/pgf-spectra/pgf-spectra.library.tempercolor.tex146
1 files changed, 146 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.library.tempercolor.tex b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.library.tempercolor.tex
new file mode 100644
index 0000000000..5acfb45a20
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.library.tempercolor.tex
@@ -0,0 +1,146 @@
+% --------------------------------------------------------------------------------------------------
+% subfile of pgf-spectra package -----------------------------------------------------------------
+% --------------------------------------------------------------------------------------------------
+\def\pgfspectra@library@tempercolor@loaded{}%
+\message{pgf-spectra tempercolor library loaded!}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% provide the macro
+% \tempercolor{Kelvin}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\makeatletter%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \tempercolor -> Convert a temperature in Kelvin to rgb color
+%
+% The original algorithm used in this macro can be found at
+%
+% https://github.com/neilbartlett/color-temperature
+%
+% More information at...
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% --------------------------------------------------------------------------------------------------------------
+% https://tannerhelland.com/2012/09/18/convert-temperature-rgb-algorithm-code.html
+%
+% «Start with a temperature, in Kelvin, somewhere between 1000 and 40000. (Other values may work,
+% but I can't make any promises about the quality of the algorithm's estimates above 40000 K.)»
+% Tanner Helland
+% https://www.zombieprototypes.com/?p=210
+%---------------------------------------------------------------------------------------------------------------
+% and the improved algorithm at...
+% --------------------------------------------------------------------------------------------------------------
+% https://github.com/neilbartlett/color-temperature
+%
+% neilbartlett/color-temperature is licensed under the
+%
+% MIT License
+% A short and simple permissive license with conditions only requiring preservation of copyright and license notices.
+% Licensed works, modifications, and larger works may be distributed under different terms and without source code.
+%
+% Permissions
+% Commercial use, Modification, Distribution, Private use
+% Limitations
+% Liability, Warranty
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The MIT License (MIT)
+%
+% Copyright (c) 2015 Neil Bartlett
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the "Software"), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in
+% all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+% THE SOFTWARE.
+% © 2021 GitHub, Inc.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{tempercolor}{rgb}{0,0,0}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \tempercolor{Kelvin}
+\def\tempercolor#1{\ignorespaces%
+%Set Temperature = Temperature \ 100
+\edef\pgfspectra@temperatura{#1sp}%
+\ifdim\pgfspectra@temperatura>16380sp\relax% for supporting large values of T
+\pgfkeys{/pgf/number format/.cd,fixed,precision=2,fixed zerofill,set thousands separator={},assume math mode=true}%
+\pgfmathparse{#1sp/100sp*1.0026931+.002}% correction factor for the division made in sp
+\pgfmathprintnumberto{\pgfmathresult}{\pgfspectra@T@tmp}%
+\edef\pgfspectra@temperatura{\pgfspectra@T@tmp}%
+\edef\pgfspectra@temperatura@pt{\pgfmathresult pt}%
+\else%
+\pgfmathparse{#1/100}%
+\edef\pgfspectra@temperatura{\pgfmathresult}%
+\edef\pgfspectra@temperatura@pt{\pgfmathresult pt}%
+\fi%
+\ifdim\pgfspectra@temperatura@pt<10pt\relax%
+\PackageError{pgf-spectra}{tempercolor: the temperature must be at least 1000K}{Type a greater temperature...}%
+\else\ifdim\pgfspectra@temperatura@pt>400pt\relax%
+\PackageError{pgf-spectra}{tempercolor: the temperature must be at most 40000K}{Type a smaller temperature...}%
+\else%
+%Calculate Red:
+\ifdim\pgfspectra@temperatura@pt>66pt\relax%
+ \pgfmathparse{\pgfspectra@temperatura-55}\edef\pgfspectra@tempercolor@r{\pgfmathresult}%
+ \pgfmathparse{351.976906+ 0.114207*\pgfspectra@tempercolor@r-40.253663*ln(\pgfspectra@tempercolor@r)}%
+ \edef\pgfspectra@tempercolor@r{\pgfmathresult}%
+ \edef\pgfspectra@tempercolor@r@pt{\pgfmathresult pt}%
+ \ifdim\pgfspectra@tempercolor@r@pt<0pt\edef\pgfspectra@tempercolor@r{0}\relax\fi%
+ \ifdim\pgfspectra@tempercolor@r@pt>255pt\edef\pgfspectra@tempercolor@r{255}\relax\fi%
+ \pgfmathparse{\pgfspectra@tempercolor@r/255}\edef\pgfspectra@tempercolor@r{\pgfmathresult}%
+\else%
+ \edef\pgfspectra@tempercolor@r{1}%
+\fi%
+% Calculate Green:
+\ifdim\pgfspectra@temperatura@pt>66pt\relax%
+ \pgfmathparse{\pgfspectra@temperatura-50}\edef\pgfspectra@tempercolor@g{\pgfmathresult}%
+ \pgfmathparse{325.449413+0.079435*\pgfspectra@tempercolor@g -28.085296*ln(\pgfspectra@tempercolor@g)}%
+ \edef\pgfspectra@tempercolor@g{\pgfmathresult}%
+ \edef\pgfspectra@tempercolor@g@pt{\pgfmathresult pt}%
+ \ifdim\pgfspectra@tempercolor@g@pt<0pt\edef\pgfspectra@tempercolor@g{0}\relax\fi%
+ \ifdim\pgfspectra@tempercolor@g@pt>255pt\edef\pgfspectra@tempercolor@g{255}\relax\fi%
+ \pgfmathparse{\pgfspectra@tempercolor@g/255}\edef\pgfspectra@tempercolor@g{\pgfmathresult}%
+\else%
+ \pgfmathparse{\pgfspectra@temperatura-2}\edef\pgfspectra@tempercolor@g{\pgfmathresult}%
+ \pgfmathparse{-155.254856-0.445970*\pgfspectra@tempercolor@g+104.492162*ln(\pgfspectra@tempercolor@g)}%
+ \edef\pgfspectra@tempercolor@g{\pgfmathresult}%
+ \edef\pgfspectra@tempercolor@g@pt{\pgfmathresult pt}%
+ \ifdim\pgfspectra@tempercolor@g@pt<0pt\edef\pgfspectra@tempercolor@g{0}\relax\fi%
+ \ifdim\pgfspectra@tempercolor@g@pt>255pt\edef\pgfspectra@tempercolor@b{255}\relax\fi%
+ \pgfmathparse{\pgfspectra@tempercolor@g/255}\edef\pgfspectra@tempercolor@g{\pgfmathresult}%
+\fi%
+%Calculate Blue:
+\ifdim\pgfspectra@temperatura@pt<66pt\relax%
+ \ifdim\pgfspectra@temperatura@pt>20pt\relax%
+ \pgfmathparse{\pgfspectra@temperatura-10}\edef\pgfspectra@tempercolor@b{\pgfmathresult}%
+ \pgfmathparse{-254.769352+0.827410*\pgfspectra@tempercolor@b+115.679944*ln(\pgfspectra@tempercolor@b)}%
+ \edef\pgfspectra@tempercolor@b{\pgfmathresult}%
+ \edef\pgfspectra@tempercolor@b@pt{\pgfmathresult pt}%
+ \ifdim\pgfspectra@tempercolor@b@pt<0pt\edef\pgfspectra@tempercolor@b{0}\relax\fi%
+ \ifdim\pgfspectra@tempercolor@b@pt>255pt\edef\pgfspectra@tempercolor@b{255}\relax\fi%
+ \pgfmathparse{\pgfspectra@tempercolor@b/255}\edef\pgfspectra@tempercolor@b{\pgfmathresult}%
+ \else%
+ \edef\pgfspectra@tempercolor@b{0}%
+ \fi%
+\else%
+ \edef\pgfspectra@tempercolor@b{1}%
+\fi%
+\definecolor{pgfspectra@@tempercolor}{rgb}{\pgfspectra@tempercolor@r,\pgfspectra@tempercolor@g,\pgfspectra@tempercolor@b}%
+\colorlet{tempercolor}{pgfspectra@@tempercolor}%
+\fi\fi% check limits 1000K<T<40000K
+}%
+% <--- NEW v2.1.0 ------------------
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\makeatother%
+\endinput