8
Manipulate[
 SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, 
  Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 
  1}]

I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ...

Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
user 3 50
  • 157
  • 9
  • Possible duplicate: http://mathematica.stackexchange.com/q/14954/121 -- actually that one doesn't specifically relate to SphericalPlot3D and I can see that the solution may be a bit involved. – Mr.Wizard Feb 09 '14 at 17:59

2 Answers2

9

There is no built-in filling in SphericalPlot3D. One option is to use ParametricPlot3D to draw the surfaces between the two shells:

Manipulate[
 Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, 
  PlotPoints -> 15, PlotRange -> {-2.2, 2.2}],
  ParametricPlot3D[{
    r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]},
    r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}},
   {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]],
  {n, 0, 1}]

enter image description here

Simon Woods
  • 84,945
  • 8
  • 175
  • 324
  • It's a real bumer that there is no built in function, but thanks to kind and skillful people like you there is always a solution! :) – user 3 50 Feb 09 '14 at 20:21
7

Using RegionPlot3D is the easiest way to do it.

Manipulate[
Show[RegionPlot3D[1 <= x^2 + y^2 + z^2 <= (2 - n)^2 && (y >= 0 || x <= 0), {x, -2.2, 
2.2}, {y, -2.2, 2.2}, {z, -2.2, 2.2}, Mesh -> None, 
PlotPoints -> 50]], {n, 0, 1}];

enter image description here

You may want to render it before manipulating to avoid the recalculation, specially if you want better resolution.

lalmei
  • 3,332
  • 18
  • 26