TikZ:两条线的交点

TikZ:两条线的交点

确定两条线的交点最简单的方法是什么?我试过

\usetikzlibrary{intersections}
\begin{tikzpicture}[every node/.style={black,above right}]
\draw[name path=line 1] (0,0) -- (2,2);
\draw[name path=line 2] (2,0) -- (0,2);
\fill[red,name intersections={of=line 1 and line 2}]
    (intersection-1) circle (2pt) node {1}
    (intersection-2) circle (2pt) node {2}
\end{tikzpicture}

在此处输入图片描述

答案1

代码无法按提供的方式运行的原因是只有一个交叉点,因此(intersection-2)不存在。缓解此类问题的一种方法是指定total=\t包含交叉点的总数,并使用循环foreach遍历每个交叉点:

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

\begin{document}
\begin{tikzpicture}[every node/.style={black,above right}]
\draw[name path=line 1] (0,0) -- (2,2);
\draw[name path=line 2] (2,0) -- (0,2);
\fill[red,name intersections={of=line 1 and line 2,total=\t}]
    \foreach \s in {1,...,\t}{(intersection-\s) circle (2pt) node {\footnotesize\s}};
\end{tikzpicture}
\end{document}

答案2

阅读PGF 手册有帮助 ;)。请参阅第 54 页及后续页面,我根据该页面制作了以下内容:

\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc,intersections,through,backgrounds}

\begin{document}

\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (3,3);
\draw [name path=A--B] (A) -- (B);
\coordinate (C) at (3,0);
\coordinate (D) at (0,1);
\draw [name path=C--D] (C) -- (D);
\path [name intersections={of=A--B and C--D,by=E}];
\node [fill=red,inner sep=1pt,label=-90:$E$] at (E) {};
\end{tikzpicture}

\end{document}

结果是:

在此处输入图片描述

答案3

一种替代方案,采用 的形式tkz-euclide

\documentclass{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
  \tkzDefPoint(0,0){A}  \tkzDefPoint(2,2){B}
  \tkzDefPoint(0,2){C}  \tkzDefPoint(2,0){D}
  \tkzDrawSegments(A,B C,D)
  \tkzInterLL(A,B)(C,D) \tkzGetPoint{E}
  \tkzDrawPoints(E) \tkzLabelPoints[below](E)
\end{tikzpicture}
\end{document}

前三行定义点并绘制它们之间的线段。\tkzInterLL计算线A--B和的交点C--D,同时\tkzGetPoint{E}为点命名。最后绘制并标记点。

如果你愿意的话,你可以将它与“普通”的 TikZ 代码混合使用,例如(借用 Tom Bombadil 的话):

\documentclass{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (3,3);
\coordinate (C) at (3,0);
\coordinate (D) at (0,1);
\draw (A) -- (B);
\draw (C) -- (D);
  \tkzInterLL(A,B)(C,D) \tkzGetPoint{E}
\node [fill=red,inner sep=1pt,label=-90:$E$] at (E) {};
\end{tikzpicture}
\end{document}

这仅用于tkz-euclide查找和命名交叉点。

答案4

对于两个线段的交点,我们不需要库intersections。我们可以直接在 tikz 中使用点,例如(intersection of A--B and C--D)

\documentclass[tikz,border=5pt]{standalone}

\begin{document}
  \begin{tikzpicture}
    \draw (0,0) coordinate(A) -- (2,2) coordinate (B);
    \draw (2,0) coordinate(C) -- (0,2) coordinate (D);
    \node[red,scale=3] at (intersection of  A--B and C--D){.};
  \end{tikzpicture}
\end{document}

在此处输入图片描述

笔记:我不认为这种语法在手册(v3.0)中?

编辑:看起来这个语法是现已弃用:(

相关内容