tikz-3dplot 绘制三维曲线和曲面

tikz-3dplot 绘制三维曲线和曲面

我使用过 tiikz 和 tikz-3dplot 包来绘制 3D 和 3D 图形。但我从未绘制过数学函数,也不知道该怎么做。

有人能给我一个最小的例子吗?我在网上找到的例子都是非常复杂的情节和图画。

具体来说,我想绘制曲线:z(x) = 1-x^2,在区间 x\in(-1, 1) 上。目前,我只需要在 2D 中绘制该曲线,但最终它应该是 3D 图中的曲线,我还想在其中绘制曲面 z(x,y) = 1-x^2-y。

感谢帮助!

答案1

这个问题有点难回答,但我会尝试。可以用 tikz-3dplot 绘制图吗?当然,这就是它有这个名字的原因。你总是可以绘制参数图,因为 TiZ 可以,然后 tikz-3dplot 的主要目的是安装正交视图。您提到的函数可以绘制,例如

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{60}{110}

\begin{tikzpicture}[pics/3d axes/.style={code={%
 \draw[-latex] (0,0,0) -- (#1,0,0) node[pos=1.1]{$x$}; 
 \draw[-latex] (0,0,0) -- (0,#1,0) node[pos=1.1]{$y$}; 
 \draw[-latex] (0,0,0) -- (0,0,#1) node[pos=1.1]{$y$}; 
}}]
\begin{scope}[tdplot_main_coords]
 \pic{3d axes=2.5};
 \draw plot[variable=\x,domain=-1:1,samples=73,smooth] 
 (\x,0,{1-\x*\x});
\end{scope} 
\begin{scope}[tdplot_main_coords,xshift=5cm]
 \pic{3d axes=2.5}; 
 \foreach \Y in {-1,-0.8,...,1}
 {\draw plot[variable=\x,domain=-1:1,samples=73,smooth] 
 (\x,\Y,{1-\x*\x-\Y});}
 \foreach \X in {-1,-0.8,...,1}
 {\draw plot[variable=\y,domain=-1:1,samples=73,smooth] 
 (\X,\y,{1-\X*\X-\y});}
\end{scope} 
\end{tikzpicture}
\end{document}

在此处输入图片描述

这些技巧将使您能够非常紧密地重现您链接到的 arXiv 论文的图表。您还可以在表面图中看到它没有隐藏隐藏的表面。只要您只画线,就没问题,否则请考虑切换到 pgfplots 或 asymptote。

附录:一些箭头。请注意,与装饰一样,dimension too large如果曲率太大,可能会出现错误。在这种情况下,如果您重新安装smooth添加了箭头的图,它们就会出现。如果您坚持smooth,您需要绘制两次路径,一次绘制完整的路径,一次绘制箭头,直到箭头应该所在的位置。

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{arrows.meta,bending,decorations.markings}
\tikzset{% 
    arc arrow/.style args={%
    to pos #1 with length #2}{
    decoration={
        markings,
         mark=at position 0 with {\pgfextra{%
         \pgfmathsetmacro{\tmpArrowTime}{#2/(\pgfdecoratedpathlength)}
         \xdef\tmpArrowTime{\tmpArrowTime}}},
        mark=at position {#1-\tmpArrowTime} with {\coordinate(@1);},
        mark=at position {#1-2*\tmpArrowTime/3} with {\coordinate(@2);},
        mark=at position {#1-\tmpArrowTime/3} with {\coordinate(@3);},
        mark=at position {#1} with {\coordinate(@4);
        \draw[-{Stealth[length=#2,bend]}]       
        (@1) .. controls (@2) and (@3) .. (@4);},
        },
     postaction=decorate,
     }
}

\begin{document}
\tdplotsetmaincoords{60}{110}

\begin{tikzpicture}[pics/3d axes/.style={code={%
 \draw[-latex] (0,0,0) -- (#1,0,0) node[pos=1.1]{$x$}; 
 \draw[-latex] (0,0,0) -- (0,#1,0) node[pos=1.1]{$y$}; 
 \draw[-latex] (0,0,0) -- (0,0,#1) node[pos=1.1]{$y$}; 
}}]
\begin{scope}[tdplot_main_coords]
 \pic{3d axes=2.5};
 \draw plot[variable=\x,domain=-1:1,samples=73,smooth] 
 (\x,0,{1-\x*\x});
\end{scope} 
\begin{scope}[tdplot_main_coords,xshift=5cm]
 \pic{3d axes=2.5}; 
 \foreach \Y in {-1,-0.8,...,1}
 {\draw[arc arrow=to pos {0.5-0.25*\Y} with length 2mm]  
 plot[variable=\x,domain=-1:1,samples=31] 
 (\x,\Y,{1-\x*\x-\Y});}
 \foreach \X in {-1,-0.8,...,1}
 {\draw
 plot[variable=\y,domain=-1:1,samples=31] 
 (\X,\y,{1-\X*\X-\y});}
\end{scope} 
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容