我使用过 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 绘制图吗?当然,这就是它有这个名字的原因。你总是可以绘制参数图,因为 Ti钾Z 可以,然后 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}