我正在尝试使用 pst-solides3D 和选项 psSurface 绘制图形:
问题如下:
我想要绘制 z = +/- (y^2-y^2),它应该给出一个鞍点图,其中线 x=y 和 x=-y 等于 0。视觉上很漂亮。
\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[english]{babel} %change language if necessary
\usepackage[english,verbose]{layout}%change language if necessary
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{xspace}
\usepackage{pstricks}
\usepackage{pst-solides3d}
\usepackage{epstopdf}
\psset{unit=0.35}
\psset{lightsrc=30 -10 10}
\psset{viewpoint=50 20 30 rtp2xyz,Decran=70}
\begin{pspicture}(-11,-8)(7,8)
%+ Saddle graph z= (y^2-x^2)
\psSurface[ngrid=.2 .2,algebraic,Zmin=-1,Zmax=1,
linewidth=0.5\pslinewidth,spotX=r,spotY=d,
spotZ=l,
hue=0 1](-5,-5)(5,5){%
(x^2-y^2)/3 }
%- Saddle graph z = (x^2-y^2)
\psSurface[ngrid=.2 .2,algebraic,Zmin=-1,Zmax=1,
linewidth=0.5\pslinewidth,spotX=r,spotY=d,
spotZ=l,
hue=0 1](-5,-5)(5,5){%
(-x^2+y^2)/3 }
\end{pspicture}
但是如您所见,这并不令人满意。第二张图绘制在了第一张图上,并覆盖了第一张图不应该覆盖的部分。我可以使用任何透明度命令吗,或者让 pstricks 了解什么在什么前面?
我想要的渲染应该是这样的
它知道什么应该放在前面,什么不应该放在前面。
答案1
如果不使用隐藏线和表面,绘制多个 3D 函数是没有意义的。
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\psset{unit=0.35,lightsrc=30 -10 10,viewpoint=50 20 30 rtp2xyz,Decran=70,solidmemory}
\begin{pspicture}(-11,-8)(7,8)
\defFunction[algebraic]{F1}(x,y){}{}{ (x^2-y^2)/3 }
\psSolid[object=surface,function=F1,ngrid=.2 .2,linewidth=0.5\pslinewidth,
hue=0 1,base=-5 5 -5 5,action=none,name=Func1]
\defFunction[algebraic]{F2}(x,y){}{}{ (-x^2+y^2)/3 }
\psSolid[object=surface,function=F2,ngrid=.2 .2,linewidth=0.5\pslinewidth,
hue=0 1,base=-5 5 -5 5,action=none,name=Func2]
\psSolid[object=fusion,base=Func1 Func2,opacity=0.6]
\end{pspicture}
\end{document}
和没有设置时一样opacity
(真实隐藏表面)
如果你想根据 z 值使用颜色
\psSolid[object=surface,function=F1,ngrid=.2 .2,
linewidth=0.5\pslinewidth,
tablez=-5 0.2 5 {} for, zcolor=0.66 0,
base=-5 5 -5 5,action=none,name=Func1]