问题描述
我尝试使用 Maxima 绘制 3D 表面,我确实使用以下代码实现了
load(draw);
draw3d(xlabel="x",ylabel="y",zlabel="z",proportional_axes=xyz,enhanced3d=true,colorBox=false,xtics=0.5,ytics=0.5,ztics=0.5,implicit(x^2+y^2+z^2<=1,x,-2,2,y,z,1)
);
注意:这是一个空心的半球
我的问题是是否可以绘制除半球以外的所有内容,并填充其周围的所有区域。或者甚至绘制一个填充的半球而不是空心的半球。
我的目标是绘制函数 y >= x^2; z >= 0
到目前为止我得到的是这个
draw3d(
implicit(y=x^2,-4,4,4)
);
另外,在 2D 平面上有一些看起来像我想要的东西,实际上我无法让它在 3D 空间上工作
draw2d(
key="y >= x^2",fill_color = blue,filled_func = x^2,explicit(0,4),user_preamble="set key at 0.5,15"
)$
我接受可以实现我想要的其他软件的建议。
解决方法
gnuplot 5.4 版(当前)
set xyplane 0
set pm3d depthorder lighting spec 0.5
set angle degrees
set xrange [-1:1]
set yrange [-1:1]
set zrange [ 1:0]
set view equal xyz
set view 300,24,1.4
unset border
unset key
unset colorbox
set sample 100; set isosample 100
set palette cubehelix negative
set zlabel "Z"
set ztics 1; unset xtics; unset ytics
set walls x0 fillstyle solid 1.0 fillcolor "gray"
set walls x1 fillstyle solid 1.0 fillcolor "gray"
set walls y0 fillstyle solid 1.0 fillcolor "gray"
set walls y1 fillstyle solid 1.0 fillcolor "gray"
# First draw the surface of the hemisphere
# Then draw the part of the plane z=0 that is outside of it
# and finally the other sides of the box
splot sample [u=0:90:3][v=0:360:5] '++' \
using (cos($1)*cos($2)) : (cos($1)*sin($2)) : (sin($1)) with pm3d,\
[u=-1:1][v=-1:1] '++' \
using 1:2:($1*$1+$2*$2>=1 ? 0.0 : NaN) with pm3d fc "gray55",\
[u=-1:1][v=-1:1] '++' using 1:2:( 1.0 ) with pm3d fc "gray55",\
[u=-1:1][v=0:1] '++' using 1:(-1):2 with pm3d fc "gray55",\
[u=-1:1][v=0:1] '++' using 1:( 1):2 with pm3d fc "gray55",\
[u=-1:1][v=0:1] '++' using ( 1):1:2 with pm3d fc "gray55",\
[u=-1:1][v=0:1] '++' using (-1):1:2 with pm3d fc "gray55"
照明模型的设计不允许从下面进行适当的照明,因此翻转视点以“向上”看碗的效果不太好。
四个侧面的瑕疵是因为碗面和盒子侧面接触。将框扩展到 +/-(1+epsilon) 看起来会更好。