Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

what is the easiest way to determine the intersection of two lines? I tried

\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}

enter image description here

share|improve this question
    
That doesn't look like it's the result of your code. And that code looks pretty easy to me, what would you like improved? –  Andrew Stacey Oct 12 '11 at 21:22
    
Although, this question is quite old, let me ask you for some clarification: What do you understand under “line”? Your question and all answers only use two straight lines. For these you can use (intersection of c1--c2 and c3--c4). –  Qrrbrbirlbel Jun 8 '13 at 4:00
add comment

3 Answers

up vote 15 down vote accepted

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}
share|improve this answer
    
Thank you guys. @Tom Bombadil, his solution is also very good. The two will be useful to me. –  Regis da Silva Oct 12 '11 at 21:41
add comment

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:

enter image description here

share|improve this answer
add comment

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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.