How to get intersection points of a self intersecting path?
A trick which seems to work here: searching the intersection of the curve… and its reverse. Applied with MetaPost.
u := 3cm;
path curve[];
curve1 = ((0,0)--(3,0)--(2,1)--(1,-1)) scaled u;
curve2 = ((0,0) .. controls (5,1) and (0,3) .. (2,-1)) scaled u;
def self_intersection(expr curve) =
draw curve;
drawdot curve intersectionpoint reverse curve withpen pencircle scaled 6bp;
enddef;
beginfig(1);
self_intersection(curve1);
self_intersection(curve2 shifted (3.5u, 0));
endfig;
end.
The same idea seems to also work with TikZ:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\draw[name path=curve1]
(0,0) -- (3,0) -- (2,1) -- (1,-1);
\path[name path=curve1r]
(1,-1) -- (2,1) -- (3,0) -- (0,0);
\path[name intersections={of=curve1 and curve1r, by={a}}]
node[fill,circle,inner sep=1.5pt] at (a) {};
\begin{scope}[xshift=4cm]
\draw[name path=curve2]
(0,0) .. controls (5,1) and (0,3) .. (2,-1);
\path[name path=curve2r]
(2,-1) .. controls (0,3) and (5,1) .. (0,0);
\path[name intersections={of=curve2 and curve2r, by={b}}]
node[fill,circle,inner sep=1.5pt] at (b) {};
\end{scope}
\end{tikzpicture}
\end{document}