# Is it possible to plot a function's value along a curve using different color?

I have a curve in 3D space which is green curve in the following picutre

The code for generating the curve is as follows:

g[x_, y_, z_] := x + y + z;
h[x_, y_, z_] := x^2 + y^2 + z^2;
s = -5;
ContourPlot3D[{g[x, y, z] == 0, h[x, y, z] == 24}, {x, -s, s}, {y, -s,
s}, {z, -s, s}, PlotTheme -> "Scientific", Mesh -> None,
BoundaryStyle -> {{1, 2} -> {Thick, Green}}]


I was wondering, if it is possible to depict the value of the function $$2 x + y z$$ on this curve with colors? Like when the color is darker the the value is larger, when the color is lighter then the value is smaller.

## 1 Answer

You can get the boundary using g as the MeshFunctions option value:

boundary = ContourPlot3D[h[x, y, z] == 24, {x, -s, s}, {y, -s, s}, {z, -s, s},
MeshFunctions -> (g[#, #2, #3] &),
Mesh -> {{0}},
MeshStyle -> Green,
ContourStyle -> None];


You can post-process boundary to inject desired colors using VertexColors:

coloredboundary = Normal[boundary] /.
Line[x_] :> {Tube[x, .3, VertexColors -> Hue /@ Rescale[2 # + #2 #3 & @@@ x]]};

Show[ContourPlot3D[{g[x, y, z] == 0, h[x, y, z] == 24}, {x, -s, s}, {y, -s, s}, {z, -s, s},
Mesh -> None],
coloredboundary]


Replace Hue with your favorite color function.

Alternatively, you can process boundary to convert the Line object into a BSplineFunction and use it with ParametricPlot3D with the option ColorFunction:

bsF = Cases[Normal[boundary], Line[x_] :> BSplineFunction[x], All][[
1]];

coloredboundary2 = ParametricPlot3D[bsF[t], {t, 0, 1},
ColorFunction -> (Hue[2 # + #2 #3] &)] /. Line[a_, b_] :> Tube[a, .3, b];

Show[ContourPlot3D[{g[x, y, z] == 0, h[x, y, z] == 24}, {x, -s, s}, {y, -s, s}, {z, -s, s},
Mesh -> None],
coloredboundary2, ViewPoint -> Front]