I'm visualising color systems with TikZ to my students, and here I'm creating a 3D set of axes which represent red, green, blue and their combinations as shaded spheres.
For some reason, the result looks alright on the Blue axis, but doesn't work as expected on Green and Red axes as when their values are increased the spheres stay gray. Where's the problem?
I've taken care that everything is represented in code in the same order, RGB. Code first sets up some variables about axes (x, y, z), then step size/distance between spheres and then the max value for assumed 8-bit color, 255.
The point is that the nested for eaches go through all integer values between 0–255 for red, green and blue (all combinations), the second \tikzmath creates scaled variables to be used with color information, and then with every pass a shaded sphere is drawn with the proper color and positioning on the axes.
\documentclass{memoir}
\usepackage{tikz}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}[scale=0.03]
\tikzmath{\x = 300; \y = \x; \z=\x; \step=51;\maxvalue=255;} %optimal step size 51
\draw[->, very thick, red] (0,0,0) -- (\x,0,0) node[right]{R};
\draw[->, very thick, green] (0,0,0) -- (0,\y,0) node[above]{G};
\draw[->, very thick, blue] (0,0,0) -- (0,0,\z) node[below left]{B};
\foreach \red in {0,\step,...,\maxvalue}{
\foreach \green in {0,\step,...,\maxvalue}{
\foreach \blue in {0,\step,...,\maxvalue}{
\tikzmath{\reds=\red/\maxvalue*100;\greens=\green/\maxvalue*100;\blues=\blue/\maxvalue*100;}
\shadedraw[ball color=red!\reds!green!\greens!blue!\blues!] (\red,\green,\blue) circle [radius=10cm];
}
}
}
\end{tikzpicture}
\end{document}