Tube with variable color, opacity, and radius
The following code is based on the Reap
-Sow
approach, and uses for the ColorFunction
a pure function, as in your first approach. The pure function is rewritten with Sow
and uses the slot #4
for the color variation, rather than #3
, to take the values given by u
.
rr = Reap[
ParametricPlot3D[
{Sin[u], Cos[u], u/10}, {u, 0, 25},
ColorFunction -> (Directive[Opacity[0.5 #3], Hue[Sow[1/2 - #4/50]]] &),
ColorFunctionScaling -> False,
PlotRange -> All,
MaxRecursion -> 0, PlotPoints -> 300,
Method -> {"TubePoints" -> 300}
]
];
rr[[1]] /. Line[pts_, rest___] :> Tube[pts, 0.1 - .15 rr[[2]], rest]
Note that since here $z = u /10$, it is equivalent to use instead:
Hue[Sow[1/2 - #3/5]]
which is what you have for the ColorFunction
of your first approach (Sow
apart).
This approach is equivalent to Xavier's, except that I use EvaluationMonitor
to catch the parameter values being used to plot the curve.
{plot, vals} = Reap[ParametricPlot3D[{Sin[u], Cos[u], u/10}, {u, 0, 25},
ColorFunction -> (Hue[1/2 - #4/50, 1, 1, 0.5 #3] &),
ColorFunctionScaling -> False,
EvaluationMonitor :> Sow[u],
MaxRecursion -> 0, Method -> {"TubePoints" -> 300},
PlotPoints -> 300]];
Show[plot /. Line[pts_, rest___] :> Tube[pts, 0.1 - .15 (1/2 - Sort[vals[[1]]]/50), rest],
PlotRange -> All]