Better solution
Actually, you don't need a different parametrization as I suggest below. I haven't really looked at your formula before which I should have done. The probably best solution is to transform your condition into explicit values for t
like this:
Reduce[11*Cos[t] <= 5 && 0 <= t <= Pi, t]
(* ArcCos[5/11] <= t <= Pi *)
And now you remove your if condition and adjust your time interval
ParametricPlot3D[{9*Cos[s]*Sin[t], 10*Sin[s]*Sin[t], 11*Cos[t]},
{s, 0, 2*Pi}, {t, ArcCos[5/11], Pi}]
That's far easier.
Quick Hack
ParametricPlot3D
expects 3d point for all input values of s
and t
. What you do by returning Null
is kind of rude and most likely confuses the algorithm which tries to construct a polygon surface.
I would really recommend that you transform your expression into a better parameterization, but for a quick hack it seems sufficient to not return Null
but the point on the ring at z=5
.
expr = {9*Cos[s]*Sin[t], 10*Sin[s]*Sin[t], 11*Cos[t]};
sol = Last@Solve[11*Cos[t] == 5, t];
With[{surf = expr, ring = expr /. sol},
ParametricPlot3D[
If[11*Cos[t] <= 5, surf, ring], {s, 0, 2*Pi}, {t, 0, Pi}]
]