如何画圆锥

如何画圆锥

我想绘制由方程 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}

了解更多信息:

编辑

或者,您可以按照文档第 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}

enter image description here

答案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}

enter image description here

@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}

enter image description here

相关内容