Dear Amy, I would certainly be happy to contribute a few lines in a blog about the use of Mathematica for illustration or animations in education. Below is a draft. Oliver
One of the benefits of a high level programming language like Mathematica is fast developing time. This applies in particular for animations done for educational settings. Here is an example: to illustrate quadrics for an exam review for a multivariable calculus course, I animated part of a Miley Cyrus video with a couple of surfaces. That wrecking ball video had got an astounding 12.3 million views in 24 hours and of course, most of the students had seen it. By the way, the initial artistic close up shot in the Miley Music video is clearly inspired by other music videos, like by Sinead O'Connor. Back to the animation. Of course, a ray tracer like Povray would produce more realistic pictures, but it also would take more programming time. Development in Mathematica is fast because one can build up complex structures using simple building blocks which are easy to animate. The code below was written in a couple of hours and pretty self explanatory. One rule I always follow, whether using Mathematica for scientific experiments or illustrations or animations: always keep a running prototype. This allows me to finish with a product, even if time is up. Having had no time for tears and ears initially, they were added now as hyperbolic paraboloids or ellipsoids.
SetOptions[ParametricPlot3D,Mesh->False];
SetOptions[Graphics3D,{Boxed -> False,Axes ->False,AspectRatio->1}];
MileyFace[time_]:=Module[{},
R := Pi Random[]; RR := Module[{s = R, t = R}, {Cos[t] Sin[s], Sin[t] Sin[s], Cos[s]}];
lip[s_,t_]:={Cos[s+Sin[t]],Cos[t] Sin[s+Sin[t]],0.4*(1+Cos[time]) Sin[t] Sin[s+Sin[t]]};
hair[s_,t_]:={Cos[t] Sin[s+Sin[t]],Sin[t]Sin[s+Sin[t]],Cos[s + Sin[t]]};
tear[t_] := -1-ArcTan[Tan[t]];
tshape[t_]:={1-Sin[t]^2/2,1-Sin[t]^2/2,1+Sin[t]^2};
Lips = ParametricPlot3D[{0,-0.9,0}+(0.3+0.1 Sin[time]) lip[s,t],{t,-2.8,2.3},{s, 0, Pi}];
Hair = ParametricPlot3D[{0,0,0.1}+hair[s,t],{t,0,2 Pi},{s,0,Pi/3}];
Face = ParametricPlot3D[1.01 {Cos[t] Sin[s], Sin[t] Sin[s], Cos[s]},{t,0,2 Pi},{s,0,Pi}];
Nose = ParametricPlot3D[{0,-1.0,0.3}+0.15 {r Cos[t],r^2,2 r Sin[t]},{t,0,2 Pi},{r,0,1}];
Ear = ParametricPlot3D[0.6{Cos[s],Cosh[t] Sin[s]+0.8,Sinh[t] Sin[s]},{t,-1,1},{s,0,Pi/2}];
S0 = {RGBColor[1,0.5,0], Hair[[1]]};
S1 = {RGBColor[1,0.9,0.9], Face[[1]]};
S2 = {RGBColor[1,0,0],Lips[[1]]};
S3 = {RGBColor[0.5,0.5,1],Scale[Sphere[{0.3,-0.8, 0.5}, 0.1],{1,1,1-0.2 Sin[time]}]};
S4 = {RGBColor[0.5,0.5,1],Scale[Sphere[{-0.3,-0.8, 0.5}, 0.1],{1,1,1-0.2 Sin[time]}]};
S5 = {RGBColor[0,0,0],Table[Line[{{0.3,-0.8,0.5}, {0.3, -0.8, 0.5} + 0.2*RR}],{100}]};
S6 = {RGBColor[0,0,0],Table[Line[{{-0.3, -0.8, 0.5}, {-0.3,-0.8,0.5}+0.2*RR}],{100}]};
S7 = {RGBColor[1,1,1],Rotate[Nose[[1]], -0.1,{1,0,0}]};
S8 = {RGBColor[1,1,1],Rotate[Ear[[1]], Pi/2, {0, 0, 1}]};
S9 = {RGBColor[1,1,1],Rotate[Rotate[Ear[[1]],-Pi/2, {0, 0, 1}],Pi,{1,0,0}]};
S10 = {RGBColor[0,0,1],Scale[Sphere[{-0.3,-1,0.20+0.5 tear[time]},0.05],tshape[time]]};
Show[Graphics3D[{S0,S1,S2,S3,S3,S4,S5,S6,S7,S8,S9,S10}],
PlotRange -> {{-1.2, 1.2}, {-1.2, 1.2}, {-1.2, 1.2}},
ViewPoint -> {-0.050889, -3.05049, 1.46354},
ViewVertical -> {0.00601325, -0.184176, 0.982875}]];
Animate[MileyFace[t], {t, 0, 5 Pi}]
Of course, it is always possible to simplify and streamline code. While this costs time, it
can in the long term save time. You see for example that ArcTan[Tan[t]] implements a sawtooth function.
It could have done more elegantly with the built in function SawtoothWave[x].
One can also see how to access graphics objects like surfaces given by ParametricPlot3D.
An example is "Ear". To access the graphics part, like for scaling, translating or coloring,
work with Ear[[1]], then in the end put everything together with Graphics3D. An other
advise which helps to simplify code is to set global options. I did not want to use any
mesh features in the entire clip, so that this was defaulted to be false.