Plotting a 3d region defined by inequalities in SageMath
Sage has no built-in function for plotting 3d regions.
The best workaround is probably to parametrise the faces
and plot them with parametric_plot3d.
Start by defining a function to plot a parametric surface,
taking as arguments
- a triple
xyz of coordinate functions of two variables
- a $u$-range
uu
- a $v$-range
vv
- an optional opacity argument
and call this function surf:
def surf(xyz, uu, vv, opacity=None):
return parametric_plot3d(xyz, uu, vv, opacity=opacity)
Below we use an opacity (or "alpha") of 0.3 (ie transparency 0.7)
so that we can see well through the faces and better understand
the volume they bound.
For $E_1$, we parametrise with $u \in [0, 1]$ and $v \in [0, 1]$,
setting $v$ equal to $y$.
sage: uu, vv, op = (0, 1), (0, 1), 0.3
sage: E1_faces = (
....: [lambda u, v: u*v^2, lambda u, v: v, lambda u, v: 0 ],
....: [lambda u, v: v^2, lambda u, v: v, lambda u, v: u*(1-v)],
....: [lambda u, v: u*v^2, lambda u, v: v, lambda u, v: 1-v ],
....: [lambda u, v: 0, lambda u, v: v, lambda u, v: u*(1-v)])
sage: E1 = add((surf(f, uu, vv, op) for f in E1_faces), Graphics())
sage: E1.show(viewer='threejs', aspect_ratio=1)
Launched html viewer for Graphics3d Object
For $E_2$, we parametrise with $u \in [0, 1]$ and $v \in [0, 3]$,
with $v$ equal to $y$ again.
sage: uu, vv, op = (0, 1), (0, 3), 0.3
sage: E2_faces = (
....: [lambda u, v: u*v/3, lambda u, v: v, lambda u, v: 0 ],
....: [lambda u, v: v/3, lambda u, v: v, lambda u, v: u*sqrt(9-v^2)],
....: [lambda u, v: u*v/3, lambda u, v: v, lambda u, v: sqrt(9-v^2) ],
....: [lambda u, v: 0, lambda u, v: v, lambda u, v: u*sqrt(9-v^2)])
sage: E2 = add((surf(f, uu, vv, op) for f in E2_faces), Graphics())
sage: E2.show(viewer='threejs', aspect_ratio=1)
Launched html viewer for Graphics3d Object
Online demo: sagecell.