我试图模仿一个问题(使用 pgfplots 绘制封闭的三维路径) 并在 pgfplots 中绘制分段定义曲线,但我的图没有在 z 轴上对齐,尽管数学(假设我没有搞错我的计算)表明它们应该对齐。更改第二个 addplot3 中的 pi 倍数通常不会改变它,除非我输入 25 或 200 这样的大倍数。将它们放入单独的 \begin{axis}...\end{axis} 环境中也无法使其工作。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\[
\begin{tikzpicture}
\begin{axis}[axis lines=middle,view={135}{45},xlabel=$x$,ylabel=$y$,zlabel=$z$,clip=false,xtick=\empty,ytick=\empty,ztick=\empty]
\addplot3[double,domain=0:180,samples=90,samples y=1]
({1-cos(2*x)},{-sin(2*x)},{0.125*sin(4*x)-0.5*x});
\addplot3[double,domain=180:360,samples=90,samples y=1]
({cos(2*x)-1},{-sin(2*x)},{0.5*x-0.125*sin(4*x)-pi});
\end{axis}
\end{tikzpicture}
\]
\end{document}
有没有一种简单的方法可以让图正确“对齐”(顶部环应该相对于 z 轴向下移动,以便形成一个闭合环),而我忽略了这一点?z 轴看起来也不均匀,不像 x 和 y,所以我不知道这是否是发生了什么事情的征兆。感谢您的见解!
编辑:KersouMan 的精彩发现(谢谢!!),我似乎将 pi 与度数混合在一起了,因此对此进行了编辑(使用 180 而不是 pi),我得到了所需的循环,但它比应有的要古怪得多。如下图所示:
图表应该如果投影到 x,y 平面,看起来更像一个非常简单的数字 8(由两个相邻的圆组成)。
编辑 2:这里有一些更好的代码来复制上面的第三张图片:
\[
\begin{tikzpicture}
\begin{axis}[axis lines=middle,view={135}{45},xlabel=$x$,
ylabel=$y$,zlabel=$z$,clip=false,xtick=\empty,ytick=\empty,ztick=\empty,zmax=120]
\addplot3[double,domain=0:180,samples=90,samples y=1]
({1-cos(2*x)},{-sin(2*x)},{0.125*sin(4*x)-0.5*x});
\addplot3[double,domain=180:360,samples=90,samples y=1]
({cos(2*x)-1},{-sin(2*x)},{0.5*x-0.125*sin(4*x)-180});
\end{axis}
\end{tikzpicture}
\]
我觉得这里那里有点失真(也许是视角问题?),但除此之外,还算不错。我很高兴它至少现在是一个闭环!
答案1
这是在一张图中绘制曲线的建议。根据您想要实现的目标,您可能更适合使用trig format=rad
,它允许您以弧度指定角度。我不完全了解您想要什么。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\[
\begin{tikzpicture}
\begin{axis}[axis lines=middle,view={135}{45},xlabel=$x$,
ylabel=$y$,zlabel=$z$,clip=false,xtick=\empty,ytick=\empty,ztick=\empty,zmax=120]
\addplot3[double,domain=0:360,samples=181,samples y=1]
({sign(180-x)*(1-cos(2*x))},{-sin(2*x)},
{ifthenelse(x<180,0.125*sin(4*x)-0.5*x,0.5*x-0.125*sin(4*x)-180)});
\end{axis}
\end{tikzpicture}
\]
\end{document}