var('x,y')
global f,g
global condition1,condition2
@interact
def _(f=input_box(default=(1/3)*x^2 + (1/4)*y^2 + 5,label='$f(x)=$'),
g=input_box(default=-1*x+0*y,label='$g(x)=$'),
condition1=input_box(default= x^2+y^2<8,label='$Constraint_1=$'),
condition2=input_box(default=y<sin(3*x),label='$Constraint_2=$'),
show_3d=('Stereographic',false), show_vol=('Shade volume',true),
dospin = ('Spin?',true),
clr = color_selector('#faff00', label='Volume Color', widget='colorpicker', hide_box=True),
xx = range_slider(-5, 5, 1, default=(-3,3), label='X Range'),
yy = range_slider(-5, 5, 1, default=(-3,3), label='Y Range'),
auto_update=false):
def F(x,y):
if condition1(x=x,y=y):
if condition2(x=x,y=y):
return f(x=x,y=y)
else:
return -NaN
else:
return -NaN
def G(x,y):
if condition1(x=x,y=y):
if condition2(x=x,y=y):
return g(x=x,y=y)
else:
return -NaN
else:
return -NaN
P = Graphics()
P_list = []
P_list.append(plot3d(F,(x,xx[0],xx[1]),(y,yy[0],yy[1]),color='blue',opacity=0.9))
P_list.append(plot3d(G,(x,xx[0],xx[1]),(y,yy[0],yy[1]),color='gray',opacity=0.9))
if show_vol:
ratios = range(10)
def H(x,y,r):
return (1-r)*F(x=x,y=y)+r*G(x=x,y=y)
P_list.extend([
plot3d(lambda x,y: H(x,y,ratios[1]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[2]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[3]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[4]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[5]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[6]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[7]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[8]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr),
plot3d(lambda x,y: H(x,y,ratios[9]/10),(x,xx[0],xx[1]),(y,yy[0],yy[1]),opacity=0.2,color=clr)
])
P = sum(P_list[i] for i in range(len(P_list)))
if show_3d:
show(P,frame=true,axes=false,xmin=xx[0],xmax=xx[1],ymin=yy[0],ymax=yy[1],stereo='redcyan',figsize=(6,9),viewer='jmol',spin=dospin)
else:
show(P,frame=true,axes=false,xmin=xx[0],xmax=xx[1],ymin=yy[0],ymax=yy[1],figsize=(6,9),viewer='jmol',spin=dospin)