TikZ: Intersection of two lines
The reason the code does not work as provided is that there is only one intersection, and so (intersection-2)
does not exist. One way to alleviate this kind of issue is to specify total=\t
to contain the total number of intersections and the use a foreach
to loop through each intersection:
\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}
Reading the PGF Manual helps ;). See page 54ff, I made this from it:
\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}
which results in:
An alternative, in the form of 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}
The first three lines define the points and draw the line segments between them. \tkzInterLL
compute the intersection of the lines A--B
and C--D
, while \tkzGetPoint{E}
gives the point a name. Finally the point is drawn and labeled.
You can mix this with "normal" TikZ code if you want to, e.g. (borrowing from 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}
This only uses tkz-euclide
to find and name the intersection.