在 TikZ 中反转路径

在 TikZ 中反转路径

当我\path plot function {x^2};在 tikz 中使用时,它会从左到右绘制(默认域是-5:5)。这很烦人,因为例如,人们无法堆积-- plot function {x^2 + 1} -- cycle;然后填满整个东西;它不会填充明显的循环,而是填充在对角之间自相交的循环,因为它“返回车厢”,可以这么说。

有没有办法plot function以相反的顺序生成点?或者,有没有办法让 tikz 以与指定点相反的顺序绘制路径?(最后一个方法更通用,因为路径的方向使用得很多。)

答案1

如果您使用 PGFplots 绘制函数,则路径将被反转并通过在选项stack plots=y中使用axis\closedcycle在第二个绘图后发出进行适当连接:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    stack plots=y,
    hide axis
]
\addplot [draw=orange,thick]{x^2};
\addplot [draw=orange, thick, fill=yellow] {1} \closedcycle;
\end{axis}
\end{tikzpicture}

\end{document}

如果您想要的只是填充的路径,则可以使用禁用轴hide axis

答案2

对于当前的 plot 函数实现,我认为这是不可能的,因为 pgf 按顺序读取 gnuplot 输出的文件。由于 gnuplot 从 x 的最低值到最高值计算函数值,因此不可能按相反顺序计算(请参阅文件 pgfmoduleplot.code.tex)(我可能错过了执行此操作的 gnuplot 选项)。

但是,您可以使用 pgf 数学引擎实现您想要的结果,如下所示,反转域的边界。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=.25]
  \fill plot (\x,\x^2) -- plot[domain=5:-5] (\x,\x^2 + 1) -- cycle;
\end{tikzpicture}
\end{document}

注意:这是我第一次向 tex.se 做出贡献。希望格式正确。

答案3

实际上,您可以强制 Gnuplot 按照您想要的顺序计算路径。这个想法是使用 Gnuplot 的参数曲线表示。

在以下示例中(在 %% 好部分,%% 坏部分只是为了展示如果不使用技巧会发生什么),我正常绘制第一条曲线,使用技巧绘制第二条曲线。使用重心公式将参数 t 的每个值(介于 0 和 1 之间)发送到所需的区间(此处按顺序为 [2,-1]):x = (1-t) *2 + t *(-1)

更一般地,如果您想将 [0,1] 发送到 [a,b](从 b 开始),则只需使用 (1-t)*b + t*a。

\documentclass{article}
\usepackage{tikz}
\begin{document}

%% Requires Gnuplot !

%% Functions definition
\newcommand{\funcf}[1]{(#1)**2)}   % it is wise to always put the #1 argument between ()
\newcommand{\funcg}[1]{1+(#1)**2)}

%% Bad 
\begin{tikzpicture}
    \fill
        plot[domain=-1:2, id=funcf] function {\funcf{x}}
        --  
        plot[domain=2:-1, id=funcgbad] function {\funcg{x}} % inverting boundaries does *NOT* work with Gnuplot
        -- cycle;
\end{tikzpicture}


%% Good 
\begin{tikzpicture}
    \fill
        plot[domain=-1:2, id=funcf] function {\funcf{x}}
        --  
        plot[domain=0:1, parametric, id=funcggood] function {(1-t)*2+t*(-1),\funcg{(1-t)*2+t*(-1)}} 
        -- cycle;
\end{tikzpicture}

\end{document}

相关内容