X1[u_, v_] := Block[{x}, D[vf[x, v], x] /. {x -> u}];
etc.
Heike.
On 21 Apr 2011, at 08:09, CoolGenie wrote:
> Hello,
> I'm trying to write a program for computing and plotting Gaussian
> curvature. Basically what I want is to set different colors on the
> surface depending on the curvature. My code is as follows
>
> Clear[vf, u, v, x, y, X1, X2, EE, FF, GG, n, nn, LL, MM, NN, KG];
> vf[u_, v_] :=
> vf[u, v] = {(2 + Cos[v]) Cos[u], (2 + Cos[v]) Sin[u], Sin[v]};
> (* wektory styczne *)
> X1[u_, v_] := D[vf[x, y], x] /. {x -> u, y -> v};
> X2[u_, v_] := D[vf[x, y], y] /. {x -> u, y -> v};
> (* wspolczynniki pierwszej formy podstawowej *)
> (* symbol E jest zajety wiec uzywamy EE, FF, GG *)
> EE[u_, v_] := Dot[X1[u, v], X1[u, v]];
> FF[u_, v_] := Dot[X1[u, v], X2[u, v]];
> GG[u_, v_] := Dot[X2[u, v], X2[u, v]];
> (* wektor normalny do powierzchni *)
> nn[u_, v_] := Cross[X1[u, v], X2[u, v]];
> n[u_, v_] := Normalize[nn[u, v]];
> (* wspolczynniki drugiej formy podstawowej *)
> LL[u_, v_] := Dot[D[vf[x, y], x, x], n[x, y]] /. {x -> u, y -> v};
> MM[u_, v_] := Dot[D[vf[x, y], x, y], n[x, y]] /. {x -> u, y -> v};
> NN[u_, v_] := Dot[D[vf[x, y], y, y], n[x, y]] /. {x -> u, y -> v};
> (* krzywizna Gaussa *)
> KG[u_, v_] :=
> KG[u, v] = (LL[u, v]*NN[u, v] -
> MM[u, v]*MM[u, v])/(EE[u, v]*GG[u, v] - FF[u, v]*FF[u, v] +
> 10^-10);
> (*min =First[FindMinimum[{KG[u,v], 0<=u<=2Pi,0<=v<=2Pi},u,v]]
> max=First[FindMaximum[{KG[u,v], 0<=u<=2Pi,0<=v<=2Pi},u,v]]*)
>
> ParametricPlot3D[vf[u, v], {u, 0, 2 Pi}, {v, 0, 2 Pi},
> ColorFunction -> Function[{x, y, z, u, v}, Hue[u]],
> ColorFunctionScaling -> False]
>
> ParametricPlot3D[{u, v, KG[u, v]}, {u, 0, 2 Pi}, {v, 0, 2 Pi},
> ColorFunction ->
> Function[{x, y, z, u, v}, Hue[(KG[u, v] - min)/(max - min)]],
> ColorFunctionScaling -> False]
>
> ParametricPlot3D[vf[u, v], {u, 0, 2 Pi}, {v, 0, 2 Pi},
> ColorFunction -> Function[{x, y, z, u, v}, Hue[KG[u, v]]],
> ColorFunctionScaling -> False]
>
> This produces 3 plots: the first one gives out a torus, colored
> according to u and the picture is ok. The second one gives Gaussian
> curvature plotted as a surface above the axes of u and v, colored
> according to the value of this curvature. Again the plot is ok. The
> problem is with the third plot where I try to color the torus with KG.
> When calling this function, I get the errors:
>
> General::ivar: 2.3258915732471794` is not a valid variable. >>
>
> and so on and the torus is not colored in full: some areas are white.
> I can upload a picture or you could run your code and see that it's
> not ok.
> Does anyone have a solution for this problem?
> Regards,
> Przemek
>
This helped, thank you!
P.