TikZ 没有找到图和线之间的所有交点

TikZ 没有找到图和线之间的所有交点

为什么 TikZ 找不到所有交叉点。它们显然在那里……

缺失交叉点

\documentclass[border=10mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}
\begin{tikzpicture}[point/.style={fill=blue,minimum size=1mm,inner sep=0pt,circle}]
    % Zoom (to prevent oveflow)
    \def\yzoom{100}
    % Plots
    \foreach \T/\xmin/\a in {%
        0.27/1.538/a,
        0.28/1.590/b,
        0.29/1.649/c
    } {
        \draw [thin,name path global/.expanded={kurve \a}]
            plot [raw gnuplot] function {%
                set xrange [\xmin:10];
                set yrange [0:0.08*\yzoom];
                set samples 1000;
                f(x) = \yzoom*(\T/(x-1) - 1/(x**2));
                plot f(x);
            };
    }
    % Lines
    \foreach \p/\a in {%
        %% T = 0.27
        0.0231/a,
        %% T = 0.28
        0.02855/b,
        %% T = 0.29
        0.0338/c
    }{
        \draw [red,thin,name path global/.expanded={linie \a}]
            (0,\p*\yzoom) -- (10,\p*\yzoom) node [fill=white,pos=0.1] {\a};
    }
    % Intersections points
    \path [name intersections={of=kurve a and linie a,by={P1,P2,P3}}]
        (P1) node [point] {} (P2) node [point] {} (P3) node [point] {};
    \path [name intersections={of=kurve b and linie b,by={P1,P2,P3}}]
        (P1) node [point] {} (P2) node [point] {} (P3) node [point] {};
    \path [name intersections={of=kurve c and linie c,by={P1,P2,P3}}]
        (P1) node [point] {} (P2) node [point] {} (P3) node [point] {};
\end{tikzpicture}
\end{document}

路径的名称似乎没有问题,但 TikZ 缺少四个交叉点。

附加问题:是否可以使用第二部分解决最后一部分(添加蓝点)\foreach?我试过了,但出现了错误File ended while scanning use of \tikz@intersect@path@names@parse.

答案1

我不知道为什么 PGF 找不到这些交点,这可能与如何从值表创建的点在内部构建路径有关gnuplot

如果你

  • 设置set samples 100
  • 使用原始样本设置选项smooth

现已找到所有交叉点。


of( \tikz@intersect@path@names@parse) 要求周围的空格and,如果使用的话,空格显然会被剥离of=kurve \a and linie \a,因此您需要执行of/.expanded=kurve \a\space and linie \aof={kurve \a} and linie \a

您还可能在\foreach其中引入虚假空格:

\foreach \p/\a in {%
    %% T = 0.27
    0.0231/a,
    %% T = 0.28
    0.02855/b,
    %% T = 0.29
    0.0338/c             % <- there’s a space!
}{

.expanded如果您有钥匙,这个空间实际上可能会有所帮助of,但通常会带来麻烦,因此建议避免这种情况。

(该空间也存在于另一个\foreach循环中,但由于它在 PGFkeys 处理之前使用.expanded,因此被剥离了。)

代码

\documentclass[convert=false,tikz]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[point/.style={fill=blue,minimum size=1mm,inner sep=0pt,circle}]
    % Zoom (to prevent oveflow)
    \def\yzoom{100}
    % Plots
    \foreach \T/\xmin/\a in {
        0.27/1.538/a,
        0.28/1.590/b,
        0.29/1.649/c
    } {
        \draw [thin,smooth,name path global/.expanded={kurve \a}]
            plot [raw gnuplot] function {%
                set xrange [\xmin:10];
                set yrange [0:0.08*\yzoom];
                set samples 1000;
                f(x) = \yzoom*(\T/(x-1) - 1/(x**2));
                plot f(x);
            };
    }
    % Lines
    \foreach \p/\a in {%
        %% T = 0.27
        0.0231/a,
        %% T = 0.28
        0.02855/b,
        %% T = 0.29
        0.0338/c%
    }{
        \draw [red,thin,name path global/.expanded={linie \a}]
            (0,\p*\yzoom) -- (10,\p*\yzoom) node [fill=white,pos=0.1] {\a};
        \path [name intersections={of={kurve \a} and linie \a, total=\t}] \foreach \s in {1,...,\t} {(intersection-\s) node[point]{}};
    }
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容