# Cutting a section from a sphere by planes

I want to plot and find out the section of a sphere remaining after putting constraints in terms of cartesian planes. How it can be done?

For example, if I have a sphere of $$r = 1$$, and I put the constraint $$z > 0$$ on it, simple imagination would suggest that it leaves half the sphere as defined by limits $$\theta\in [0, \pi/2]$$ and $$\phi\in [0, 2\pi]$$. Adding the constraint $$x > 0$$ leaves a quarter of the sphere with $$\theta\in [0, \pi/2]$$ and $$\phi,\in [0, \pi]$$, and so on.

I want to achieve the same using Mathematica. I want find the $$(\phi, \theta)$$ limits for more complex Cartesian constraints applied simultaneously, such as $$x > y \land z > y$$.

Will appreciate any suggestions.

ClipPlanes does exactly what you need:

You can use ClipPlanes in two different ways:

(1) As an option to clip all the 3D primitives:

Graphics3D[{Green, Sphere[{0, 0, 0}, 1/4], Blue, Sphere[{0, 0, 0}, 2/3], Red, Sphere[]},
ClipPlanes -> {{0, 1, -1, 0}},
ClipPlanesStyle -> Opacity[.25, Gray]]


(2) As a directive that applies to individual 3D primitives:

Graphics3D[{Green, Sphere[{0, 0, 0}, 1/4],
ClipPlanes -> {{0, 1, -1, 0}}, Blue, Sphere[{0, 0, 0}, 2/3],
ClipPlanes -> {{0, 0, 1, 0}, {0, 1, 0, 0}}, Red, Sphere[]}]


{x, y, z} = {Sin[θ] Cos[φ], Sin[θ] Sin[φ], Cos[θ]};

Reduce[0 <= θ <= π && 0 <= φ < 2π && z > 0, {θ, φ}]


0 <= θ < π/2 && 0 <= φ < 2π

Reduce[0 <= θ <= π && 0 <= φ < 2π && z > 0 && x > 0, {θ, φ}]


0 < θ < π/2 && (0 <= φ < π/2 || 3π/2 < φ < 2π)

Reduce[0 <= θ <= π && 0 <= φ < 2π && z > y, {θ, φ}] // FullSimplify


(θ >= 0 && 4θ < π && 0 <= φ < 2π) || (4θ == π && ((φ >= 0 && 2φ < π) || π/2 < φ < 2π)) || (π/4 < θ < π/2 && (0 <= φ < ArcSin[Cot[θ]] || (φ + ArcSin[Cot[θ]] > π && φ < 2π))) || (π/2 <= θ < 3π/4 && φ + ArcSin[Cot[θ]] > π && φ < 2π + ArcSin[Cot[θ]])

For a graphical solution (to get a quick idea) you can do

RegionPlot[x > y && z > y, {φ, 0, 2π}, {θ, 0, π},
AspectRatio -> Automatic, FrameLabel -> {φ, θ}]


• In this case, you don't even need to specify the variables in Reduce[]. Using the OP's example: Reduce[And @@ Join[{0 < θ < 2 π, 0 < φ < π}, Thread[{x, y, z} == {Sin[φ] Cos[θ], Sin[φ] Sin[θ], Cos[φ]}], {x > y, z > y}]] // FullSimplify – J. M.'s discontentment Aug 30 '19 at 8:06
• @J.M. yes. However, the use of Reduce and Solve with omitted list of variables is undocumented, as far as I know. – Roman Aug 30 '19 at 8:08
SphericalPlot3D[{1, 2, 3},
{θ, 0, π},
{φ, 0, 3 π/2}]


or

Manipulate[
SphericalPlot3D[1,
{θ, 0, θf},
{φ, 0, φf},
PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}}],
{{θf, π/2}, 0, π},
{{φf, π}, 0, 2 π}
]

• thanks for the help, the code you suggested can plot the section of sphere for given (phi, theta) range. Though my problem has another part, how to find the range of (phi, theta) when the sphere is sliced by certain plain by condition like x > 0. Thanks – user49535 Mar 2 '19 at 7:17