使用 tikz 检测线段交叉点

使用 tikz 检测线段交叉点

我必须检测参数图中两个线段相交的情况,需要将坐标计算到 tikz 图片中,但它不起作用,似乎“intersections=…total=\t”或“\equal{\t}{1}”没有预期的结果。

当 2 个片段交叉到一个设计参数中时,您会检测到,该参数需要计算 tikz 图像中的坐标。但无法运行。我在交集计算中看到“total=\t”,所以我的 \t 与 1 的比较测试没有表现出任何差异。

代码/Le代码

\begin{tikzpicture}
  \draw [name path=l1] (-3,-3) -- (6,4);
  \draw [name path=l2] (-2,2) -- (2,-2);
  \path [name intersections={of=l1 and l2,name=int,total=\t}];
  \ifthenelse{\equal{\t}{1}}{
    \coordinate [label=I] (I) at (int-1);
  }{}
\end{tikzpicture}

也不/ni

\begin{tikzpicture}
  \draw [name path=l1] (-3,-3) -- (6,4);
  \draw [name path=l2] (-2,2) -- (2,-2);
  \path [name intersections={of=l1 and l2,by=I}, 
         every node/.style={label=I}];
\end{tikzpicture}

不打印 I 标签,因此我猜测没有创建坐标。 /我没有看到我的标签,或者我认为它没有创建。

但代码/Alors que le code

\begin{tikzpicture}
  \draw [name path=l1] (-3,-3) -- (6,4);
  \draw [name path=l2] (-2,2) -- (2,-2);
  \path [name intersections={of=l1 and l2,name=int}];
  \coordinate [label=I] (I) at (int-1);
\end{tikzpicture}

当线段不相交时显示 I 点标签或失败。 / 显示我所在的点的标签,或者设置 si 段不予退款。

我怎样才能捕获“总计”值,或者捕获失败?

我如何能恢复“全部”的价值,从而摆脱错误?

编辑:按照要求完成脚本。

\documentclass{article}
\usepackage{ifthen}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}

\begin{tikzpicture}
  \draw [name path=l1] (-2,-3) -- (4,2);
  \draw [name path=l2] (-1,2) -- (2,-2);
  \path [name intersections={of=l1 and l2,name=int,total=\t}];
  \ifthenelse{\equal{\t}{1}}{
    \coordinate [label=I] (I) at (int-1);
  }{}
\end{tikzpicture}

\begin{tikzpicture}
  \draw [name path=l3] (-2,-3) -- (4,2);
  \draw [name path=l4] (-1,2) -- (2,-2);
  \path [name intersections={of=l3 and l4,by=I},
         every node/.style={label=I}];
\end{tikzpicture}

\begin{tikzpicture}
  \draw [name path=l5] (-2,-3) -- (4,2);
    \draw [name path=l6] (-1,2) -- (2,-2);
    %\draw [name path=l6] (-1,2) -- (-2,-2); % non intersect = failure
  \path [name intersections={of=l5 and l6,name=inter}];
  \coordinate [label=J] (J) at (inter-1);
\end{tikzpicture}

\end{document}

我需要在第一个交叉点创建坐标“I”(因为 J 在第三个交叉点),但我需要避免当线段不相交时失败。

答案1

好的,看来我有一个答案了。

\ifthenelse{} 进入 tikzpicture env 需要在路径指令之外。因此在编译时,pdftex 需要以“;”结束路径,因此 Intersections.total 属性引用已关闭。

但是 \ifnum{} 运行完美。

我的解决方案是:

\usepackage{ifthen}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}

    % 2 segments that intersect = node I
  \draw [name path=l1] (-2,2) -- (2,1.5);
  \draw [name path=l2] (-2,1.5) -- (2,2);
  \path [name intersections={of=l1 and l2, name=i, total=\t}]
        \ifnum \t=1 (i-1) node [style=above] {I} \fi;

  % 2 parallel segments = no intersection = no node J and no compilation failure
  \draw [name path=l3] (-2,0) -- (2,0);
  \draw [name path=l4] (-2,0.2) -- (2,0.2);
  \path [name intersections={of=l3 and l4, name=i, total=\t}]
        \ifnum \t=1 (i-1) node [style=above] {J} \fi;

\end{tikzpicture}
\end{document}

相关内容