The world of RGB colors
An RGB color has three components: red, green and blue. On a computer each
of these components is usually represented by a 4 digit hex integer.
If to each point (x, y, z) of the unit cube we assign the color
([65537*x], [65537*y],[65537*z])
we come to the idea of the RGB cube
in which every object, point, line, plane and arbitrary surface is colored.
The following programs are designed to give answer to some simple questions.
- rgb_segment
We can see the color of any segment A'(x1,y1,z1), B'(x2,y2,z2)
by mapping it to the segment[t1,t2] using linear functions. If, in
Mathematica's notation, M is the matrix {{x1, x2}, {y1, y2}, {z1, z2}}
and V the vector {{A[t]}, {B[t]}, where A[t}, B[t] are linear functions
such that A(t1)=1, A(t2) = 0 and B(t1) = 0, B(t2) = 1, then the matrix product
M.V = {{x1 A[t] + x2 B[t]}, {y1 A[t] + y2 B[t]}, {z1 A[t] + z2 B[t]}}
is the required transformation. At t1 and t2 we have colors (x1,y1,z1),
(x2,y2,z2) and to each point of [t1,t2] we assign the color defined by the
matrix M.V.
This is done in the program rgb_segment. In this program arbitrary colors
can be entered at A' and B' and the program produces the colors of A'B'
on the segment [A,B] extended to a strip
- mini_rgb_segment
is a simplified version of the rgb_segment program
-
rgb_cube_faces. This program shows the colors of the 6 faces of the RGB cube
using the facts that 8 basic colors (black,red,green,yellow,blue,cyan,
magenta and white) are the colors of the vertices of the RGB cube.
The color of the face is determined by techniques used in the RGB segment
program. Let us denote by A, B, C, D the vertices of one of the faces. The
program first finds the colors of the (vertical) segments AD and BC. Then
it draws (horizontal) lines parallel to AB using the fact that the colors
at segments AD and BC equidistant from AB are already known.
This is the image of the RGB Cube's face perpendicular to the blue axis
This is a 3D image of the RGB Cube. It was obtained by using the rgb_cube_faces program to obtain the 3 faces of the cube with one red vertex and the Adobe Illustrator to transform two faces.(Download this picture)
- rgb_triangle, .Any set
of three distinct points A', B', C' inside the RGB cube determine a triangle. To determine the color of each point of the triangle
using the colors of A', B', C' we can use again linear interpolation.
Let M be the matrix {{x1,yx2,x3},{y1,y2,y3},{z1,z2,z3}} where the columns are
the colors of the vertices A',B',C' and let V be the vector
{{A[u,v]},{B[u,v]},{C[u,v]}} where A[u,v], B[u,v], C[u,v] are linear functions
(planes) satisfying conditions
A(u1,v1) = 1, A(u2,v2) = 0, C(u3,v3) =0
A(u1,v1) = 0, B(u2,v2) = 1, C(u3,v3) =0
A(u1,v1) = 0, B(u2,v2) = 0, C(u3,v3) =1
The matrix product M.V maps then the triangle A'B'C' into a triangle
ABC with vertices (u1,v1), (u2,v2), (u3,v3) and each point of the triangle
ABC is colored with the rgb color determined by the product M.V
mini_rgb_triangle is a simplified version of the rgb_triangle program,
similar to the program GouraudMod posted by R. Purves on the FB list.
- mini_rgb_triangle
is a simplified version of the rgb_triangle program
For smooth transition of colors, all these programs should be run on a
monitor capable of showing millions of colors. Drawing of a point is done
by the function SetCPixel and the reading of the color of a point is
done by the GetCPixel function.
The meaning of color interpolation becomes less clear if we have more than
three non coplanar points in the RGB cube.