确定两条线的交点最简单的方法是什么?我试过
\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)中?
编辑:看起来这个语法是现已弃用:(