# What is the meaning of the last argument passed to the ColorFunction of a ParametricPlot3D?

According to the docs, the meaning of the arguments passed to ParametricPlot3D is $x, y, z, u, v$. This is 5 arguments: the Cartesian coordinates and the two parameters. Similarly, for ParametricPlot it's $x, y, u, v$.

Let's look at how many arguments are actually passed to the ColorFunction:

Reap[ParametricPlot3D[{Cos[u] Cos[v], Sin[u] Cos[v], Sin[v]},
{u, 0, 2 Pi}, {v, -Pi/2, Pi/2}, ColorFunction -> ((Sow[{##}]; Gray) &)]]


If you evaluate this, you'll notice that actually 6 arguments are passed to the colour function, but the last one is always zero. If we use the one-parameter form of ParametricPlot3D, then still six arguments will be passed, but now the last two are zero.

Reap[ParametricPlot3D[{Cos[u], Sin[u], 0}, {u, 0, 2 Pi},
ColorFunction -> ((Sow[{##}]; Gray) &)]]


Similarly, the colour function of ParametricPlot receives 5 arguments instead of 4.

What is the meaning of the last argument passed to the ColorFunction of these functions? Does it have any use? Does ParametricPlot3D have a form where the last argument of the colour function will not be zero and has an application?

-
I just tested with RegionPlot3D and plain Plot: Both also add an extra 0. argument. – celtschk May 16 '12 at 12:20
"Reserved for future use"? – Sjoerd C. de Vries May 16 '12 at 12:52
@Sjoerd Well, they could always just add one more argument ... – Szabolcs May 21 '12 at 14:58
Interesting -- this explians why a color function defined per the ColorFunction docs with 5 arguments doesn't work!! mycolor[x_, y_, z_, u_, v_] := Red; ParametricPlot3D[{Cos[u] Cos[v], Sin[u] Cos[v], Sin[v]}, {u, 0, 2 Pi}, {v, -Pi/2, Pi/2}, ColorFunction -> (mycolor[##] &)] produces an 'uncolored' figure.. Apologies I cant see how to post a comment vs an 'answer' here.. – george2079 Aug 20 '12 at 22:07

This is a bit speculative but I note that SphericalPlot3D[] supplies its ColorFunction with 6 args, being x, y, z, theta, phi, and r. SphericalPlot3D can be shown to call ParametricPlot3D, so I'd surmise the extra argument is left there for compatibility.
How did you find this out? Did you use Trace? – rcollyer Aug 22 '12 at 2:13
Unprotect[ParametricPlot3D];ParametricPlot3D[arg___] := (Print["arg list is", {arg}]); SphericalPlot3D[1, {t, 0, 2 Pi}, {p, -Pi/2, Pi/2}, ColorFunction -> colorfunction ] – george2079 Aug 22 '12 at 14:43