Tikz 绘制三维无限极限

Tikz 绘制三维无限极限

我正在尝试绘制半正定 2 乘 2 矩阵的锥体的 3D 表示。但是图的渐近行为使我限制了 z 的值(限制 z 命令)。但是,限制 z 的值会显示与图相交的 z=1 处的平面。如果我不限制 z 的值,无穷大极限会触发奇怪的行为...

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}

\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
                axis lines=left,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmin=0,
                zmax=1,
                ticks=none,
                view={240}{20},
                restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=-1:1]{(y^2)/x};
\end{axis}
\end{tikzpicture}
\end{document}

这是我在 z 中限制使用的代码。如果不绘制与 z=1 相交的平面,我如何才能得到相同的图?此外,如果您有任何想法可以使此图更清晰、更简洁,请随意提出。

谢谢。

罗曼在此处输入图片描述

答案1

还有另一个参数化。

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
                axis lines=left,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmin=0,
                zmax=1,
                unbounded coords=jump,
                x filter/.expression={x>1  ? nan : x},
                ticks=none,
                view={240}{20},
                restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({y/x},{sqrt(y)},{x});
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({y/x},{-sqrt(y)},{x});
\draw [draw=black!50, samples=25] plot[variable=\x, domain=-1:1]
({1},{\x},{\x*\x});
\end{axis}
\end{tikzpicture}
\end{document}

您可以使用过滤器。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
                axis lines=left,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmin=0,
                zmax=1,
                unbounded coords=jump,
                z filter/.expression={z>1  ? nan : z},
                ticks=none,
                view={240}{20},
                restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=-1:1]{(y^2)/x};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

更新:如果改变参数化,结果会看起来更好。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
                axis lines=left,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmin=0,
                zmax=1,
                unbounded coords=jump,
                z filter/.expression={z>1  ? nan : z},
                ticks=none,
                view={240}{20},
                restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{sqrt(y)},{(y)/x});
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{-sqrt(y)},{(y)/x});
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
                axis lines=left,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmin=0,
                zmax=1,
                unbounded coords=jump,
                z filter/.expression={z>1  ? nan : z},
                ticks=none,
                view={240}{20},
                restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{sqrt(y)},{(y)/x});
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{-sqrt(y)},{(y)/x});
\addplot3[draw=black!50,domain=-1:1] ({x^2},{x},1);
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我对上面的代码做了一些调整,以删除直线 (x=1,y=t,z=1 (参数 t))。下面的代码生成的图形正是我想要的。在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}
\begin{axis}[width=0.75*\textwidth,
                axis lines=left,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmin=0,
                zmax=1,
                ticks=none,
                view={240}{20},
                unbounded coords=jump,
                z filter/.expression={z>1 ? nan : z},
                restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, line width=0.25pt, samples=30, domain=0:1, y domain=0:1]({x},{sqrt(y)},{y/x});
\addplot3[mesh, draw=black!50, line width=0.25pt, samples=30, domain=0:1, y domain=0:1]({x},{-sqrt(y)},{y/x});
\addplot3[variable=t, mesh, draw=black!50, domain=-1:1] ({t^2},{t},1);
\end{axis}
\end{tikzpicture}
\end{document}

感谢您的帮助。

罗曼

相关内容