\newpage \section{Intersections} % (fold) \label{sec:intersections} It's an essential tool. For the moment, the classes concerned are lines, circles and ellipses, with the following combinations: line-line; line-circle; circle-circle and line-ellipse. The argument is a pair of objects, in any order. Results consist of one or two values, either points, boolean \tkzname{false} or underscore |_|. \subsection{Line-line} % (fold) \label{sub:line_line} The result is of the form: |point| or |false|. \begin{minipage}{0.6\textwidth} \begin{Verbatim} \directlua{% init_elements () z.A = point : new (1,-1) z.B = point : new (4,1) z.C = point : new (2,1) z.D = point : new (4,-2) z.I = point : new (0,0) L.AB = line : new (z.A,z.B) L.CD = line : new (z.C,z.D) x = intersection (L.AB,L.CD) if x == false then tex.print('error') else z.I = x end } \begin{tikzpicture} \tkzGetNodes \tkzDrawSegments(A,B C,D) \tkzDrawPoints(A,B,C,D,I) \tkzLabelPoints(A,B,C,D,I) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{0.4\textwidth} \directlua{% init_elements () z.A = point : new (1,-1) z.B = point : new (4,1) z.C = point : new (2,1) z.D = point : new (4,-2) z.I = point : new (0,0) L.AB = line : new (z.A,z.B) L.CD = line : new (z.C,z.D) x = intersection (L.AB,L.CD) if x == false then tex.print('error') else z.I = x end } \begin{tikzpicture} \tkzGetNodes \tkzDrawSegments(A,B C,D) \tkzDrawPoints(A,B,C,D,I) \tkzLabelPoints(A,B,C,D,I) \end{tikzpicture} \end{minipage} Other examples: \ref{sub:altshiller}, \ref{sub:lemoine}, \ref{sub:alternate} % subsection line_line (end) \newpage \subsection{Line-circle} % (fold) \label{sub:line_circle} The result is of the form : |point,point| or |false,false|. If the line is tangent to the circle, then the two points are identical. You can ignore one of the points by using the underscore: |_,point| or |point,_|. When the intersection yields two solutions, the order of the points is determined by the argument of |(z.p - z.c)| with |c| center of the circle and |p| point of intersection. The first solution corresponds to the smallest argument (arguments are between 0 and $2\pi$). \begin{minipage}{0.6\textwidth} \begin{Verbatim} \directlua{% init_elements () z.A = point : new (1,-1) z.B = point : new (1,2) L.AB = line : new (z.A,z.B) z.O = point : new (2,1) z.D = point : new (3,1) z.E = point : new (3,2) L.AE = line : new (z.A,z.E) C.OD = circle : new (z.O,z.D) z.I,_ = intersection (L.AB,C.OD) _,z.K = intersection (C.OD,L.AE) } \begin{tikzpicture} \tkzGetNodes \tkzDrawLines(A,B A,E) \tkzDrawCircle(O,D) \tkzDrawPoints(A,B,O,D,I,K) \tkzLabelPoints[left](A,B,O,D,I,K) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{0.4\textwidth} \directlua{% init_elements () scale = 2 z.A = point : new (1,-1) z.B = point : new (1,2) L.AB = line : new (z.A,z.B) z.O = point : new (2,1) z.D = point : new (3,1) z.E = point : new (3,2) L.AE = line : new (z.A,z.E) C.OD = circle : new (z.O,z.D) z.I,_ = intersection (L.AB,C.OD) _,z.K = intersection (C.OD,L.AE) } \begin{tikzpicture} \tkzGetNodes \tkzDrawLines[add=.1 and .1](A,B A,E) \tkzDrawCircle(O,D) \tkzDrawPoints(A,B,O,D,I,K) \tkzLabelPoints[left](A,B,O,D,I,K) \end{tikzpicture} \hfill \end{minipage} Other examples: \ref{sub:altshiller} % subsection line_circle (end) \newpage \subsection{Circle-circle} % (fold) \label{sub:circle_circle} The result is of the form : |point,point| or |false,false|. If the circles are tangent, then the two points are identical. You can ignore one of the points by using the underscore: |_ , point| or |point , _|. As for the intersection of a line and a circle, consider the argument of |z.p-z.c| with |c| center of the first circle and |p| point of intersection. The first solution corresponds to the smallest argument (arguments are between 0 and $2\pi$). \begin{minipage}{0.5\textwidth} \begin{Verbatim} \directlua{% init_elements () z.A = point : new (1,1) z.B = point : new (2,2) z.C = point : new (3,3) z.D = point : new (3,0) C.AB = circle : new (z.A,z.B) C.CB = circle : new (z.C,z.B) z.I,_ = intersection (C.AB,C.CB) C.DC = circle : new (z.D,z.C) z.J,z.K = intersection (C.DC,C.CB) } \begin{tikzpicture} \tkzGetNodes \tkzDrawCircles(A,B C,B D,C) \tkzDrawPoints(A,I,C,D,J,K) \tkzLabelPoints(A,I,C,D,J,K) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{0.5\textwidth} \directlua{% init_elements () z.A = point : new (1,1) z.B = point : new (2,2) z.C = point : new (3,3) z.D = point : new (3,0) C.AB = circle : new (z.A,z.B) C.CB = circle : new (z.C,z.B) z.I,_ = intersection (C.AB,C.CB) C.DC = circle : new (z.D,z.C) z.J,z.K = intersection (C.DC,C.CB) } \begin{tikzpicture} \tkzGetNodes \tkzDrawCircles(A,B C,B D,C) \tkzDrawPoints(A,I,C,D,J,K) \tkzLabelPoints(A,I,C,D,J,K) \end{tikzpicture} \end{minipage} Other examples: \ref{sub:altshiller}, \ref{sub:the_figure_pappus_circle} % subsection circle_circle (end) \newpage \subsection{Line-ellipse} % (fold) \label{sub:line_ellipse} The following example is complex, but it shows the possibilities of Lua. The designation of intersection points is a little more complicated than the previous one, as the argument characterizing the major axis must be taken into account. The principle is the same, but this argument must be subtracted. In concrete terms, you need to consider the slopes of the lines formed by the center of the ellipse and the points of intersection, and the slope of the major axis. \vspace{1em} \begin{minipage}{0.5\textwidth} \begin{Verbatim} \directlua{% init_elements () scale = .5 z.a = point: new (5 , 2) z.b = point: new (-4 , 0) z.m = point: new (2 , 4) z.n = point: new (4 , 4) L.ab = line : new (z.a,z.b) L.mn = line : new (z.m,z.n) z.c = L.ab. mid z.e = L.ab: point (-.2) E = ellipse: foci (z.a,z.b,z.e) z.u,z.v = intersection (E,L.mn) -- transfer to tex a = E.Rx b = E.Ry ang = math.deg(E.slope) } \begin{tikzpicture} \tkzGetNodes \tkzDrawLines[red](a,b u,v) % p,s p,t \tkzDrawPoints(a,b,c,e,u,v) % \tkzLabelPoints(a,b,c,u,v) \tkzDrawEllipse[teal](c,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang}) \tkzDrawSegments(c,u c,v) \tkzFillAngles[green!30,opacity=.4](e,c,v) \tkzFillAngles[green!80,opacity=.4](e,c,u) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{0.5\textwidth} \directlua{% init_elements () scale =.5 z.a = point: new (5 , 2) z.b = point: new (-4 , 0) z.m = point: new (2 , 4) z.n = point: new (4 , 4) L.ab = line : new (z.a,z.b) L.mn = line : new (z.m,z.n) z.c = L.ab. mid z.e = L.ab: point (-.2) E = ellipse: foci (z.a,z.b,z.e) z.u,z.v = intersection (E,L.mn) % transfer to tex a = E.Rx b = E.Ry ang = math.deg(E.slope) } \hspace*{\fill} \begin{tikzpicture} \tkzGetNodes \tkzDrawLines[red](a,b u,v) % p,s p,t \tkzDrawPoints(a,b,c,e,u,v) % \tkzLabelPoints(a,b,c,u,v) \tkzDrawEllipse[teal](c,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang}) \tkzFillAngles[green!30,opacity=.4](e,c,v) \tkzFillAngles[green!80,opacity=.4](e,c,u) \tkzDrawSegments(c,u c,v) \end{tikzpicture} \hspace*{\fill} \end{minipage} Other examples: \ref{ssub:function_tkzname_ellipse__foci}, \ref{sub:hexagram} % subsection line_ellipse (end) % section intersections (end)