pgfplots分段定义路径不对齐

pgfplots分段定义路径不对齐

我试图模仿一个问题(使用 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}

在此处输入图片描述

相关内容