0

我尝试使用 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,-2,2,
    z,0,1)
);

上面的代码绘制了一个半球体

注意:这是一个空心半球

我的问题是是否可以绘制除半球外的所有内容,填充它周围的所有区域。或者甚至绘制一个填充的半球而不是一个空心的半球。

我的目标是绘制函数y >= x^2; z >= 0

到现在为止我得到的是这个

draw3d(
implicit(y=x^2,
x,-4,4,
y,0,2,
z,0,4)
);

此外,在 2D 平面上,有些东西看起来像我想要的,实际上我无法让它在 3D 空间上工作

draw2d(
key="y >= x^2",
fill_color = blue,
filled_func = x^2,
explicit(0,x,-4,4),
user_preamble="set key at 0.5, 15"
)$

我接受其他可以实现我想要的软件的建议。

4

1 回答 1

1

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) 会更好看。

于 2021-02-03T23:16:33.373 回答