我想绘制由方程 z²=x²+y² 给出的圆锥体。(我不介意使用任何给定的包。)我尝试使用pst-solides3d
包在其手册的帮助下生成以下代码。但是,我的代码只生成了轴。我收到以下错误消息(我使用 TeXShop 和 XeLaTeX 并选择“TeX 和 DVI”选项进行排版):
** 警告 ** PSTricks 的图像格式转换失败。 ** 警告 ** 解释特殊命令 pst: (ps:) 失败。
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\psset{Decran=20}
\begin{pspicture}(-5,-5)(5,5)
\axesIIID(4,4,4)
\psSurface(0,0)(3,3){sqrt(x^2+y^2)}
\psSurface(-3,-3)(0,0){-sqrt(x^2+y^2)}
\end{pspicture}
\end{document}
答案1
PSTricks
需要知道您要以代数方式定义曲面,而不是使用逆波兰表示法 (RPN)。
如果您想要以代数方式工作,那么您必须首先使用\defFunction[algebraic]...
如下所示的方式定义函数。
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\psset{Decran=20}
\begin{pspicture}(-5,-5)(5,5)
\axesIIID(4,4,4)
\defFunction[algebraic]{cone}(x,y)
{x}
{y}
{sqrt(x^2+y^2)}
\defFunction[algebraic]{negcone}(x,y)
{x}
{y}
{-1*sqrt(x^2+y^2)}
\psSolid[object=surfaceparametree,base=0 3 0 3,
ngrid=20 20,
function=cone]
\psSolid[object=surfaceparametree,base=0 3 0 3,
ngrid=20 20,
function=negcone]
\end{pspicture}
\end{document}
了解更多信息:
- 参见文档:texdoc pst-solides3d
- 查看 PSTricks 画廊:http://www.tug.org/PSTricks/main.cgi?file=Examples/Gallery3D/Gallery3D
- 答案是pst-solides-3d 中的表面出现 Ghostscript 错误
编辑
或者,您可以按照文档第 8 章中的示例进行操作pst-solides3d
:
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\centering
\psset{unit=0.5,viewpoint=50 40 30 rtp2xyz}
\begin{pspicture}(-7,-8)(7,8)
\psSurface[ngrid=.25 .25,incolor=yellow,fillcolor=red,
algebraic](-4,-4)(4,4){sqrt(x^2+y^2)}
\psSurface[ngrid=.25 .25,incolor=yellow,fillcolor=blue,
axesboxed,algebraic,Zmin=-6,Zmax=6](-4,-4)(4,4){-1*sqrt(x^2+y^2)}
\end{pspicture}
\end{document}
答案2
您也可以使用pgfplots
。要添加三维表面,请使用\addplot3 [surf] {<expression for z>}
。您可以使用
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=-5:5,
y domain=-5:5,
xmin=-10,
xmax=10,
ymin=-10,
ymax=10,
restrict z to domain=-5:5]
\addplot3 [surf,shade=interp] {sqrt(x^2 + y^2};
\addplot3 [surf] {-sqrt(x^2 + y^2};
\end{axis}
\end{tikzpicture}
\end{document}
如果希望网格点位于等值线上,可以使用\addplot3 ({<x expression>}, {<y expression>}, {<z expression});
参数图的语法:
\begin{tikzpicture}
\begin{axis}[
domain=0:5,
y domain=0:2*pi,
xmin=-10,
xmax=10,
ymin=-10,
ymax=10,
samples=20]
\addplot3 [surf,z buffer=sort]
({x*cos(deg(y))},
{x*sin(deg(y))},
{x});
\addplot3 [surf,z buffer=sort]
({x*cos(deg(y))},
{x*sin(deg(y))},
{-x});
\end{axis}
\end{tikzpicture}
答案3
@jake 和 @ cmhughes:非常感谢。非常好。我很感激。
@cmhughes:我采用了你的想法,使用极坐标参数来参数化圆锥体。
\documentclass{article}
\usepackage{pst-solides3d}
\usepackage{pst-3dplot}
\begin{document}
\psset{Decran=20, linecolor=gray}
\begin{pspicture}(-5,-5)(5,5)
\defFunction[algebraic]{cone}(r,t)
{r*cos(t)}
{r*sin(t)}
{r}
\psSolid[object=surfaceparametree,base=-3 3 0 360,
ngrid=36 60,
function=cone,incolor=white]
\axesIIID(4,4,5)
\end{pspicture}
\end{document}
@jake:我意识到你已经在使用极坐标参数了。下面给出了一个稍微简化的版本。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=-5:5,
y domain=0:2*pi,
xmin=-10,
xmax=10,
ymin=-10,
ymax=10,
samples=20]
\addplot3 [surf,z buffer=sort]
({x*cos(deg(y))},
{x*sin(deg(y))},
{x} );
\end{axis}
\end{tikzpicture}
\end{document}