diff options
author | Karl Berry <karl@freefriends.org> | 2025-02-24 20:29:57 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2025-02-24 20:29:57 +0000 |
commit | 7852aac264119b644d4ff44a30bbf58b78969673 (patch) | |
tree | f9c4688aadebebb5be041c646b8ac99742d11b15 /Master | |
parent | be430c4bb16fc977fd4c5f80f5218d27604809e2 (diff) |
tkz-elements (24feb25)
git-svn-id: svn://tug.org/texlive/trunk@74262 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
59 files changed, 7854 insertions, 3407 deletions
diff --git a/Master/texmf-dist/doc/latex/tkz-elements/README.md b/Master/texmf-dist/doc/latex/tkz-elements/README.md index e1f8622bb09..6be42920f99 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/README.md +++ b/Master/texmf-dist/doc/latex/tkz-elements/README.md @@ -1,12 +1,12 @@ # tkz-elements — for euclidean geometry -Release 3.10c 2025/01/01 +Release 3.30c 2025/02/24 ## Description -`tkz-elements v.3.10c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`. +`tkz-elements v.3.30c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`. - The main possibility of programmation proposed is oriented "object programming" with object classes like point, line, triangle, circle and ellipse. For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings. You can use the option `mini` with `tkz-euclide` to load only the modules required for tracing. + The main possibility of programmation proposed is oriented "object programming" with object classes like point, line, triangle, circle and now, conic. For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings. You can use the option `mini` with `tkz-euclide` to load only the modules required for tracing. ## Licence @@ -63,6 +63,53 @@ Some examples will be stored on my site : [http://altermundus.fr](http://alter An important example `Golden Arbelos` using the package is on the site. All the files of the documentation are on the site. ## History + + - version 3.30c + - Major evolution of tkz-elements with the introduction of the "conic" class, which replaces the "ellipse" class. + + - The latter was based on the "ellipse" operation, whereas "plot coordinates" is now used to construct all conic sections: parabolas, hyperbolas, and ellipses. It is worth noting that the circle, although a conic section, is not included in this class. Its significance grants it a special status and a dedicated class of its own. + + - Another class has been introduced: the "occs" class (orthonormal Cartesian coordinate system). To simplify the construction of conic sections, it was necessary to use well-suited coordinate systems. + + - A major change is the removal of scaling within the "Lua" section. Initially, I was in favor of avoiding scaling in the "TikZ" part, but since most calculations were already performed there, I realized that it was significantly simpler to apply scaling within the tikzpicture environment. Technical complexities sometimes arise when scaling is handled in the "Lua" section, so I decided to remove this option. + + - Modifications: + + - In the "regular_polygon" class, I renamed the item "table" to "vertices," which is more appropriate and I also removed the "first" and "next" items, as they were unnecessary. + + - Correction of the code for the intersection of two circles, which did not provide an appropriate response in cases where no intersection was possible. + + - Improvement of the code for the "euler_line" method of the class "triangle". + + - Improvement of the code for the "is_orthogonal" method of the class "line". + + - Additions: + + - Major additions: the "conic" and "occs" classes. + + - An object of the "conic" class is created using the following arguments: focus, directrix, and eccentricity. + - The available methods are: points, point, antipode, tangent_at, tangent_from, intersection, in_out, orthopedic, and asymptotes. + + - The 'points' method, common in many classes, allows creating a set of coordinates defining an object (e.g., a conic), extending the 'point' method which creates individual points. + + - The functions EL_points, EL_bifocal, HY_bifocal, PA_dir, and PA_focus provide the necessary arguments depending on the given data and the conic section being constructed. + + - The transformations "projection_ll" and "affinity" are now available for the "line" class. + + - The creation of an object from the "occs" class is done using the data of a line and a point. This point will be the origin of the new coordinate system, while the line will define the direction of the new y-axis. + + - The 'kimberling' method allows the creation of some points using this notation with the 'triangle' class. + + - The methods: steiner_line, simson_line, fermat-axis, brocard_axis, lemoine_axis, orthic_axis and orthic_axis_points complete the methods of the triangle class, as well as the anticomplementary or anti method, the taylor_circle and the taylor_points methods. + + - Two macros for the 'tikzpicture' part have been created: \tkzDrawCoordinates for obtaining a curve from a table of coordinates and \tkzDrawPointOnCurve for placing a point on such a curve. + + - About documentation: + + - Removal of all “overfull boxes”. + - Added examples concerning new features. + - Corrected some examples, such as the Euler line. + - version 3.10c - Most of the functions have been optimized, and some have been commented on. - Object classes have been enhanced with new attributes. For a triangle, you can directly access the semiperimeter, area, inradius and circumradius. In some classes, the `exradius` attribute is replaced by `circumradius`. diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex index d1524ea0088..1ddccbe1d5a 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex @@ -42,7 +42,6 @@ Three attributes are used (south, west, radius). \begin{Verbatim} \directlua{% init_elements () - scale = .5 z.a = point: new (1, 1) z.b = point: new (5, 4) C.ab = circle : new (z.a,z.b) @@ -65,7 +64,6 @@ init_elements () \begin{minipage}{0.5\textwidth} \directlua{% init_elements () - scale = .5 z.a = point: new (1, 1) z.b = point: new (5, 4) C.ab = circle : new (z.a,z.b) @@ -76,7 +74,7 @@ init_elements () z.r,z.t = get_points (C.ab.ct : ortho_from (z.b)) } -\hfill\begin{tikzpicture} +\hfill\begin{tikzpicture}[scale=.5] \tkzGetNodes \tkzDrawPoints(a,b,c,s,w) \tkzLabelPoints(a,b,c,s,w) @@ -141,7 +139,7 @@ The circle of center $A$ passing through $B$ has perimeter \pmpn{\tkzUseLua{p}} \midrule \textbf{Reals} &&\\ \midrule -\Imeth{circle}{power (pt)} &| r = C.OA: power (z.M)| & [\ref{ssub:power_v1} ; \ref{ssub:power_v2} ; \ref{sub:apollonius_circle_v1_with_inversion} ] \\ +\Imeth{circle}{power (pt)} &| r = C.OA: power (z.M)| & \ref{sub:apollonius_circle_v1_with_inversion} ] \\ \midrule \textbf{Strings} &&\\ \midrule @@ -169,6 +167,7 @@ The circle of center $A$ passing through $B$ has perimeter \pmpn{\tkzUseLua{p}} \Imeth{circle}{tangent\_at (pt)} & |z.P=C.OA:tangent_at(z.M)| & [\ref{ssub:method_imeth_circle_tangent}] \\ \Imeth{circle}{tangent\_from (pt)}& |z.M,z.N=C.OA: tangent_from (z.P)| & [\ref{ssub:method_imeth_circle_tangent} ] \\ \Imeth{circle}{common\_tangent (C)}& |z.a,z.b = C.AC: common_tangent (C.EF)|& [\ref{ssub:common_tangent} ; \ref{sub:common_tangent_orthogonality}] \\ +\Imeth{circle}{polar()} & |L.polar=C.OA:polar ()| & [\ref{ssub:method_imeth_circle_polar_pt}] \\ \midrule \textbf{Circles}& &\\ \midrule @@ -531,7 +530,7 @@ init_elements () z.d = C.oa: inversion (z.c) p = C.oa: power (z.c) } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawCircle(o,a) \tkzDrawSegments(o,a o,c) @@ -545,7 +544,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale =.75 z.o = point: new (-1,2) z.a = point: new (2,1) C.oa = circle: new (z.o,z.a) @@ -555,7 +553,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawCircle(o,a) \tkzDrawSegments(o,a o,c) @@ -626,42 +624,42 @@ init_elements () The result is either a straight line or a circle. -\begin{minipage}{.55\textwidth} +\begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% init_elements () -scale = .7 -z.o,z.a = point: new (-1,3),point: new (2,3) -z.c = point: new (-2,1) -z.e,z.d = point: new (-2,7),point: new (-3,5) -C.oa = circle: new (z.o,z.a) -C.ed = circle: new (z.e,z.d) -C.co = circle: new (z.c,z.o) -obj = C.oa: inversion (C.co) - if obj.type == "line" - then z.p,z.q = get_points(obj) - else z.f,z.b = get_points(obj) end +z.o = point: new (-1,3) +z.a = point: new (2,3) +z.c = point: new (-2,1) +z.e, = point: new (-2,7) +z.d = point: new (-3,5) +C.oa = circle: new (z.o,z.a) +C.ed = circle: new (z.e,z.d) +C.co = circle: new (z.c,z.o) +obj = C.oa: inversion (C.co) +if obj.type == "line" + then z.p,z.q = get_points(obj) + else z.f,z.b = get_points(obj) end obj = C.oa: inversion(C.ed) if obj.type == "line" then z.p,z.q = get_points(obj) else z.f,z.b = get_points(obj) end color = "orange" } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawCircles[black](o,a) \tkzDrawCircles[teal](c,o e,d) \tkzDrawCircles[\tkzUseLua{color}](f,b) -\tkzDrawLines[\tkzUseLua{color}](p,q) +\tkzDrawSegments[\tkzUseLua{color}](p,q) \tkzDrawPoints(a,...,f,o,p,q) \tkzLabelPoints(a,...,f,o,p,q) \end{tikzpicture} \end{Verbatim} \end{minipage} -\begin{minipage}{.45\textwidth} - \directlua{% +\begin{minipage}{.5\textwidth} + \directlua{% init_elements () - scale = .7 z.o,z.a = point: new (-1,3),point: new (2,3) z.c = point: new (-2,1) z.e,z.d = point: new (-2,7),point: new (-3,5) @@ -680,12 +678,12 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawCircles[black](o,a) \tkzDrawCircles[teal](c,o e,d) \tkzDrawCircles[\tkzUseLua{color}](f,b) - \tkzDrawLines[\tkzUseLua{color}](p,q) + \tkzDrawSegments[\tkzUseLua{color}](p,q) \tkzDrawPoints(a,...,f,o,p,q) \tkzLabelPoints(a,...,f,o,p,q) \end{tikzpicture} @@ -703,7 +701,6 @@ Circles are geometrically similar to one another and mirror symmetric. Hence, a \begin{Verbatim} \directlua{% init_elements () - scale = 0.7 z.A = point : new ( 0 , 0 ) z.a = point : new ( 2 , 2 ) z.B = point : new ( 5 , 2 ) @@ -726,7 +723,6 @@ z.A2 = L.TA2.pb \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .7 z.A = point : new ( 0 , 0 ) z.a = point : new ( 2 , 2 ) z.B = point : new ( 5 , 2 ) @@ -739,7 +735,7 @@ z.A1 = L.TA1.pb z.A2 = L.TA2.pb } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale =.6] \tkzGetNodes \tkzDrawCircles(A,a B,b) \tkzDrawPoints(A,a,B,b,I,A1,A2) @@ -768,7 +764,7 @@ L.TA1,L.TA2 = C.Aa : tangent_from (z.I) z.A1 = L.TA1.pb z.A2 = L.TA2.pb } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircles(A,a B,b) \tkzDrawPoints(A,a,B,b,I,A1,A2) @@ -779,7 +775,6 @@ z.A2 = L.TA2.pb \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .75 z.A = point : new ( 0 , 0 ) z.a = point : new ( 2 , 2 ) z.B = point : new ( 3 , 2 ) @@ -792,7 +787,7 @@ z.A1 = L.TA1.pb z.A2 = L.TA2.pb } \begin{center} -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircles(A,a B,b) \tkzDrawPoints(A,a,B,b,I,A1,A2) @@ -816,7 +811,6 @@ Here I have also named \code{radical\_center} the point of intersection of the r \begin{Verbatim} \directlua{% init_elements () - scale = .8 z.O = point : new (0,0) z.x = point : new (1,0) z.y = point : new (4,0) @@ -836,7 +830,7 @@ init_elements () % z.H = L.OOp : projection (z.X) z.H = C.Ox : radical_center(C.Opy) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircles(O,a O',b P,z) \tkzDrawLines[red](a,X b',X H,X O,O') @@ -848,7 +842,6 @@ init_elements () \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale = .8 z.O = point : new (0,0) z.x = point : new (1,0) z.y = point : new (4,0) @@ -868,7 +861,7 @@ z.H = L.OOp : projection (z.X) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircles(O,a O',b P,z) \tkzDrawLines[red](a,X b',X H,X O,O') @@ -884,7 +877,9 @@ z.H = L.OOp : projection (z.X) \subsubsection{Method \Imeth{circle}{radical\_axis}(C)} % (fold) \label{ssub:method_imeth_circle_radical__axis_c} -The radical line, also called the radical axis, is the locus of points of equal circle power with respect to two nonconcentric circles. By the chordal theorem, it is perpendicular to the line of centers (Dörrie 1965). [\href{https://mathworld.wolfram.com/RadicalLine.html}{Weisstein, Eric W. "Radical Line." From MathWorld--A Wolfram Web Resource.} ] +The radical line, also called the radical axis, is the locus of points of equal circle power with respect to two nonconcentric circles. By the chordal theorem, it is perpendicular to the line of centers (Dörrie 1965). + + [\href{https://mathworld.wolfram.com/RadicalLine.html}{Weisstein, Eric W. "Radical Line." From MathWorld--A Wolfram Web Resource.} ] \vspace{6pt} Radical axis v1 @@ -895,7 +890,6 @@ Radical axis v1 \begin{Verbatim} \directlua{% init_elements () -scale = .75 z.X = point: new (0,0) z.B = point: new (2,2) z.Y = point: new (7,1) @@ -916,21 +910,20 @@ z.H = L.XY : projection (z.M) } \end{Verbatim} \end{minipage} -\begin{minipage}{.5\textwidth} +\begin{minipage}{.5\textwidth} \begin{Verbatim} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles(X,B Y,A') - \tkzDrawArc[dashed,delta=30](O,A')(A) - \tkzDrawPoints(A,B,A',B',M,H,X,Y,O,E,F) - \tkzDrawLines[red](A,M A',M X,Y E,F) - \tkzDrawLines[red,add=1 and 3](M,H) -\end{tikzpicture} + \begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawCircles(X,B Y,A') + \tkzDrawArc[dashed,delta=30](O,A')(A) + \tkzDrawPoints(A,B,A',B',M,H,X,Y,O,E,F) + \tkzDrawLines[red](A,M A',M X,Y E,F) + \tkzDrawLines[red,add=1 and 3](M,H) + \end{tikzpicture} \end{Verbatim} - + \directlua{% init_elements () - scale = .4 z.X = point : new (0,0) z.B = point : new (2,2) z.Y = point : new (7,1) @@ -950,7 +943,7 @@ z.H = L.XY : projection (z.M) z.H = L.XY : projection (z.M) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawCircles(X,B Y,A') \tkzDrawArc[dashed,delta=30](O,A')(A) @@ -970,7 +963,6 @@ Radical axis v2 \begin{Verbatim} \directlua{% init_elements () -scale = .5 z.O = point : new (-1,0) z.Op = point : new (4,-1) z.B = point : new (0,2) @@ -991,7 +983,7 @@ _,z.Kp = get_points (L.MKp) \end{minipage} \begin{minipage}{.5\textwidth} \begin{Verbatim} -\begin{tikzpicture} +\begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawCircles(O,B O',D) \tkzDrawLine(E,F) @@ -1006,7 +998,6 @@ _,z.Kp = get_points (L.MKp) \directlua{% init_elements () - scale =.5 z.O = point : new (-1,0) z.Op = point : new (4,-1) z.B = point : new (0,2) @@ -1024,7 +1015,7 @@ _,z.Kp = get_points (L.MKp) _,z.Kp = get_points (L.MKp) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawCircles(O,B O',D) \tkzDrawLine(E,F) @@ -1046,7 +1037,6 @@ Radical axis v3 \begin{Verbatim} \directlua{% init_elements () -scale =.5 z.O = point : new (0,0) z.B = point : new (4,0) z.Op = point : new (6,0) @@ -1064,7 +1054,7 @@ _,z.Tp = get_points (L) \end{minipage} \begin{minipage}{.5\textwidth} \begin{Verbatim} -\begin{tikzpicture} +\begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawCircles(O,B O',B) \tkzDrawSegments(M,T M,T') @@ -1077,7 +1067,6 @@ _,z.Tp = get_points (L) \end{Verbatim} \directlua{% init_elements () -scale =.5 z.O = point : new (0,0) z.B = point : new (4,0) z.Op = point : new (6,0) @@ -1092,7 +1081,7 @@ L = C.OpB : tangent_from (z.M) _,z.Tp = get_points (L) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawCircles(O,B O',B) \tkzDrawSegments(M,T M,T') @@ -1113,7 +1102,6 @@ Radical axis v4 \begin{Verbatim} \directlua{% init_elements () -scale =.5 z.O = point : new (0,0) z.B = point : new (5,0) z.Op = point : new (3,0) @@ -1131,7 +1119,7 @@ _,z.Tp = get_points (L)} \end{minipage} \begin{minipage}{.5\textwidth} \begin{Verbatim} -\begin{tikzpicture} +\begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawCircles(O,B O',B) \tkzDrawSegments(M,T M,T') @@ -1145,7 +1133,6 @@ _,z.Tp = get_points (L)} \directlua{% init_elements () -scale =.5 z.O = point : new (0,0) z.B = point : new (5,0) z.Op = point : new (3,0) @@ -1162,7 +1149,7 @@ scale =.5 } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawCircles(O,B O',B) \tkzDrawSegments(M,T M,T') @@ -1237,7 +1224,7 @@ init_elements () \end{minipage} % subsubsection (end) -\subsubsection{Common tangent: Angle of two intersecting circles} % (fold) +\subsubsection{Methode \Imeth{circle}{commun\_tangent}: Angle of two intersecting circles} % (fold) \label{ssub:common_tangent} Let be a tangent common to both circles at $T$ and $T'$ (closest to $C$). Let a secant parallel to this tangent pass through $C$. Then the segment $[TT']$ is seen from the other common point $D$ at an angle equal to half the angle of the two circles. @@ -1245,21 +1232,21 @@ Let be a tangent common to both circles at $T$ and $T'$ (closest to $C$). Let a \begin{Verbatim} \directlua{% init_elements () - z.A = point : new ( 0 , 0 ) - z.B = point : new ( 5 , 2 ) - L.AB = line : new ( z.A , z.B ) - z.C = point : new ( 1 , 2 ) - C.AC = circle : new (z.A,z.C) - C.BC = circle : new (z.B,z.C) - z.T,z.Tp = C.AC : common_tangent (C.BC) - L.TTp = line : new (z.T,z.Tp) - z.M = C.AC : point (0.45) - L.MC =line : new (z.M,z.C) - z.Mp = intersection (L.MC, C.BC) - L.mm = L.TTp : ll_from (z.C) - _,z.M = intersection (L.mm, C.AC) - z.Mp = intersection (L.mm, C.BC) - _,z.D = intersection (C.AC,C.BC) + z.A = point : new ( 0, 0) + z.B = point : new ( 5, 2) + L.AB = line : new ( z.A, z.B) + z.C = point : new ( 1, 2) + C.AC = circle : new (z.A,z.C) + C.BC = circle : new (z.B,z.C) + z.T,z.Tp = C.AC : common_tangent(C.BC) + L.TTp = line : new (z.T,z.Tp) + z.M = C.AC : point (0.45) + L.MC =line : new (z.M,z.C) + z.Mp = intersection (L.MC, C.BC) + L.mm = L.TTp : ll_from (z.C) + _,z.M = intersection (L.mm, C.AC) + z.Mp = intersection (L.mm, C.BC) + _,z.D = intersection (C.AC,C.BC) } \begin{tikzpicture} \tkzGetNodes @@ -1309,6 +1296,92 @@ _,z.D = intersection (C.AC,C.BC) \end{center} % subsubsection common_tangent (end) +\subsubsection{Method \Imeth{circle}{polar(pt)}} % (fold) +\label{ssub:method_imeth_circle_polar_pt} + +In geometry, a pole and polar are respectively a point and a line that have a unique reciprocal relationship with respect to a given conic section. + +Polar reciprocation in a given circle is the transformation of each point in the plane into its polar line and each line in the plane into its pole.[Wikipedia] + +This method currently only applies to the circle. + +The pole of a line $L$ in a circle $C$ is a point $Q$ that is the inversion in $C$ of the point $P$ on $L$ that is closest to the center of the circle. Conversely, the polar line (or polar) of a point $Q$ in a circle $C$ is the line $L$ such that its closest point P to the center of the circle is the inversion of $Q$ in $C$. + +\begin{Verbatim} +\directlua{ + z.o = point: new (-1,1) + z.t = point: new (1,3) + z.P = point: new (3.2,0) + C.o = circle: new (z.o,z.t) + L.P = C.o: polar (z.P) + z.a,z.b = get_points(L.P) + z.u,z.v = intersection (C.o,L.P) + z.K = L.P: projection (z.P) + L.K = C.o: polar (z.K) + z.ka,z.kb = get_points(L.K) + C.wH = C.o: inversion (L.P) + z.w,z.H = get_points(C.wH) + z.ap,z.bp = C.o: inversion (z.a,z.b) + L.oa = line : new (z.o,z.a) + z.cp = intersection(L.K,L.oa) + z.c = C.o: inversion (z.cp)} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawCircles[red,thick](o,t) + \tkzDrawCircles(w,H) + \tkzDrawLines[red](P,u P,v) + \tkzDrawLines[blue,thick](u,v) + \tkzDrawLines[add = 1 and 1,green!50!black,thick](ka,kb) + \tkzDrawSegments[dashed](o,P o,c' o,b' K,c) + \tkzMarkRightAngle[size=.1,fill=lightgray!15](o,c,K) + \tkzDrawPoints(o,w,K,P,a,b,u,v,a',b',c',c) + \tkzLabelPoints(o,w,b') + \tkzLabelPoints[above right,blue](a,b,u,v) + \tkzLabelPoints[above](c,a',c') + \tkzLabelPoints[right,blue](P) + \tkzLabelPoints[green!50!black,left](K) + \end{tikzpicture} +\end{Verbatim} + +\directlua{ + z.o = point: new (-1,1) + z.t = point: new (1,3) + z.P = point: new (3.2,0) + C.o = circle: new (z.o,z.t) + L.P = C.o: polar (z.P) + z.a,z.b = get_points(L.P) + z.u,z.v = intersection (C.o,L.P) + z.K = L.P: projection (z.P) + L.K = C.o: polar (z.K) + z.ka,z.kb = get_points(L.K) + C.wH = C.o: inversion (L.P) + z.w,z.H = get_points(C.wH) + z.ap,z.bp = C.o: inversion (z.a,z.b) + L.oa = line : new (z.o,z.a) + z.cp = intersection(L.K,L.oa) + z.c = C.o: inversion (z.cp)} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCircles[red,thick](o,t) + \tkzDrawCircles(w,H) + \tkzDrawLines[red](P,u P,v) + \tkzDrawLines[blue,thick](u,v) + \tkzDrawLines[add = 1 and 1,green!50!black,thick](ka,kb) + \tkzDrawSegments[dashed](o,P o,c' o,b' K,c) + \tkzMarkRightAngle[size=.1,fill=lightgray!15](o,c,K) + \tkzDrawPoints(o,w,K,P,a,b,u,v,a',b',c',c) + \tkzLabelPoints(o,w,b') + \tkzLabelPoints[above right,blue](a,b,u,v) + \tkzLabelPoints[above](c,a',c') + \tkzLabelPoints[right,blue](P) + \tkzLabelPoints[green!50!black,left](K) + \end{tikzpicture} +\end{center} + + +% subsubsection method_imeth_circle_polar_pt (end) + \subsubsection{Method \Imeth{circle}{orthogonal\_from (pt)}} % (fold) \label{ssub:method_imeth_circle_orthogonal_from_pt} @@ -1317,39 +1390,36 @@ In geometry, two circles are said to be orthogonal if their respective tangent l This method determines a circle with a given centre, orthogonal to a circle that is also given. \vspace{6pt} -\begin{minipage}{.5\textwidth} - \begin{Verbatim} - \directlua{% - init_elements () - scale = .6 - z.C_1 = point: new (0,0) - z.C_2 = point: new (8,0) - z.A = point: new (5,0) - C = circle: new (z.C_1,z.A) - z.S,z.T = get_points (C: orthogonal_from (z.C_2)) - } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles(C_1,T C_2,T) - \tkzDrawSegments(C_1,T C_2,T) - \tkzDrawLine(C_1,C_2) - \tkzMarkRightAngle[fill=teal,% - opacity=.2,size=1](C_1,T,C_2) - \tkzDrawPoints(C_1,C_2,T) - \tkzLabelPoints(C_1,C_2) - \tkzLabelPoints[above](T) - \tkzLabelSegment[left](C_1,T){r} - \tkzLabelSegments[right](C_2,T){$\gamma$} - \tkzLabelSegment[below](C_1,C_2){d} - \tkzLabelCircle[left=10pt](C_1,T)(180){Circle 1} - \tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2} - \end{tikzpicture} - \end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth} + +\begin{Verbatim} +\directlua{% +init_elements () + z.C_1 = point: new (0,0) + z.C_2 = point: new (8,0) + z.A = point: new (5,0) + C = circle: new (z.C_1,z.A) + z.S,z.T = get_points (C: orthogonal_from (z.C_2)) +} +\begin{tikzpicture}[ scale = .6] + \tkzGetNodes + \tkzDrawCircles(C_1,T C_2,T) + \tkzDrawSegments(C_1,T C_2,T) + \tkzDrawLine(C_1,C_2) + \tkzMarkRightAngle[fill=teal,% + opacity=.2,size=1](C_1,T,C_2) + \tkzDrawPoints(C_1,C_2,T) + \tkzLabelPoints(C_1,C_2) + \tkzLabelPoints[above](T) + \tkzLabelSegment[left](C_1,T){r} + \tkzLabelSegments[right](C_2,T){$\gamma$} + \tkzLabelSegment[below](C_1,C_2){d} + \tkzLabelCircle[left=10pt](C_1,T)(180){Circle 1} + \tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2} +\end{tikzpicture} +\end{Verbatim} + \directlua{% init_elements () - scale = .25 z.C_1 = point: new (0,0) z.C_2 = point: new (8,0) z.A = point: new (5,0) @@ -1357,7 +1427,7 @@ This method determines a circle with a given centre, orthogonal to a circle that z.S,z.T = get_points (C: orthogonal_from (z.C_2)) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawCircles(C_1,T C_2,T) \tkzDrawSegments(C_1,T C_2,T) @@ -1373,7 +1443,6 @@ This method determines a circle with a given centre, orthogonal to a circle that \tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2} \end{tikzpicture} \end{center} -\end{minipage} % subsubsection method_imeth_circle_orthogonal__from_pt (end) @@ -1385,20 +1454,21 @@ This method determines a circle with a given centre, orthogonal to a circle that \begin{Verbatim} \directlua{% init_elements () - z.O = point: new (0,1) - z.A = point: new (1,0) - z.z1 = point: new (-1.5,-1.5) - z.z2 = point: new (2.5,-1.25) - C.OA = circle: new (z.O,z.A) - C = C.OA: orthogonal_through (z.z1,z.z2) - z.c = C.center + z.O = point: new (0,1) + z.A = point: new (1,0) + z.z1 = point: new (-1.5,-1.5) + z.z2 = point: new (2.5,-1.25) + C.OA = circle: new (z.O,z.A) + C = C.OA: orthogonal_through(z.z1,z.z2) + z.c = C.center } \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircle(O,A) - \tkzDrawCircle[new](c,z1) - \tkzDrawPoints[new](O,A,z1,z2,c) - \tkzLabelPoints[right](O,A,z1,z2,c) + \tkzGetNodes + \tkzDrawCircle(O,A) + \tkzDrawCircle[new](c,z1) + \tkzDrawPoints[new](O,A,z1,z2,c) + \tkzLabelPoints[right](O,A) + \tkzLabelPoints[left](z1,z2,c) \end{tikzpicture} \end{Verbatim} \end{minipage} @@ -1419,7 +1489,8 @@ init_elements () \tkzDrawCircle(O,A) \tkzDrawCircle[orange](c,z1) \tkzDrawPoints[orange](O,A,z1,z2,c) - \tkzLabelPoints[right](O,A,z1,z2,c) + \tkzLabelPoints[right](O,A) + \tkzLabelPoints[left](z1,z2,c) \end{tikzpicture} \end{center} \end{minipage} @@ -1428,16 +1499,15 @@ init_elements () \subsubsection{Method \Imeth{circle}{mmidcircle}} % (fold) \label{ssub:midcircle} -\begin{minipage}{0.95\linewidth } \emph{From Eric Danneels and Floor van Lamoen: A midcircle of two given circles is a circle that swaps the two given circles by inversion. Midcircles are in the same pencil of circles as the given circles. The center of the midcircle(s) is one or both of the centers of similitude. We can distinguish four cases: \begin{enumerate}[label=(\roman*)] \item The two given circles intersect: there are two midcircles with centers at the centers of similitude of the given circles; \item One given circle is in the interior of the other given circle. Then there is one midcircle with center of similitude at the internal center of similitude of the given circles; \item One given circle is in the exterior of the other given circle. Then there is one midcircle with center at the external center of similitude of the given circles. Clearly the tangency cases can be seen as limit cases of the above; -\item If the circles intersect in a single point, the unique midcircle has center at the external similitude center or at internal similitude center. +\item If the circles intersect in a single point, the unique midcircle has center at the external similitude center or at internal similitude center. \end{enumerate} } -\end{minipage} + \vspace{1em} Let's look at each of these cases: @@ -1451,11 +1521,10 @@ We can obtain the centers of similarity of these two circles by constructing $EH \begin{Verbatim} \directlua{% init_elements () -scale = .8 -z.A = point : new ( 1 , 0 ) -z.B = point : new ( 3 , 0 ) -z.O = point : new ( 2.1, 0 ) -z.P = point : new ( 1 ,0 ) +z.A = point : new ( 1 , 0 ) +z.B = point : new ( 3 , 0 ) +z.O = point : new ( 2.1, 0 ) +z.P = point : new ( 1 ,0 ) C.AO = circle : new (z.A,z.O) C.BP = circle : new (z.B,z.P) z.E = C.AO.south @@ -1463,20 +1532,19 @@ z.H = C.AO.north z.F = C.BP.north z.G = C.BP.south C.IT,C.JV = C.AO : midcircle (C.BP) -z.I,z.T = get_points (C.IT) -z.J,z.V = get_points (C.JV) +z.I,z.T = get_points (C.IT) +z.J,z.V = get_points (C.JV) z.X,z.Y = intersection (C.AO,C.BP) -} +} \end{Verbatim} \end{minipage} -\begin{minipage}{.6\textwidth} +\begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .8 - z.A = point : new ( 1 , 0 ) - z.B = point : new ( 3 , 0 ) - z.O = point : new ( 2.1, 0 ) - z.P = point : new ( 1 ,0 ) + z.A = point : new ( 1 , 0 ) + z.B = point : new ( 3 , 0 ) + z.O = point : new ( 2.1, 0 ) + z.P = point : new ( 1 ,0 ) C.AO = circle : new (z.A,z.O) C.BP = circle : new (z.B,z.P) z.E = C.AO.south @@ -1484,90 +1552,91 @@ init_elements () z.F = C.BP.north z.G = C.BP.south C.IT,C.JV = C.AO : midcircle (C.BP) - z.I,z.T = get_points (C.IT) - z.J,z.V = get_points (C.JV) + z.I,z.T = get_points (C.IT) + z.J,z.V = get_points (C.JV) z.X,z.Y = intersection (C.AO,C.BP) } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles[teal,thick](A,O B,P) - \tkzDrawSegments[dashed,red](E,F I,B I,G I,F) - \tkzDrawLines[gray](I,T J,V) - \tkzDrawCircles[teal,thick](A,O B,P) - \tkzDrawCircles[red,thick](I,X J,X) - \tkzDrawPoints(A,B,I,J,E,F,G,H,X,Y) - \tkzDrawPoints[red](I,J) - \begin{scope}[font = \scriptsize] - \tkzLabelPoints(A,I,J,G) - \tkzLabelPoints[below left](E) - \tkzLabelPoints[right](B) - \tkzLabelPoints[above](F,H,X) - \tkzLabelPoints[above right](Y) - \end{scope} - \end{tikzpicture} + \begin{center} + \begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawCircles[teal,thick](A,O B,P) + \tkzDrawSegments[dashed,red](E,F I,B I,G I,F) + \tkzDrawLines[gray](I,T J,V) + \tkzDrawCircles[teal,thick](A,O B,P) + \tkzDrawCircles[red,thick](I,X J,X) + \tkzDrawPoints(A,B,I,J,E,F,G,H,X,Y) + \tkzDrawPoints[red](I,J) + \begin{scope}[font = \scriptsize] + \tkzLabelPoints(A,I,J,G) + \tkzLabelPoints[below left](E) + \tkzLabelPoints[right](B) + \tkzLabelPoints[above](F,H,X) + \tkzLabelPoints[above right](Y) + \end{scope} + \end{tikzpicture} + \end{center} \end{minipage} - -\vfill - \item One given circle is in the interior of the other given circle. \label{midcircle_diameter} -\begin{minipage}{.6\textwidth} + +\begin{minipage}{.45\textwidth} \begin{Verbatim} - \directlua{% -init_elements () - scale =.75 - z.A = point : new ( 3 , 0 ) - z.B = point : new ( 5 , 0 ) - z.O = point : new ( 2 , 0 ) - z.P = point : new ( 1 , 0 ) +\directlua{% + init_elements () + z.A = point : new ( 3 , 0 ) + z.B = point : new ( 5 , 0 ) + z.O = point : new ( 2 , 0 ) + z.P = point : new ( 1 , 0 ) + L.AB = line : new (z.A,z.B) + C.AO = circle : new (z.A,z.O) + C.BP = circle : new (z.B,z.P) + z.R,z.S = intersection (L.AB,C.BP) + z.U,z.V = intersection (L.AB,C.AO) + C.SV = circle: diameter (z.S,z.V) + C.UR = circle: diameter (z.U,z.R) + z.x = C.SV.center + z.y = C.UR.center + C.IT = C.AO : midcircle (C.BP) + z.I,z.T = get_points (C.IT) +} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.45\textwidth} +\directlua{% + init_elements () + z.A = point : new ( 3 , 0 ) + z.B = point : new ( 5 , 0 ) + z.O = point : new ( 2 , 0 ) + z.P = point : new ( 1 , 0 ) L.AB = line : new (z.A,z.B) C.AO = circle : new (z.A,z.O) C.BP = circle : new (z.B,z.P) z.R,z.S = intersection (L.AB,C.BP) - z.U,z.V = intersection (L.AB,C.AO) + z.U,z.V = intersection (L.AB,C.AO) C.SV = circle : diameter (z.S,z.V) C.UR = circle : diameter (z.U,z.R) z.x = C.SV.center z.y = C.UR.center C.IT = C.AO : midcircle (C.BP) - z.I,z.T = get_points (C.IT) + z.I,z.T = get_points (C.IT) } -\end{Verbatim} +\begin{center} + \begin{tikzpicture}[scale =.75] + \tkzGetNodes + \tkzDrawCircles[teal,thick](A,O B,P) + \tkzDrawCircles[green!20!black](x,S y,R) + \tkzDrawPoints(A,B) + \tkzDrawPoints[red](I) + \tkzLabelPoints(A,B,I) + \tkzDrawCircles[red,thick](I,T) + \tkzLabelCircle[below](x,V)(270){$(\alpha)$} + \tkzLabelCircle[below](y,R)(270){$(\beta)$} + \tkzLabelCircle[below](I,T)(250){$\textcolor{red}{(\gamma)}$} + \end{tikzpicture} +\end{center} + \end{minipage} -\begin{minipage}{.6\textwidth} - \directlua{% -init_elements () - scale =.75 - z.A = point : new ( 3 , 0 ) - z.B = point : new ( 5 , 0 ) - z.O = point : new ( 2 , 0 ) - z.P = point : new ( 1 , 0 ) - L.AB = line : new (z.A,z.B) - C.AO = circle : new (z.A,z.O) - C.BP = circle : new (z.B,z.P) - z.R,z.S = intersection (L.AB,C.BP) - z.U,z.V = intersection (L.AB,C.AO) - C.SV = circle : diameter (z.S,z.V) - C.UR = circle : diameter (z.U,z.R) - z.x = C.SV.center - z.y = C.UR.center - C.IT = C.AO : midcircle (C.BP) - z.I,z.T = get_points (C.IT) - } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles[teal,thick](A,O B,P) - \tkzDrawCircles[green!20!black](x,S y,R) - \tkzDrawPoints(A,B) - \tkzDrawPoints[red](I) - \tkzLabelPoints(A,B,I) - \tkzDrawCircles[red,thick](I,T) - \tkzLabelCircle[below](x,V)(270){$(\alpha)$} - \tkzLabelCircle[below](y,R)(270){$(\beta)$} - \tkzLabelCircle[below](I,T)(250){$\textcolor{red}{(\gamma)}$} - \end{tikzpicture} - \end{minipage} This case is a little more complicated. We'll construct the two circles $(\alpha)$ and $(\beta)$ tangent to the two given circles. Then we construct the radical circle orthogonal to the circles $(\alpha)$ and $(\beta)$. Its center is the radical center as well as the center of internal similtude of circles of center $A$ and $B$. @@ -1578,32 +1647,45 @@ $I$ is the center of external similarity of the two given circles. To obtain the \begin{Verbatim} \directlua{% init_elements () -scale=.75 -local a,b,c,d -z.A = point : new ( 0 , 0 ) -z.B = point : new ( 4 , 0 ) -z.a = point : new ( .5 , 0) -z.b = point : new ( 1 , 0) -C.Aa = circle : new (z.A,z.a) -C.Bb = circle : new (z.B,z.b) -L.AB = line : new (z.A,z.B) -z.E = C.Aa.north -z.F = C.Bb.north -L.EF = line : new (z.E,z.F) -C.IT = C.Aa : midcircle (C.Bb) -z.I,z.T = get_points (C.IT) -L.TF = C.Bb : tangent_from (z.I) -z.H = intersection (L.TF,C.IT) -z.E = intersection (L.TF,C.Aa) -z.F=L.TF.pb +z.A = point: new (0 , 0) +z.B = point: new (4 , 0) +z.a = point: new (.5 , 0) +z.b = point: new (1 , 0) +C.Aa = circle: new (z.A,z.a) +C.Bb = circle: new (z.B,z.b) +L.AB = line: new (z.A,z.B) +z.E = C.Aa.north +z.F = C.Bb.north +L.EF = line: new (z.E,z.F) +C.IT = C.Aa: midcircle (C.Bb) +z.I,z.T = get_points (C.IT) +L.TF = C.Bb: tangent_from (z.I) +z.H = intersection (L.TF,C.IT) +z.E = intersection (L.TF,C.Aa) +z.F = L.TF.pb } \end{Verbatim} \end{minipage} -\begin{minipage}{.6\textwidth} +\begin{minipage}{.4\textwidth} +\begin{Verbatim} +\begin{tikzpicture}[scale=.6] + \tkzGetNodes + \tkzDrawCircles[teal,thick](A,a B,b) + \tkzDrawCircles[red,thick](I,T) + \tkzDrawSegments[gray](I,F) + \tkzDrawPoints(A,B,E,F) + \tkzDrawPoints[red](I,H) + \tkzDrawLine(I,B) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](E,F) + \tkzLabelPoints[above left,red](I) + \tkzLabelPoints[above right,red](H) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} + \directlua{% init_elements () -scale=.75 -local a,b,c,d z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) z.a = point : new ( .5 , 0) @@ -1615,25 +1697,28 @@ z.E = C.Aa.north z.F = C.Bb.north L.EF = line : new (z.E,z.F) C.IT = C.Aa : midcircle (C.Bb) -z.I,z.T = get_points (C.IT) +z.I,z.T = get_points (C.IT) L.TF = C.Bb : tangent_from (z.I) z.H = intersection (L.TF,C.IT) z.E = intersection (L.TF,C.Aa) z.F=L.TF.pb } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawCircles[teal,thick](A,a B,b) -\tkzDrawCircles[red,thick](I,T) -\tkzDrawSegments[gray](I,F) -\tkzDrawPoints(A,B,E,F) -\tkzDrawPoints[red](I,H) -\tkzDrawLine(I,B) -\tkzLabelPoints(A,B) -\tkzLabelPoints[above](E,F) -\tkzLabelPoints[above left,red](I,H) -\end{tikzpicture} -\end{minipage} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCircles[teal,thick](A,a B,b) + \tkzDrawCircles[red,thick](I,T) + \tkzDrawSegments[gray](I,F) + \tkzDrawPoints(A,B,E,F) + \tkzDrawPoints[red](I,H) + \tkzDrawLine(I,B) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](E,F) + \tkzLabelPoints[above left,red](I) + \tkzLabelPoints[above right,red](H) + \end{tikzpicture} +\end{center} + \item Consider two tangent circles $(\mathcal{A})$ and $(\mathcal{B})$, @@ -1641,11 +1726,9 @@ z.F=L.TF.pb \item $(\mathcal{B})$ being external and angent to $(\mathcal{A})$. The construction is identical to the previous one. -\begin{minipage}{.4\textwidth} \begin{Verbatim} \directlua{% init_elements () -scale=.75 local a,b,c,d z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) @@ -1658,18 +1741,16 @@ z.E = C.Aa.north z.F = C.Bb.north L.EF = line : new (z.E,z.F) C.IT = C.Aa : midcircle (C.Bb) -z.I,z.T = get_points(C.IT) +z.I,z.T = get_points(C.IT) L.TF = C.Bb : tangent_from (z.I) z.H = intersection (L.TF,C.IT) z.E = intersection (L.TF,C.Aa) z.F=L.TF.pb } \end{Verbatim} -\end{minipage} -\begin{minipage}{.6\textwidth} + \directlua{% init_elements () -scale=.75 local a,b,c,d z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) @@ -1682,7 +1763,7 @@ z.E = C.Aa.north z.F = C.Bb.north L.EF = line : new (z.E,z.F) C.IT = C.Aa : midcircle (C.Bb) -z.I,z.T = get_points (C.IT) +z.I,z.T = get_points (C.IT) L.TF = C.Bb : tangent_from (z.I) z.H = intersection (L.TF,C.IT) z.E = intersection (L.TF,C.Aa) @@ -1691,36 +1772,36 @@ z.F=L.TF.pb \begin{tikzpicture} \tkzGetNodes \tkzDrawCircles[teal,thick](A,a B,b) -\tkzDrawCircles[red,thick](I,T) +\tkzDrawCircles[red,thick](I,T) \tkzDrawSegments[gray](I,F) \tkzDrawPoints(A,B,E,F) -\tkzDrawPoints[red](I,H) -\tkzDrawLine(I,B) -\tkzLabelPoints(A,B) -\tkzLabelPoints[above](E,F) -\tkzLabelPoints[above left,red](I,H) -\end{tikzpicture} -\end{minipage} +\tkzDrawPoints[red](I,H) +\tkzDrawLine(I,B) +\tkzLabelPoints(A,B) +\tkzLabelPoints[above](E,F) +\tkzLabelPoints[above left,red](I) +\tkzLabelPoints[above right,red](H) +\end{tikzpicture} +\item When one of the given circles is inside and tangent to the other, the construction is easy. -\item When one of the given circles is inside and tangent to the other, the construction is easy. -\begin{minipage}{.4\textwidth} \begin{Verbatim} \directlua{% init_elements () -z.A = point : new ( 2 , 0 ) -z.B = point : new ( 4 , 0 ) -z.a = point : new ( 1 , 0) -z.b = point : new ( 1 , 0) -C.Aa = circle : new (z.A,z.a) -C.Bb = circle : new (z.B,z.b) -C.IT = C.Aa : midcircle (C.Bb) -z.I,z.T = get_points(C.IT) +z.A = point: new ( 2 , 0) +z.B = point: new ( 4 , 0) +z.a = point: new ( 1 , 0) +z.b = point: new ( 1 , 0) +C.Aa = circle: new (z.A,z.a) +C.Bb = circle: new (z.B,z.b) +C.IT = C.Aa: midcircle (C.Bb) +z.I, +z.T = get_points(C.IT) } \end{Verbatim} -\end{minipage} -\begin{minipage}{.6\textwidth} + + \directlua{% init_elements () z.A = point : new ( 2 , 0 ) @@ -1730,47 +1811,52 @@ z.b = point : new ( 1 , 0) C.Aa = circle : new (z.A,z.a) C.Bb = circle : new (z.B,z.b) C.IT = C.Aa : midcircle (C.Bb) -z.I,z.T = get_points (C.IT) +z.I,z.T = get_points (C.IT) } \begin{tikzpicture} \tkzGetNodes \tkzDrawCircles[teal,thick](A,a B,b) -\tkzDrawCircles[red,thick](I,T) -\tkzDrawPoints(A,B) -\tkzDrawPoints[red](I) -\tkzLabelPoints(A,B) -\tkzLabelPoints[above left,red](I) -\end{tikzpicture} -\end{minipage} +\tkzDrawCircles[red,thick](I,T) +\tkzDrawPoints(A,B) +\tkzDrawPoints[red](I) +\tkzLabelPoints(A,B) +\tkzLabelPoints[above left,red](I) +\end{tikzpicture} + \end{itemize} \end{enumerate} % subsubsection midcircle (end) -\subsubsection{Radical circle} % (fold) +\subsubsection{Method \Imeth{circle}{radical\_circle}} % (fold) \label{ssub:radical_circle} +The radical circle of three given circles is the circle having center at the radical center of the three circles and is orthogonal to all of them. (A circle with center at the radical center that is orthogonal to one of the original circles is always orthogonal to all three.) + +[ \href{https://mathworld.wolfram.com/RadicalCircle.html}{Weisstein, Eric W. "Radical Circle." From MathWorld--A Wolfram Web Resource. }] + + + \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \begin{Verbatim} \directlua{% init_elements () - scale = .5 - z.A = point: new (0,0) - z.B = point: new (6,0) - z.C = point: new (0.8,4) - T.ABC = triangle : new ( z.A,z.B,z.C ) - C.exa = T.ABC : ex_circle () - z.I_a,z.Xa = get_points (C.exa) - C.exb = T.ABC : ex_circle (1) - z.I_b,z.Xb = get_points (C.exb) - C.exc = T.ABC : ex_circle (2) - z.I_c,z.Xc = get_points (C.exc) - C.ortho = C.exa : radical_circle (C.exb,C.exc) - z.w,z.a = get_points (C.ortho) + z.A = point: new (0,0) + z.B = point: new (6,0) + z.C = point: new (0.8,4) + T.ABC = triangle : new ( z.A,z.B,z.C ) + C.exa = T.ABC : ex_circle () + z.I_a,z.Xa = get_points (C.exa) + C.exb = T.ABC : ex_circle (1) + z.I_b,z.Xb = get_points (C.exb) + C.exc = T.ABC : ex_circle (2) + z.I_c,z.Xc = get_points (C.exc) + C.ortho = C.exa : radical_circle (C.exb,C.exc) + z.w,z.a = get_points (C.ortho) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawCircles(I_a,Xa I_b,Xb I_c,Xc) @@ -1783,7 +1869,6 @@ init_elements () \directlua{% init_elements () - scale = .5 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (0.8,4) @@ -1799,7 +1884,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawCircles(I_a,Xa I_b,Xb I_c,Xc) @@ -1810,130 +1895,137 @@ init_elements () \end{center} % subsubsection radical_circle (end) -\subsubsection{Method \Imeth{circle}{power(C)} Power v1} % (fold) -\label{ssub:power_v1} +\subsubsection{Method \Imeth{circle}{power(pt)} } % (fold) +\label{ssub:method_imeth_circle_power_pt} +The power of a fixed point A with respect to a circle of radius $r$ and center $O$ is defined by the product +$ p=\overline{AP}×\overline{AQ} = AM^2 - OT^2$, +where $P$ and $Q$ are the intersections of a line through $A$ with the circle and $AT$ is a tangent to the circle. +\vspace{12pt} -\begin{minipage}[t]{.45\textwidth}\vspace{0pt}% +\begin{minipage}{.5\textwidth} \begin{Verbatim} -\directlua{% -init_elements () - z.O = point : new (0,0) - z.A = point : new (2,-2) - z.M = point : new (-6,0) - L.AM = line : new (z.A,z.M) - C.OA = circle : new (z.O,z.A) - z.Ap = C.OA : antipode (z.A) - z.B = intersection (L.AM, C.OA) -} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircle(O,A) - \tkzMarkRightAngle[fill=gray!10](A',B,M) - \tkzDrawSegments(M,O A,A' A',B) - \tkzDrawPoints(O,A,A',M,B) - \tkzLabelPoints(O,A,A',M,B) - \tkzDrawSegments[-Triangle](M,A M,A') -\end{tikzpicture} -\end{Verbatim} -\end{minipage} -\begin{minipage}[t]{.55\textwidth}\vspace{0pt}% -\directlua{% -init_elements () -scale = .75 -z.O = point : new (0,0) -z.A = point : new (2,-2) -z.M = point : new (-6,0) -L.AM = line : new (z.A,z.M) -C.OA = circle : new (z.O,z.A) -z.Ap = C.OA : antipode (z.A) -z.B = intersection (L.AM, C.OA) -} -\begin{tikzpicture} + \directlua{ + init_elements () + z.O = point: new (5,0) + z.A = point: new (0,0) + z.R = point: new (7,0) + C.OR = circle: new (z.O,z.R) + z.Q = C.OR: point ( 0.15) + L.AQ = line:new (z.A,z.Q) + _,z.P = intersection (C.OR,L.AQ) + L.T = C.OR : tangent_from(z.A) + z.T = L.T.pb + } + \begin{tikzpicture} \tkzGetNodes - \tkzDrawCircle(O,A) - \tkzMarkRightAngle[fill=gray!10](A',B,M) - \tkzDrawSegments(M,O A,A' A',B) - \tkzDrawPoints(O,A,A',M,B) - \tkzLabelPoints(O,A,A',M,B) - \tkzDrawSegments[-Triangle](M,A M,A') + \tkzDrawCircle(O,T) + \tkzDrawPoints(A,O,P,Q,T) + \tkzDrawSegments(A,O A,Q A,T) + \tkzLabelPoints(A,O,P,Q,T) + \tkzText(2,2){$p =\tkzUseLua{% + C.OR: power(z.A)} =AT^2=AP * AQ$} \end{tikzpicture} +\end{Verbatim} + \end{minipage} -% subsubsection power_v1 (end) +\begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.O = point: new (5,0) + z.A = point: new (0,0) + z.R = point: new (7,0) + C.OR = circle: new (z.O,z.R) + z.Q = C.OR: point ( 0.15) + L.AQ = line:new (z.A,z.Q) + _,z.P = intersection (C.OR,L.AQ) + L.T = C.OR : tangent_from(z.A) + z.T = L.T.pb + } -\subsubsection{Method \Imeth{circle}{power(C)} Power v2} % (fold) -\label{ssub:power_v2} -\vspace{6pt} + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCircle(O,T) + \tkzDrawPoints(A,O,P,Q,T) + \tkzDrawSegments(A,O A,Q A,T) + \tkzLabelPoints(A,O,P,Q,T) + \tkzText(2,2){$p =\tkzUseLua{% + C.OR: power(z.A)} =AT^2=AP * AQ$} + \end{tikzpicture} + \end{center} +\end{minipage} -\begin{minipage}[t]{.5\textwidth}\vspace{0pt}% +% subsubsection method_imeth_circle_power_pt (end) + + \subsubsection{In\_out of a disk} % (fold) + \label{ssub:in__out_of_a_disk} + +\begin{minipage}{.5\textwidth} \begin{Verbatim} -\directlua{% -init_elements () - z.O = point : new (0,0) - z.A = point : new (2,2) - z.M = point : new (-1.5,0) - L.AM = line : new (z.A,z.M) - C.OA = circle : new (z.O,z.A) - z.Ap = C.OA : antipode (z.A) - _,z.B = intersection (L.AM, C.OA) - z.m = z.M : north(1) - L.mM = line : new (z.m,z.M) - z.U,z.V = intersection (L.mM,C.OA) +\directlua{ + init_elements () + z.O = point: new (0,0) + z.R = point: new (2,0) + z.A = point: new (1,1) + z.B = point: new (2,-1) + C.OR = circle: new (z.O,z.R) + function position (pt) + if C.OR : power (pt)>0 + then + return tex.print("out") + else + return tex.print("in") + end + end } \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircle(O,A) - \tkzMarkRightAngle[fill=gray!10](A',B,M) - \tkzDrawSegments(M,O A,A' A',B A,B U,V) - \tkzDrawPoints(O,A,A',M,B,U,V,m) - \tkzLabelPoints(O,A,M,U,V,m) - \tkzLabelPoints[below left](A',B) - \tkzDrawSegments(M,A M,A') + \tkzGetNodes + \tkzDrawCircle(O,R) + \tkzDrawPoints(A,O,B) + \tkzLabelPoint(A){\tkzUseLua{position(z.A)}} + \tkzLabelPoint(B){\tkzUseLua{position(z.B)}} \end{tikzpicture} \end{Verbatim} -\end{minipage} -\begin{minipage}[t]{.5\textwidth}\vspace{0pt}% -\directlua{% -init_elements () -scale = .8 -z.O = point : new (0,0) -z.A = point : new (2,2) -z.M = point : new (-1.5,0) -L.AM = line : new (z.A,z.M) -C.OA = circle : new (z.O,z.A) -z.Ap = C.OA : antipode (z.A) -_,z.B = intersection (L.AM, C.OA) -z.m = z.M : north(1) -L.mM = line : new (z.m,z.M) -z.U,z.V = intersection (L.mM,C.OA) + \end{minipage} + \begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.O = point: new (0,0) + z.R = point: new (2,0) + z.A = point: new (1,1) + z.B = point: new (2,-1) + C.OR = circle: new (z.O,z.R) + function position (pt) + if C.OR : power (pt)>0 + then + return tex.print("out") + else + return tex.print("in") + end + end } - \begin{center} \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircle(O,A) - \tkzMarkRightAngle[fill=gray!10](A',B,M) - \tkzDrawSegments(M,O A,A' A',B A,B U,V) - \tkzDrawPoints(O,A,A',M,B,U,V,m) - \tkzLabelPoints(O,A,M,U,V,m) - \tkzLabelPoints[below left](A',B) - \tkzDrawSegments(M,A M,A') + \tkzGetNodes + \tkzDrawCircle(O,R) + \tkzDrawPoints(A,O,B) + \tkzLabelPoint(A){\tkzUseLua{position(z.A)}} + \tkzLabelPoint(B){\tkzUseLua{position(z.B)}} \end{tikzpicture} \end{center} \end{minipage} -% subsubsection power_v2 (end) - -% subsubsection method_imeth_circle_power_c (end) + % subsubsection in__out_of_a_disk (end) \subsubsection{Method \Imeth{circle}{in\_out} for circle and disk} % (fold) \label{ssub:in_out_for_circle_and_disk} \begin{minipage}{.5\textwidth} \begin{Verbatim} - \directlua{% -init_elements () +\directlua{% + init_elements () z.O = point : new (0,0) z.A = point : new (1,2) C.OA = circle : new (z.O,z.A) @@ -2057,12 +2149,16 @@ C.Bb = circle: new (z.B,z.b) position = C.Aa : circles_position (C.Bb) if position == "inside tangent" then color = "orange" else color = "blue" end } -\hspace{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawCircle(A,a) -\tkzDrawCircle[color=\tkzUseLua{color}](B,b) -\end{tikzpicture}\hspace{\fill} + + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCircle(A,a) + \tkzDrawCircle[color=\tkzUseLua{color}](B,b) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection circles__position (end) @@ -2076,35 +2172,33 @@ Find a circle tangent to a circle and passing through two given points. If one o \begin{Verbatim} \directlua{ init_elements () - scale =.75 - z.A = point: new (5,4) - z.B = point: new (3,0) - z.O = point: new (0,0) - z.C = point: new (1,0) - L.AB = line: new ( z.A,z.B ) - C.OC = circle: new (z.O,z.C) - C1,C2 = C.OC: c_c_pp (z.A,z.B) - z.O1 = C1.center - z.T1 = C1.through - z.O2 = C2.center - z.T2 = C2.through + z.A = point: new (5,4) + z.B = point: new (3,0) + z.O = point: new (0,0) + z.C = point: new (1,0) + L.AB = line: new ( z.A,z.B ) + C.OC = circle: new (z.O,z.C) + C1,C2 = C.OC: c_c_pp (z.A,z.B) + z.O1 = C1.center + z.T1 = C1.through + z.O2 = C2.center + z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawLines[red](A,B) \tkzDrawCircle[red](O,C) \tkzDrawPoints(A,B,C,O) - \tkzDrawCircles[cyan](O1,T1 O2,T2) - \tkzDrawPoints(O1,O2,T1,T2) - \tkzLabelPoints(O1,O2,T1,T2,A,B) - \tkzLabelPoints(O,C,A,B) +\tkzDrawCircles[cyan](O1,T1 O2,T2) +\tkzDrawPoints(O1,O2,T1,T2) +\tkzLabelPoints(O1,O2,T1,T2,A,B) +\tkzLabelPoints(O,C,A,B) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} \directlua{ init_elements () - scale =.75 z.A = point: new (5,4) z.B = point: new (3,0) z.O = point: new (0,0) @@ -2117,15 +2211,15 @@ Find a circle tangent to a circle and passing through two given points. If one o z.O2 = C2.center z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawLines[red](A,B) \tkzDrawCircle[red](O,C) \tkzDrawPoints(A,B,C,O) - \tkzDrawCircles[cyan](O1,T1 O2,T2) - \tkzDrawPoints(O1,O2,T1,T2) - \tkzLabelPoints(O1,O2,T1,T2,A,B) - \tkzLabelPoints(O,C,A,B) +\tkzDrawCircles[cyan](O1,T1 O2,T2) +\tkzDrawPoints(O1,O2,T1,T2) +\tkzLabelPoints(O1,O2,T1,T2,A,B) +\tkzLabelPoints(O,C,A,B) \end{tikzpicture} \end{minipage} @@ -2190,7 +2284,6 @@ Special case: the two points are equidistant from the center of the circle \begin{Verbatim} \directlua{ init_elements () - scale =.5 z.A = point: new (2,3) z.B = point: new (2,-3) z.O = point: new (0,0) @@ -2207,7 +2300,6 @@ Special case: the two points are equidistant from the center of the circle \begin{minipage}{.5\textwidth} \directlua{ init_elements () - scale =.5 z.A = point: new (2,3) z.B = point: new (2,-3) z.O = point: new (0,0) @@ -2220,7 +2312,7 @@ Special case: the two points are equidistant from the center of the circle z.O2 = C2.center z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[ scale =.5] \tkzGetNodes \tkzDrawLines[red](A,B) \tkzDrawCircles[red](O,C) @@ -2236,7 +2328,6 @@ The line $(AB)$ is tangent to the circle. Only one circle answers the question. \begin{Verbatim} \directlua{ init_elements () - scale =.5 z.A = point: new (1,5) z.B = point: new (1,-3) z.O = point: new (0,0) @@ -2254,7 +2345,6 @@ The line $(AB)$ is tangent to the circle. Only one circle answers the question. \begin{minipage}{.5\textwidth} \directlua{ init_elements () - scale =.5 z.A = point: new (1,5) z.B = point: new (1,-3) z.O = point: new (0,0) @@ -2267,7 +2357,7 @@ The line $(AB)$ is tangent to the circle. Only one circle answers the question. z.O2 = C2.center z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawLines[red](A,B) \tkzDrawCircles[red](O,C) @@ -2335,7 +2425,6 @@ $P$ lies outside both of them. Notice that the two solution circles intersect at \begin{Verbatim} \directlua{ init_elements() -scale =.75 z.A = point : new ( 0 , 0 ) z.TA = point : new ( 3 , 0 ) z.B = point : new ( 6 , 2 ) @@ -2349,7 +2438,7 @@ z.O2 = C2.center z.T1 = C1.through z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawCircles[thick](A,TA B,TB) \tkzDrawCircles[red](O1,T1 O2,T2) @@ -2363,7 +2452,6 @@ z.T2 = C2.through \begin{minipage}{0.5\textwidth} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.TA = point : new ( 3 , 0 ) z.B = point : new ( 6 , 2 ) @@ -2377,7 +2465,7 @@ z.O2 = C2.center z.T1 = C1.through z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawCircles[thick](A,TA B,TB) \tkzDrawCircles[red](O1,T1 O2,T2) @@ -2570,7 +2658,7 @@ There are 4 circles verifying the conditions. Two are tangent externally, and tw \begin{minipage}{0.5\textwidth} \begin{Verbatim} - \directlua{ +\directlua{ z.A = point : new (0 , 0) z.B = point : new (4 , 0 ) L.AB = line : new (z.A,z.B) @@ -2585,17 +2673,17 @@ There are 4 circles verifying the conditions. Two are tangent externally, and tw z.O3 = C3.center z.O4 = C4.center } - \begin{tikzpicture} +\begin{tikzpicture} \tkzGetNodes \tkzDrawCircles[thick](O,T) \tkzDrawCircles[red](O1,P O2,P) \tkzDrawCircles[cyan](O3,P O4,P) - \tkzDrawLines[thick](A,B) - \tkzDrawPoints[size = 2](P) - \tkzDrawPoints(A,B,O,O1,O2,O3,O4) - \tkzLabelPoints(A,B,O,O1,O2,O3,O4) - \tkzLabelPoints[above](P) - \end{tikzpicture} + \tkzDrawLines[thick](A,B) + \tkzDrawPoints[size = 2](P) + \tkzDrawPoints(A,B,O,O1,O2,O3,O4) + \tkzLabelPoints(A,B,O,O1,O2,O3,O4) + \tkzLabelPoints[above](P) +\end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{0.5\textwidth} @@ -2615,17 +2703,17 @@ There are 4 circles verifying the conditions. Two are tangent externally, and tw z.O3 = C3.center z.O4 = C4.center } - \begin{tikzpicture} +\begin{tikzpicture} \tkzGetNodes \tkzDrawCircles[thick](O,T) \tkzDrawCircles[red](O1,P O2,P) \tkzDrawCircles[cyan](O3,P O4,P) - \tkzDrawLines[thick](A,B) - \tkzDrawPoints[size = 2](P) - \tkzDrawPoints(A,B,O,O1,O2,O3,O4) - \tkzLabelPoints(A,B,O,O1,O2,O3,O4) - \tkzLabelPoints[above](P) - \end{tikzpicture} + \tkzDrawLines[thick](A,B) + \tkzDrawPoints[size = 2](P) + \tkzDrawPoints(A,B,O,O1,O2,O3,O4) + \tkzLabelPoints(A,B,O,O1,O2,O3,O4) + \tkzLabelPoints[above](P) +\end{tikzpicture} \end{minipage} % subsubsection method_c_lc_p (end) % subsection methods_of_the_class_circle (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex new file mode 100644 index 00000000000..500e31dedd1 --- /dev/null +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex @@ -0,0 +1,2085 @@ +\newpage + +\section{Class \Iclass{conic}} % (fold) +\label{sec:class_iclass_conic} + +\subsection{Preamble} % (fold) +\label{sub:preamble} +To illustrate the different methods used to draw conics, here's how you can obtain a parabola. In the following example, the parabola is the locus of all circle centers tangent to a given circle. + +The \code{points} table contains the coordinates of the centers of the identified circles. \TIKZ only requires a list of coordinate pairs enclosed in brackets. +The table that defines the circles is slightly more complex. It contains the centers and the tangency points between the circles and the given elements. These are sequences of four coordinates, stored in the table. Finally, the sequences are concatenated into a string using a comma (",") as the separator. Coordinates are read with the \tkzcname{foreach} macro, utilizing the |expand list| option. + +\directlua{ +init_elements () +z.O = point : new (0,0) +z.P = point : new (0,6) +z.M = point : new (0,3) +z.I = point : new (1,0) +C.PM = circle : new (z.P,z.M) +list = {} +points = {} + for t = -0.24, 0.24, 0.004 do + if (t> - 0.002 and t< 0.002) then else + z.A = C.PM : point (t) + L.OI = line : new (z.O,z.I) + L.PA = line : new (z.P,z.A) + z.C = intersection (L.OI,L.PA) + L.tgt = C.PM : tangent_at (z.A) + z.X = intersection (L.tgt,L.OI) + z.o = bisector (z.X,z.A,z.C).pb + table.insert (points, "("..z.o.re..","..z.o.im..")") + table.insert (list,z.o.re.."/"..z.o.im.."/"..z.A.re.."/"..z.A.im) + end + end + list = table.concat(list,",") + } + +\begin{center} + \begin{tikzpicture}[scale=0.5] + \tkzGetNodes + \tkzDrawCircle(P,M) + \foreach[expand list] \r/\s/\u/\v in {\directlua{tex.print({list})}} + { + \tkzDefPoint(\u,\v){A} + \tkzDefPoint(\r,\s){o} + \tkzDrawCircle[orange](o,A) + } + \tkzDrawCoordinates[smooth,red](points) + \end{tikzpicture} +\end{center} + +Here's the code. Two lists are created, one containing the points of the parabola, the other the points that define the tangent circles. +The parabola is obtained using \TIKZ{}'s ability to draw a curve from a list of coordinates. To obtain the circles, note the use of the \code{expand list} option in the \tkzcname{foreach} loop. + +\begin{Verbatim} + \directlua{ + z.O = point : new (0,0) + z.P = point : new (0,6) + z.M = point : new (0,3) + z.I = point : new (1,0) + C.PM = circle : new (z.P,z.M) + list = {} + points = {} + for t = -0.24, 0.24, 0.004 do + if (t> - 0.002 and t< 0.002) then else + z.A = C.PM : point (t) + L.OI = line : new (z.O,z.I) + L.PA = line : new (z.P,z.A) + z.C = intersection (L.OI,L.PA) + L.tgt = C.PM : tangent_at (z.A) + z.X = intersection (L.tgt,L.OI) + z.o = bisector (z.X,z.A,z.C).pb + table.insert (points, "("..z.o.re..","..z.o.im..")") + table.insert (list,z.o.re.."/"..z.o.im.."/"..z.A.re.."/"..z.A.im) + end + end + list = table.concat(list,",") + } +\end{Verbatim} + + \begin{Verbatim} + \begin{tikzpicture}[scale =.75] + \tkzGetNodes + \tkzDrawCircle(P,M) + \foreach[expand list] \r/\s/\u/\v in {\directlua{tex.print({list})}} + { + \tkzDefPoint(\u,\v){A} + \tkzDefPoint(\r,\s){o} + \tkzDrawCircle[orange](o,A) + } + \tkzDrawCoordinates[smooth,red](points) + \end{tikzpicture} + \end{Verbatim} + + + + + +% subsection preamble (end) + +This class replaces the one dedicated to ellipses. From now on, you can work with parabolas, hyperbolas and ellipses. The circle is not part of this class. +As you'll see from the examples, ellipses used to be built by \TIKZ{}, now conics are obtained by point-by-point construction. A cloud of points is sent to \TIKZ{}, which simply connects them. + +\begin{mybox} + \begin{Verbatim} + plot[<local options>]coordinates{<coordinate 1><coordinate 2>…<coordinate n>} + \end{Verbatim} +\end{mybox} + +is used by the macro \tkzcname{tkzDrawCoordinates}. One advantage of this method is that you can easily draw only part of a conic. + +\subsection{Attributes of a conic} % (fold) +\label{sub:attributes_of_a_conic} + +Parabolas, hyperbolas and ellipses share many attributes, but some exist only for the last two conics. I previously defined ellipses using three points (center, vertex, and covertex), but from now on, conics will be defined using a focus, a directrix, and an eccentricity. Of course, the old method can still be used. I've created a few little conversion tools to get the focus, the director and the eccentricity right in some cases. + +The first attributes are used to define the conic: : \Iattr{conic}{Fa} (focus) , \Iattr{conic}{directrix} (directrix) and \Iattr{conic}{e} (eccentricity). + + + +\bgroup +\catcode`_=12 +\small +\captionof{table}{Conic attributes.}\label{conic:att} +\begin{tabular}{ll} +\toprule +\textbf{Attributes} & \textbf{Application}\\ +\Iattr{conic}{Fa} & main foyer of the conic\\ +\Iattr{conic}{directrix} & directrix of the conic\\ +\Iattr{conic}{major\_axis} & Axis through focal points\\ +\Iattr{conic}{minor\_axis} & Axis through focal points\\ +\Iattr{conic}{e} & eccentricity of the conic\\ +\Iattr{conic}{type} & The type is 'conic'\\ +\Iattr{conic}{subtype} & 'parabola', 'hyperbola' or 'ellipse'\\ +\Iattr{conic}{a} & Only for hyperbola and ellipse\\ +\Iattr{conic}{b} & Only for hyperbola and ellipse\\ +\Iattr{conic}{c} & Only for hyperbola and ellipse\\ +\Iattr{conic}{p} & semi latus rectum\\ +\Iattr{conic}{slope} & Slope of the line passes through the foci\\ +\Iattr{conic}{K} & Projection of the focus onto the directrix\\ +\Iattr{conic}{Fb} & Second focus for hyperbola and ellipse\\ +\Iattr{conic}{vertex} & main vertex\\ +\Iattr{conic}{covertex} & \\ +\Iattr{conic}{Rx} & Radius from center to vertex\\ +\Iattr{conic}{Ry} & Radius from center to covertex\\ +\bottomrule % +\end{tabular} +\egroup + + +\subsubsection{About attributes of conic} % (fold) +\label{ssub:about_attributes_of_conic} + +The figure below and the associated table show common attributes and differences according to exentricity values. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + CO1 = conic : new(z.F,L.dir,.8) + CO2 = conic : new(z.F,L.dir, 1) + CO3 = conic : new(z.F,L.dir, 1.2) + curve1 = CO1 : points (0,1, 40) + curve2 = CO2 : points (-5,5,40) + curve3 = CO3 : points (-5,5,40) + z.K = CO1.K + z.u,z.v = get_points(CO1.major_axis) + z.x = L.dir : report (-4,z.K) + z.y = L.dir : report ( 4,z.K) + z.r = (z.F-z.K) : orthogonal (-4) : at (z.F) + z.s = (z.F-z.K) : orthogonal (4) : at (z.F) + L.rs = line : new (z.r,z.s) + z.I_1 = intersection (L.rs,CO1) + z.I_2 = intersection (L.rs,CO2) + z.I_3,_ = intersection (L.rs,CO3) + z.H_1 = CO1.directrix : projection (z.I_1) + z.H_2 = CO2.directrix : projection (z.I_2) + z.H_3 = CO3.directrix : projection (z.I_3) + z.S_2 = CO2.vertex + z.F_1 = CO1.Fb + z.C_1 = CO1.center + z.C_3 = CO3.center +} + +\begin{tikzpicture} +\tkzGetNodes + \tkzDrawLines(x,y u,v r,s) + \tkzDrawPoints(F,K,I_1,I_2,I_3,S_2,H_1,H_2,H_3,F_1,C_1,C_3) + \tkzLabelPoints(F,K,H_1,H_2,H_3,F_1,C_1,C_3) + \tkzDrawSegments[dashed](I_1,H_1 I_2,H_2 I_3,H_3) + \tkzLabelPoints[above](I_1,I_2,I_3,S_2) + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzLabelSegment[pos=.4](K,F){$h = KF$} + \tkzLabelSegment[sloped,pos=-.2](x,y){\texttt{directrix}} +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () +z.A = point : new ( 0 , 0 ) +z.B = point : new ( 4 , -2 ) +L.dir = line : new (z.A,z.B) +z.F = point : new ( 2 , 2) +CO1 = conic : new(z.F,L.dir,.8) +CO2 = conic : new(z.F,L.dir, 1) +CO3 = conic : new(z.F,L.dir, 1.2) +curve1 = CO1 : points (0,1, 40) +curve2 = CO2 : points (-5,5,40) +curve3 = CO3 : points (-5,5,40) +z.K = CO1.K +z.u,z.v = get_points(CO1.major_axis) +z.x = L.dir : report (-4,z.K) +z.y = L.dir : report ( 4,z.K) +z.r = (z.F-z.K) : orthogonal (-4) : at (z.F) +z.s = (z.F-z.K) : orthogonal (4) : at (z.F) +L.rs = line : new (z.r,z.s) +z.I_1 = intersection (L.rs,CO1) +z.I_2 = intersection (L.rs,CO2) +z.I_3,_ = intersection (L.rs,CO3) +z.H_1 = CO1.directrix : projection (z.I_1) +z.H_2 = CO2.directrix : projection (z.I_2) +z.H_3 = CO3.directrix : projection (z.I_3) +z.S_2 = CO2.vertex +z.F_1 = CO1.Fb +z.C_1 = CO1.center +z.C_3 = CO3.center +} + +\begin{center} + \begin{tikzpicture}[scale=.6] + \tkzGetNodes + \tkzDrawLines(x,y u,v r,s) + \tkzDrawPoints(F,K,I_1,I_2,I_3,S_2,H_1,H_2,H_3,F_1,C_1,C_3) + \tkzLabelPoints(F,K,H_1,H_2,H_3,F_1,C_1,C_3) + \tkzDrawSegments[dashed](I_1,H_1 I_2,H_2 I_3,H_3) + \tkzLabelPoints[above](I_1,I_2,I_3,S_2) + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzLabelSegment[pos=.4](K,F){$h = KF$} + \tkzLabelSegment[sloped,pos=-.2](x,y){\texttt{directrix}} + \tkzText[draw, + inner sep=10pt, + line width = 1pt, + text width=6cm](2,14){The focus $F$, the line \code{directrix} and the value of $h =KF$ are attributes common to all three conics. These conics differ in their eccentricity $e$, here $0.8$ for the ellipse, $1$ for the parabola and $1.2$ for the hyperbola. The \code{semi latus rectum} $p$ is equal to $e*h$ and differs depending on the conic. It is represented by $FI_1$, $FI_2$ and $FI_3$. By definition, $\displaystyle e = \frac{p}{h}$} + \end{tikzpicture} +\end{center} +\end{minipage} + + +\subsubsection{Attributes of parabola} % (fold) +\label{ssub:attributes_of_parabola} +Let \begin{mybox} + |PA = conic : new (z.F, L.AB, 1)| +\end{mybox} +The focus is $F$, it is given if we use another definition by \code{PA.Fa}. +The eccentricity of a parabola is always $1$. It has only one focus, unlike the hyperbola and ellipse. The parabola has no center and only one directrix. The parabola can be distinguished from other conics by its eccentricity, of course, but also by \code{subtype}. Thus \code{PA.subtype = 'parabola'}. + +The projection of $F$ onto the directrix is the point $K$, which is given by \code{PA.K}. + +$p$, the \code{semi latus rectum}, is always given by $e \cdot h$, so here $p = h$. + +Like other conics, the parabola has a vertex given by \code{PA.vertex}, but no \code{covertex}. The vertex is the middle of the segment $KF$. + +It can be seen that if we choose a reference frame with origin $S$, the parabola has an equation of the style $y = \dfrac{x^2}{2p}$. For conics, the values $a$, $b$, $c$ represent distances from the center, so they don't exist for the parabola. + +The last two attributes are common to all conics. They are the axis passing through the focus $F$ and its projected line $K$ on the directrix. This line is obtained with \code{PA.major\_axis}. You can also use the angle between this axis and the horizontal with \code{PA.slope}. The main axis is oriented from $K$ to $F$. + +\directlua{ + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + PA = conic : new(z.F,L.dir, 1) + curve2 = PA : points (-5,5,20) + z.K = PA.K + z.u,z.v = get_points(PA.major_axis) + z.x = L.dir : report (-4,z.K) + z.y = L.dir : report ( 4,z.K) + z.r = (z.F-z.K) : orthogonal (-4) : at (z.F) + z.s = (z.F-z.K) : orthogonal (4) : at (z.F) + L.rs = line : new (z.r,z.s) + _,z.I_2 = intersection (L.rs,PA) + z.H_2 = PA.directrix : projection (z.I_2) + z.S_2 = PA.vertex +} + +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(x,y u,v r,s) + \tkzDrawPoints(F,K,I_2,S_2,H_2) + \tkzLabelPoints(F,K,H_2) + \tkzDrawSegments[dashed](I_2,H_2) + \tkzLabelPoints[above](I_2,S_2) + \tkzDrawCoordinates[smooth](curve2) + \tkzLabelSegment[pos=.4](K,F){$h = p = KF$} + \tkzLabelSegment[above,pos=.5](F,I_2){$ p = h = FI_2$} + \tkzLabelSegment[sloped,pos=.8](x,y){\texttt{directrix}} + \tkzLabelSegment[left](K,S_2){$h/2$} +\end{tikzpicture} + +% subsubsection attributes_of_parabola (end) + +\subsubsection{Attributes of hyperbola} % (fold) attributs de l'hyperbole +\label{ssub:attributes_of_hyperbola} + +Let \begin{mybox} + |HY = conic : new (z.F, L.AB, 1.2)| +\end{mybox} + +This time, the eccentricity is greater than $1$. The common attributes have already been mentioned. Specific attributes include second focus (\code{HY.Fb}) and center (\code{HY.center}). + +It's possible to use different measures of the segments that characterize the hyperbola. $CS = a$ the distance between center and vertex is obtained with (\code{HY.a}). $CF = c$ the distance between center and focus is obtained with (\code{HY.c}). + + +\directlua{ + init_elements () + z.A = point : new ( 0 , 0) + z.B = point : new ( 4 , -2) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 1.8) + HY = conic : new(z.F,L.dir, 2) + curve = HY : points (-6,6,20) + curves = HY : points (-5,5,20,swap) + z.K = HY.K + z.u,z.v = get_points(HY.major_axis) + z.x = L.dir : report (-4,z.K) + z.y = L.dir : report ( 4,z.K) + z.r = (z.F-z.K) : orthogonal (-5) : at (z.F) + z.s = (z.F-z.K) : orthogonal ( 5) : at (z.F) + L.rs = line : new (z.r,z.s) + _,z.I = intersection (L.rs,HY) + z.H = HY.directrix : projection (z.I) + z.S = HY.vertex + z.C = HY.center + z.G = HY.Fb + z.E = HY.covertex + z.D = (z.S-z.C) : orthogonal (HY.b): at (z.S) +} + +\begin{center} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(x,y r,s G,F) + \tkzDrawLine[red,add= 0 and 1](C,D) + \tkzDrawLines[add = -.2 and -.2](u,v) + \tkzDrawPoints(E,F,K,I,S,H,C,G,D) + \tkzLabelPoints[right](E,F,K,H,C,D,G) + \tkzDrawSegments[dashed](I,H) + \tkzDrawPolySeg[dashed](C,E,D,S) + \tkzLabelPoint[right](F){$F$ focus} + \tkzLabelPoints[above](I,S) + \tkzDrawCoordinates[smooth](curve) + \tkzDrawCoordinates[smooth](curves) + \tkzLabelSegment[pos=.6,right=8 pt](K,F){$h = KF$} + \tkzLabelSegment[pos=.6,sloped](I,F){$p = IF = e*h$} + \tkzLabelSegment[sloped,pos=.8](x,y){\texttt{directrix}} + \tkzLabelSegment[sloped,pos=.4](C,D){\color{red}\texttt{asymptote}} + \tkzLabelSegment[pos=1.6](C,D){\color{red}\texttt{slope = $\displaystyle\frac{b}{a}$}} + \tkzText[ + inner sep=10pt, + line width = 1pt, + text width=4cm](-3,-4){ + $CS = a$\\ + $CF = c$\\ + $CE = b$\\ + slope of asymptote = $\displaystyle\frac{b}{a}$\\ + $IF = p = e*h$\\ + $KF = h$ + } +\end{tikzpicture} +\end{center} + +% subsubsection attributes_of_hyperbola (end) + +\subsubsection{Attributs of ellipse} % (fold) +\label{ssub:attributs_of_ellipse} + +We find the same attributes as for the hyperbola. The relationships between the measures change: while for the hyperbola we have $c = \sqrt{a^2+b^2}$, for the ellipse $c = \sqrt{a^2-b^2}$. + +\directlua{ + init_elements () + z.A = point : new ( 0 , 0) + z.B = point : new ( 4 , -2) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + HY = conic : new(z.F,L.dir, .75) + curve = HY : points (0,1,50) + z.K = HY.K + z.u,z.v = get_points(HY.major_axis) + z.x = L.dir : report (-4,z.K) + z.y = L.dir : report ( 4,z.K) + z.r = (z.F-z.K) : orthogonal (-5) : at (z.F) + z.s = (z.F-z.K) : orthogonal ( 5) : at (z.F) + L.rs = line : new (z.r,z.s) + z.I,z.J = intersection (L.rs,HY) + z.H = HY.directrix : projection (z.I) + z.V = HY.vertex + z.C = HY.center + z.G = HY.Fb + z.E = HY.covertex + z.Ep = z.C : symmetry (z.E) +} + +\begin{center} + \begin{tikzpicture}[scale=.75] + \tkzGetNodes + \tkzDrawLines(x,y I,J G,K) + \tkzDrawLines[add = -.2 and -.2](u,v) + \tkzDrawPoints(E,F,K,I,V,H,C,G,E') + \tkzLabelPoints[right](E,F,K,H,C,G,E') + \tkzDrawSegments[dashed](I,H E,E') + \tkzLabelPoint[right](F){$F$ focus} + \tkzLabelPoints[above right](I,V) + \tkzDrawCoordinates[smooth](curve) + \tkzLabelSegment[pos=.6,right=8 pt](K,V){$h = KF$} + \tkzLabelSegment[pos=.5,above right](I,F){$p = IF = e*h$} + \tkzLabelSegment[sloped,pos=.8](x,y){\texttt{directrix}} + \tkzLabelSegment[sloped,pos=.8](E,E'){\texttt{minor\_axis}} + \tkzText[ + inner sep=10pt, + line width = 1pt, + text width=4cm](-3,0){ + $CV = a$\\ + $CF = c$\\ + $CE = b$\\ + $IF = p = e*h$\\ + $KF = h$ + } + \end{tikzpicture} +\end{center} + +% subsubsection attributs_of_ellipse (end) + +% subsubsection about_attributes_of_conic (end) + +\subsection{Point-by-point conic construction} % (fold) +\label{sub:point_by_point_conic_construction} + + +% subsection point_by_point_conic_construction (end) + + +\subsection{Parabola construction} % (fold) +\label{sub:parabola_construction} + + +The method is based on the following observation: if a point $M$ belongs to the parabola, then the bisector of the segment from the focus to the projection of $H$ from $M$ onto the directrix is also the bisector of the angle $\widehat{HFT}$ and the tangent to the parabola at the point $M$. + +This is the method I chose to construct the set of points representing the parabola. +\vspace{6pt} + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ + z.A = point : new ( 0 , 1 ) + z.B = point : new ( 4 , 3 ) + z.F = point : new ( 2 , 6 ) + L.AB = line : new (z.A,z.B) + PA = conic : new (z.F,L.AB,1) + z.K = PA.K + z.M = PA : point(-2) + z.H = PA.directrix : projection (z.M) + L.FH = line : new (z.F,z.H) + L.med = L.FH : mediator () + L.orth = PA.directrix : ortho_from (z.H) + z.T = intersection (L.AB,L.med) + curve = PA : points (-5,5,50) + z.m = midpoint(z.H,z.F) +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawCoordinates[smooth](curve) +\tkzDrawLines[add = .5 and .5](A,B M,T K,F) +\tkzDrawSegments(M,H H,F F,M) +\tkzDrawPoints(F,K,T,M,H) +\tkzLabelPoints(F,K,T,M,H) +\tkzMarkAngles[mark=|](H,M,T T,M,F) +\tkzMarkSegments[mark=|](H,M M,F) +\tkzMarkSegments[mark=|](H,m m,F) +\end{tikzpicture} + \end{Verbatim} +\end{minipage} +\directlua{ + init_elements () + z.A = point : new ( 0 , 1 ) + z.B = point : new ( 4 , 3 ) + z.F = point : new ( 2 , 6 ) + L.AB = line : new (z.A,z.B) + PA = conic : new (z.F,L.AB,1) + z.K = PA.K + z.M = PA : point(-2) + z.H = PA.directrix : projection (z.M) + L.FH = line : new (z.F,z.H) + L.med = L.FH : mediator () + L.orth = PA.directrix : ortho_from (z.H) + z.T = intersection (L.AB,L.med) + curve = PA : points (-4,5,50) + z.m = midpoint(z.H,z.F) + } +\begin{minipage}{.5\textwidth} +\begin{center} + \begin{tikzpicture}[scale=.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines[add = .5 and .4](A,B M,T K,F) + \tkzDrawSegments(M,H H,F F,M) + \tkzDrawPoints(F,K,T,M,H) + \tkzLabelPoints(F,K,T,M,H) + \tkzMarkAngles[mark=|](H,M,T T,M,F) + \tkzMarkSegments[mark=|](H,M M,F) + \tkzMarkSegments[mark=|](H,m m,F) + \end{tikzpicture} +\end{center} +\end{minipage} + + +\subsection{Hyperbola construction} % (fold) +\label{sub:hyperbola_construction} + +\directlua{ + init_elements () + z.A = point : new (-2, -1) + z.B = point : new ( 4, 0) + L.AB = line : new (z.A,z.B) + z.F = point : new (0,3) + HY = conic : new (z.F,L.AB,2) + curve = HY : points (-5,5,50) + z.K = HY.K + z.S = HY.vertex + z.O = HY.center + z.X = HY : point(2) + z.T = HY.directrix : report (2,HY.K) + LT = HY.major_axis : ll_from (z.T) + z.u,z.v = get_points(LT) + LC = HY.minor_axis + LS = LC : ll_from (HY.vertex) + z.D = intersection_ll_ (LC.pa,LC.pb,HY.Fa,z.T) + z.E = intersection_ll_ (LS.pa,LS.pb,HY.Fa,z.T) + z.P,z.Q = intersection_lc_ (LT.pa,LT.pb,z.D,z.E) + z.C = HY.center +} + \begin{center} + \begin{tikzpicture}[scale = 1] + \tkzGetNodes + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawCircle(D,E) + \tkzDrawLines(F,C F,D) + \tkzDrawLines[add = 1 and 1](T,P) + \tkzDrawPoints(C,F,K,S,T,P,D,E) + \tkzLabelPoints(C,F,K,S,T,D,E) + \tkzLabelPoint[below,sloped](A){directrix} + \tkzLabelPoints[above](P) + \tkzDrawSegments(A,K T,B) + \tkzDrawSegments[dashed](S,E K,T C,D) + \end{tikzpicture} + \end{center} + + \begin{Verbatim} + \directlua{ + z.A = point : new (-2, -1) + z.B = point : new ( 4, 0) + L.AB = line : new (z.A,z.B) + z.F = point : new (0,3) + HY = conic : new (z.F,L.AB,2) + curve = HY : points (-5,5,50) + z.K = HY.K + z.S = HY.vertex + z.O = HY.center + z.X = HY : point(2) + z.T = HY.directrix : report (2,HY.K) + LT = HY.major_axis : ll_from (z.T) + z.u,z.v = get_points(LT) + LC = HY.minor_axis + LS = LC : ll_from (HY.vertex) + z.D = intersection_ll_ (LC.pa,LC.pb,HY.Fa,z.T) + z.E = intersection_ll_ (LS.pa,LS.pb,HY.Fa,z.T) + z.P,z.Q = intersection_lc_ (LT.pa,LT.pb,z.D,z.E) + z.C = HY.center + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawCircle(D,E) + \tkzDrawLines(F,C F,D) + \tkzDrawLines[add = 1 and 1](T,P) + \tkzDrawPoints(C,F,K,S,T,P,D,E) + \tkzLabelPoints(C,F,K,S,T,D,E) + \tkzLabelPoint[below,sloped](A){directrix} + \tkzLabelPoints[above](P) + \tkzDrawSegments(A,K T,B) + \tkzDrawSegments[dashed](S,E K,T C,D) + \end{tikzpicture} + \end{Verbatim} + + +%subsection hyperbola_construction (end) + +\subsection{Ellipse construction} % (fold) +\label{sub:ellipse_construction} + +The point-by-point construction is obtained by transforming the principal circle through an affinity with the focal axis as its axis, parallel to the directrix, with a ratio of $b/a$. Let $H$ be the projection of the point $Q$ onto the focal axis. With $OA = a$ and $OB = b$, it is then sufficient to draw a parallel to $(AB)$ passing through $Q$, which intersects the focal axis at $T$, yielding $\dfrac{b}{a} = \dfrac{HT}{HQ}$. Now, since $HT = HQ'$, we obtain $ \dfrac{HQ'}{HQ} = \dfrac{b}{a} $. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements () +z.Fb = point: new ( 3 , 0 ) +z.Fa = point: new ( -3 , 2 ) +local c = length(z.Fa,z.Fb)/2 +local a = 4 +local b = math.sqrt(a^2 -c^2) +local e = c/a +L.focal = line : new (z.Fa,z.Fb) +z.O = L.focal.mid +z.K = report_(z.O,z.Fb,a^2/c) +z.Ko = ortho_from_(z.K,z.K,z.Fb) +L.dir = line :new(z.K,z.Ko) +EL = conic : new (z.Fb,L.dir,e) +curve = EL : points (0,1,100) +z.V = EL.vertex +local C = circle : new (z.O,EL.vertex) +z.A = C : point(0.25) +z.B = L.focal : report (-EL.b,z.O) +z.Q = C : point(.2) +z.H = L.focal : projection (z.Q) +z.Qp = L.focal : affinity (L.focal + : ortho_from(z.O),b/a,z.Q) +z.T = intersection_ll_ (z.Q, + ll_from_ (z.Q,z.A,z.B),z.Fb,z.Fa) +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawCoordinates[smooth](curve) +\tkzDrawLines(Fa,Fb K,Ko) +\tkzDrawLines[add = 2 and 2](K,Ko) +\tkzDrawSegments[dashed](H,Q O,A) +\tkzDrawCircles(O,Q H,T) +\tkzDrawPoints(Fa,Fb,Q,Q',H,V,A,B,O) +\tkzLabelPoints(Fa,Fb,Q,Q',H,V,A,B,O) +\tkzDrawSegments[red](A,B Q,T) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () +z.Fb = point: new ( 3 , 0 ) +z.Fa = point: new ( -3 , 2 ) +local c = length(z.Fa,z.Fb)/2 +local a = 4 +local b = math.sqrt(a^2 -c^2) +local e = c/a +L.focal = line : new (z.Fa,z.Fb) +z.O = L.focal.mid +z.K = report_(z.O,z.Fb,a^2/c) +z.Ko = ortho_from_(z.K,z.K,z.Fb) +L.dir = line :new(z.K,z.Ko) +EL = conic : new (z.Fb,L.dir,e) +curve = EL : points (0,1,100) +z.V = EL.vertex +local C = circle : new (z.O,EL.vertex) +z.A = C : point(0.25) +z.B = L.focal : report (-EL.b,z.O) +z.Q = C : point(.2) +z.H = L.focal : projection (z.Q) +z.Qp = L.focal : affinity (L.focal : ortho_from(z.O),b/a,z.Q) +z.T = intersection_ll_ (z.Q,ll_from_ (z.Q,z.A,z.B),z.Fb,z.Fa) +} + +\begin{center} + \begin{tikzpicture}[scale=.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(Fa,Fb K,Ko) + \tkzDrawLines[add = 2 and 2](K,Ko) + \tkzDrawSegments[dashed](H,Q O,A) + \tkzDrawCircles(O,Q H,T) + \tkzDrawPoints(Fa,Fb,Q,Q',H,V,A,B,O) + \tkzLabelPoints(Fa,Fb,Q,Q',H,V,A,B,O) + \tkzDrawSegments[red](A,B Q,T) + \end{tikzpicture} +\end{center} +\end{minipage} + +% subsection ellipse_construction (end) +% section point_by_point_conic_construction (end) + + + + +\subsection{Methods of the class conic} % (fold) +\label{sub:methods_of_the_class_conic} + +The methods previously designed for the (now obsolete) \code{ellipse} class have been generalized to the \code{conic} class. + +The most natural creation method is now the one based on a focus, a directrix, and the eccentricity. + +\begin{mybox} + \begin{Verbatim} + CO = conic : new (z.F,L.dir,e) + \end{Verbatim} +\end{mybox} + + Depending on the latter, it is easy to distinguish between parabolas, hyperbolas, and ellipses. The bifocal definition of hyperbolas and ellipses is also available, as well as the one based on three points: the center, a vertex, and a covertex. + +\bgroup +\catcode`_=12 +\small +\captionof{table}{Conic methods.}\label{conic:met} +\begin{tabular}{ll} +\toprule +\textbf{Methods} & \textbf{Example} \\ +\midrule +\Imeth{conic}{new (pt, L , e) } & CO = conic: new ( focus, directrix, eccentricity ) \\ +\midrule +\Imeth{conic}{points (ta,tb,nb,sawp)} & swap to get the second part of hyperbola \\ +\Imeth{conic}{point (t)} & to get one point on the curve \\ +\Imeth{conic}{in\_out (pt)} & pt in/out of the conic \\ +\Imeth{conic}{tangent\_at (pt)} & tangent at point on the curve \\ +\Imeth{conic}{tangent\_from (pt)}& \\ +\Imeth{conic}{orthoptic\_curve()}& \\ +\bottomrule +\end{tabular} + +\egroup + +\subsubsection{Method \Imeth{conic}{points}} % (fold) +\label{ssub:method_imeth_conic_points} + +This method generates a set of points that belong to the conic. This set is then passed to tkz-euclide, which, using \TIKZ{}'s \code{draw[options] plot coordinates}, will plot the curve. The method requires three arguments: the minimum value of $t$, the maximum value of $t$, and the number of points between these two values. + +\begin{mybox} + \begin{Verbatim} + CO = conic : new (z.F,L.dir,e) + curve = CO : points (ta,tb,nb) + \end{Verbatim} +\end{mybox} + +All that remains is to use the macro \tkzcname{tkzDrawCoordinates} +\begin{mybox} + \begin{Verbatim} + \tkzDrawCoordinates[smooth,red](curve) + \end{Verbatim} +\end{mybox} +% subsubsection method_imeth_conic_points (end) + +\subsubsection{Method \code{points} with parabola} % (fold) +\label{ssub:method_code_points_with_parabola} + +$t$ is the abscissa of a point on the parabola, in an orthonormal frame of reference with origin $K$ and based on the directrix line and focal axis (major\_axis). + + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements () +z.A = point : new (-2, -1) +z.B = point : new ( 4, 0) +z.F = point : new ( 1 , 3 ) +L.dir = line : new (z.A,z.B) +PA = conic : new (z.F,L.dir,1) +curve = PA : points (-4,3,50) +z.K = PA.K +z.S = PA.vertex +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawCoordinates[smooth](curve) +\tkzDrawLines(A,B K,F) +\tkzDrawPoints(A,B,F,K,S) +\tkzLabelPoints(A,B,F,K,S) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () +z.A = point : new (-2, -1) +z.B = point : new ( 4, 0) +z.F = point : new ( 1 , 3 ) +L.dir = line : new (z.A,z.B) +PA = conic : new (z.F,L.dir,1) +curve = PA : points (-4,3,50) +z.K = PA.K +z.S = PA.vertex +} +\begin{center} + \begin{tikzpicture}[scale=.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(A,B K,F) + \tkzDrawPoints(A,B,F,K,S) + \tkzLabelPoints(A,B,F,K,S) + \end{tikzpicture} +\end{center} + +\end{minipage} +% subsubsection method_code_points_with_parabola (end) + +\subsubsection{Example points with parabola} % (fold) +\label{ssub:example_points_with_parabola} +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements () +z.A = point : new (-2, -1) +z.B = point : new ( 4, 0) +z.F = point : new ( 1 , 3 ) +L.dir = line : new (z.A,z.B) +PA = conic : new (z.F,L.dir,1) +curve = PA : points (-4,3,50) +z.K = PA.K +z.S = PA.vertex +L.AF = line : new (z.A,z.F) +L.BF = line : new (z.B,z.F) +z.U = intersection (PA,L.AF) +z.V = intersection (PA,L.BF) +part = PA : points (-4,3,50) +z.HU = L.dir : projection (z.U) +z.HV = L.dir : projection (z.V) +local ta = length(z.HU,z.K) +local tb = length(z.HV,z.K) +part = PA : points (-ta,tb,20) +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawCoordinates[smooth](curve) +\tkzDrawCoordinates[smooth,red,thick](part) +\tkzDrawLines(A,B K,F) +\tkzDrawPoints(A,B,F,K,S,HU,HV) +\tkzDrawPoints[red](U,V) +\tkzLabelPoints[red](U,V) +\tkzLabelPoints(A,B,F,K,S) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () +z.A = point : new (-2, -1) +z.B = point : new ( 4, 0) +z.F = point : new ( 1 , 3 ) +L.dir = line : new (z.A,z.B) +PA = conic : new (z.F,L.dir,1) +curve = PA : points (-4,3,50) +z.K = PA.K +z.S = PA.vertex +L.AF = line : new (z.A,z.F) +L.BF = line : new (z.B,z.F) +z.U = intersection (PA,L.AF) +z.V = intersection (PA,L.BF) +part = PA : points (-4,3,50) +z.HU = L.dir : projection (z.U) +z.HV = L.dir : projection (z.V) +local ta = length(z.HU,z.K) +local tb = length(z.HV,z.K) +part = PA : points (-ta,tb,20) +} +\begin{center} + \begin{tikzpicture}[scale=.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawCoordinates[smooth,red,thick](part) + \tkzDrawLines(A,B K,F) + \tkzDrawPoints(A,B,F,K,S,HU,HV) + \tkzDrawPoints[red](U,V) + \tkzLabelPoints[red](U,V) + \tkzLabelPoints(A,B,F,K,S) + \end{tikzpicture} +\end{center} + + +\end{minipage} + +% subsubsection example_points_with_parabola (end) + + +\subsubsection{Method points with hyperbola} % (fold) +\label{ssub:method_points_with_hyperbola} + +As with the parabola, $t$ represents the abscissa of a point on the curve. The directrix is the x-axis. To obtain the second branch of the hyperbola, simply add the argument \code{swap}. + + \directlua{ + z.A = point : new (-2, -1) + z.B = point : new ( 4, 0) + L.AB = line : new (z.A,z.B) + z.F = point : new (0,3) + HY = conic : new (z.F,L.AB,2) + curve = HY : points (-5,4,50) + curveb = HY : points (-5,4,50,swap) + z.K = HY.K + z.S = HY.vertex + z.O = HY.center +} + \begin{center} + \begin{tikzpicture}[scale=.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawCoordinates[smooth](curveb) + \tkzDrawLines(A,B F,K) + \tkzDrawPoints(A,B,F,K,S) + \tkzLabelPoints(A,B,F,K,S) + \end{tikzpicture} + \end{center} + +\begin{Verbatim} +\directlua{ + init_elements () + z.A = point: new(-2, -1) + z.B = point: new( 4, 0) + L.AB = line: new(z.A,z.B) + z.F = point: new(0,3) + HY = conic: new(z.F,L.AB,2) + curve = HY : points(-5,4,50) + curveb= HY : points(-5,4,50,swap) + z.K = HY.K + z.S = HY.vertex + z.O = HY.center + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawCoordinates[smooth,cyan](curveb) + \tkzDrawLines(A,B F,K) + \tkzDrawPoints(A,B,F,K,S) + \tkzLabelPoints(A,B,F,K,S) + \end{tikzpicture} +\end{Verbatim} + + +% subsubsection method_points_with_hyperbola (end) + +\subsubsection{Method points with ellipse} % (fold) +\label{ssub:method_points_with_ellipse} + +This time it's a little different: $t$ is a real number between $0$ and $1$, representing a fraction of the measure in radians of the angle $\widehat{MCV}$ (C is the center of the ellipse, V the vertex and M a point on the ellipse). Thus $t=0$ gives the vertex, $t=1$ also the vertex, $t=.5$ the opposite vertex and $t=.25$ the covertex. + +In the next example, I'll show you how to draw only part of the ellipse. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements() +z.A = point : new ( 0 , 0 ) +z.B = point : new ( 4 , 2 ) +L.dir = line : new (z.A,z.B) +z.F = point : new ( 2 , 2) +EL = conic : new(z.F,L.dir,.8) +curve = EL : points (0,1,50) +part = EL : points (0.5,0.75,50) +z.K = EL.K +z.C = EL.center +z.V = EL.vertex +z.M = EL : point (.3) +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawLines(A,B K,F) +\tkzDrawSegments(C,V C,M) +\tkzDrawPoints(A,B,C,F,K,M,V) +\tkzLabelPoints(A,B,C,F,K,M,V) +\tkzDrawCoordinates[smooth](curve) +\tkzDrawCoordinates[smooth,red,thick](part) +\tkzMarkAngles[mark=||,size=.5](V,C,M) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements() +z.A = point : new ( 0 , 0 ) +z.B = point : new ( 4 , 2 ) +L.dir = line : new (z.A,z.B) +z.F = point : new ( 2 , 2) +EL = conic : new(z.F,L.dir,.8) +curve = EL : points (0,1,50) +part = EL : points (0.5,0.75,50) +z.K = EL.K +z.C = EL.center +z.V = EL.vertex +z.M = EL : point (.3) +} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(A,B K,F) + \tkzDrawSegments(C,V C,M) + \tkzDrawPoints(A,B,C,F,K,M,V) + \tkzLabelPoints(A,B,C,F,K,M,V) + \tkzDrawCoordinates[smooth](curve) + \tkzDrawCoordinates[smooth,red,thick](part) + \tkzMarkAngles[mark=||,size=.5](V,C,M) + \end{tikzpicture} +\end{center} +\end{minipage} + +\subsubsection{Method \Imeth{conic}{tangent\_at}} % (fold) +\label{ssub:method_imeth_conic_tangent_at} + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + CO1 = conic : new(z.F,L.dir,.8) + CO2 = conic : new(z.F,L.dir, 1) + CO3 = conic : new(z.F,L.dir, 1.2) + curve1 = CO1 : points (0,1,50) + curve2 = CO2 : points (-5,5,50) + curve3 = CO3 : points (-5,5,50) + z.X_1 = CO1 : point (.3) + z.X_2 = CO2 : point (3) + z.X_3 = CO3 : point (3) + T1 = CO1 : tangent_at (z.X_1) + T2 = CO2 : tangent_at (z.X_2) + T3 = CO3 : tangent_at (z.X_3) + z.u1,z.v1 = get_points (T1) + z.u2,z.v2 = get_points (T2) + z.u3,z.v3 = get_points (T3) + z.K = CO2.K +} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan](A,B K,F) + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add = 2 and 2,red](u1,v1 u2,v2 u3,v3) + \tkzDrawPoints[red](X_1,X_2,X_3) + \tkzDrawPoints(K,F) + \tkzLabelPoints(K,F) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () +z.A = point : new ( 0 , 0 ) +z.B = point : new ( 4 , -2 ) +L.dir = line : new (z.A,z.B) +z.F = point : new ( 2 , 2) +CO1 = conic : new(z.F,L.dir,.8) +CO2 = conic : new(z.F,L.dir, 1) +CO3 = conic : new(z.F,L.dir, 1.2) +curve1 = CO1 : points (0,1,50) +curve2 = CO2 : points (-5,5,50) +curve3 = CO3 : points (-5,5,50) +z.X_1 = CO1 : point (.3) +z.X_2 = CO2 : point (3) +z.X_3 = CO3 : point (3) +T1 = CO1 : tangent_at (z.X_1) +T2 = CO2 : tangent_at (z.X_2) +T3 = CO3 : tangent_at (z.X_3) +z.u1,z.v1 = get_points (T1) +z.u2,z.v2 = get_points (T2) +z.u3,z.v3 = get_points (T3) +z.K = CO2.K +} +\begin{center} + \begin{tikzpicture}[scale=.5] + \tkzGetNodes + \tkzDrawLines[cyan](A,B K,F) + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add = 2 and 2,red](u1,v1 u2,v2 u3,v3) + \tkzDrawPoints[red](X_1,X_2,X_3) + \tkzDrawPoints(K,F) + \tkzLabelPoints(K,F) + \end{tikzpicture} +\end{center} +\end{minipage} +% subsubsection method_imeth_conic_tangent_at (end) + + +\subsubsection{Method \Imeth{conic}{tangent\_from}} % (fold) +\label{ssub:method_imeth_conic_tangent__from} + +\begin{Verbatim} + \directlua{ + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 2 , -1 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + CO1 = conic : new(z.F,L.dir,.8) + CO2 = conic : new(z.F,L.dir, 1) + CO3 = conic : new(z.F,L.dir, 1.2) + curve1 = CO1 : points (0,1,50) + curve2 = CO2 : points (-5,6,50) + curve3 = CO3 : points (-5,7,50) + R1,R2 = CO1 : tangent_from (z.B) + S1,S2 = CO2 : tangent_from (z.B) + T1,T2 = CO3 : tangent_from (z.B) + z.u1,z.v1 = get_points (R1) + z.u2,z.v2 = get_points (R2) + z.r1,z.s1 = get_points (S1) + z.r2,z.s2 = get_points (S2) + z.x1,z.y1 = get_points (T1) + z.x2,z.y2 = get_points (T2) + z.K = CO2.K + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan](A,B K,F) + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add = 0 and .25,red](B,v1 B,v2 B,s1 B,s2 B,y1 B,y2) + \tkzDrawPoints[red](v1,v2,s1,s2,y1,y2) + \tkzDrawPoints(K,F,B) + \tkzLabelPoints(K,F,B) + \end{tikzpicture} + \end{document} +\end{Verbatim} + +\directlua{ +init_elements () +z.A = point : new ( 0 , 0 ) +z.B = point : new ( 2 , -1 ) +L.dir = line : new (z.A,z.B) +z.F = point : new ( 2 , 2) +CO1 = conic : new(z.F,L.dir,.8) +CO2 = conic : new(z.F,L.dir, 1) +CO3 = conic : new(z.F,L.dir, 1.2) +curve1 = CO1 : points (0,1,50) +curve2 = CO2 : points (-5,6,50) +curve3 = CO3 : points (-5,7,50) +R1,R2 = CO1 : tangent_from (z.B) +S1,S2 = CO2 : tangent_from (z.B) +T1,T2 = CO3 : tangent_from (z.B) +z.u1,z.v1 = get_points (R1) +z.u2,z.v2 = get_points (R2) +z.r1,z.s1 = get_points (S1) +z.r2,z.s2 = get_points (S2) +z.x1,z.y1 = get_points (T1) +z.x2,z.y2 = get_points (T2) +z.K = CO2.K +} +\begin{center} + \begin{tikzpicture}[scale =.75] + \tkzGetNodes + \tkzDrawLines[cyan](A,B K,F) + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add = 0 and .25,red](B,v1 B,v2 B,s1 B,s2 B,y1 B,y2) + \tkzDrawPoints[red](v1,v2,s1,s2,y1,y2) + \tkzDrawPoints(K,F,B) + \tkzLabelPoints(K,F,B) + \end{tikzpicture} +\end{center} + +% subsubsection method_imeth_conic_tangent__from (end) +% subsubsection method_points_with_ellipse (end) + +\subsubsection{Parabola with focus, axis of symmetry and curve point} % (fold) +\label{ssub:parabola_with_focus_axis_of_symmetry_and_curve_point} + +\begin{minipage}{.5\textwidth} + \begin{Verbatim} + \directlua{ + init_elements () + z.F = point: new ( 2 , 0 ) + z.A = point: new ( 3 , 4 ) + L.FA = line : new (z.A,z.F) + z.M = point : new (-1 , 0) + C.MF = circle : new (z.M,z.F) + L.ll = L.FA : ll_from (z.M) + z.H = intersection (C.MF,L.ll) + L.dir = L.FA : ortho_from (z.H) + z.K = intersection (L.dir,L.FA) + PA = conic : new (z.F,L.dir,1) + curve = PA : points (-5,3,20) + } + \begin{tikzpicture}[gridded] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(A,K M,H K,H) + \tkzDrawSegments[dashed](M,F) + \tkzDrawPoints(A,F,M,H,K) + \tkzLabelPoints(A,F,M,H,K) + \tkzDrawCircle[dashed](M,F) + \end{tikzpicture} + \end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ + init_elements () + z.F = point: new ( 2 , 0 ) + z.A = point: new ( 3 , 4 ) + L.FA = line : new (z.A,z.F) + z.M = point : new (-1 , 0) + C.MF = circle : new (z.M,z.F) + L.ll = L.FA : ll_from (z.M) + z.H = intersection (C.MF,L.ll) + L.dir = L.FA : ortho_from (z.H) + z.K = intersection (L.dir,L.FA) + PA = conic : new (z.F,L.dir,1) + curve = PA : points (-5,3,20) +} + \begin{center} + \begin{tikzpicture}[scale =.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(A,K M,H K,H) + \tkzDrawSegments[dashed](M,F) + \tkzDrawPoints(A,F,M,H,K) + \tkzLabelPoints(A,F,M,H,K) + \tkzDrawCircle[dashed](M,F) + \end{tikzpicture} + \end{center} +\end{minipage} + +% subsubsection parabola_with_focus_axis_of_symmetry_and_curve_point (end) + +\subsubsection{Ellipse with center, vertex and covertex} % (fold) +\label{ssub:ellipse_with_center_vertex_and_covertex} + +\directlua{ +init_elements () +z.C = point : new ( 1 , -1) +z.V = point : new ( 4 , 3) +z.W = (z.C-z.V) : orthogonal (3) : at (z.C) +local a = length(z.C,z.V) +local b = length(z.C,z.W) +local c = math.sqrt(a^2 - b^2) +local e = c / a +axis = line : new (z.C,z.V) +% foci +z.F = axis : report (c,z.C) +z.G = z.C : symmetry (z.F) +% directrix +z.K = axis : report ( b^2 / c, z.F ) +z.Kp = axis : report (-b^2 / c, z.G ) +% % major_axis +z.u = (z.C-z.K) : orthogonal (2) : at (z.K) +z.v = (z.C-z.K) : orthogonal (-2) : at (z.K) +L.dir = line : new (z.u,z.v) +% % %axis : ortho_from (z.K) +z.r = (z.C-z.Kp) : orthogonal (2) : at (z.Kp) +z.s = (z.C-z.Kp) : orthogonal (-2) : at (z.Kp) +CO = conic : new (z.F,L.dir,e) +curve = CO : points (0,1,100) +} + +\begin{center} + \begin{tikzpicture}[scale= .75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(u,v r,s K,K') + \tkzDrawLine(C,V) + \tkzDrawPoints(V,W,C,F,K,K',G) + \tkzLabelPoints(V,W,C,F,K,K',G) + \end{tikzpicture} +\end{center} + + \begin{Verbatim} +\directlua{ + init_elements () + z.C = point : new ( 1 , -1) + z.V = point : new ( 4 , 3) + z.W = (z.C-z.V) : orthogonal (3) : at (z.C) + local a = length(z.C,z.V) + local b = length(z.C,z.W) + local c = math.sqrt(a^2 - b^2) + local e = c / a + axis = line : new (z.C,z.V) + % foci + z.F = axis : report (c,z.C) + z.G = z.C : symmetry (z.F) + % directrix + z.K = axis : report ( b^2 / c, z.F ) + z.Kp = axis : report (-b^2 / c, z.G ) + % % major_axis + z.u = (z.C-z.K) : orthogonal (2) : at (z.K) + z.v = (z.C-z.K) : orthogonal (-2) : at (z.K) + L.dir = line : new (z.u,z.v) + % % %axis : ortho_from (z.K) + z.r = (z.C-z.Kp) : orthogonal (2) : at (z.Kp) + z.s = (z.C-z.Kp) : orthogonal (-2) : at (z.Kp) + CO = conic : new (z.F,L.dir,e) + curve = CO : points (0,1,100) +} + +\begin{tikzpicture}[gridded] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(u,v r,s K,K') + \tkzDrawLine(C,V) + \tkzDrawPoints(V,W,C,F,K,K',G) + \tkzLabelPoints(V,W,C,F,K,K',G) + \end{tikzpicture} +\end{Verbatim} + +% subsubsection ellipse_with_center_vertex_and_covertex (end) + +\subsubsection{Ellipse with foci and point} % (fold) +\label{ssub:ellipse_with_foci_and_point} + +The key point here is that the relationship $MF + MG = 2a$ can be used to determine $a$. + +\directlua{ +init_elements () +z.F = point : new ( 1 , -1) +z.G = point : new ( 4 , 3) +z.M = point : new ( 2 , 3) +z.C = midpoint(z.F,z.G) +local a = (length(z.F,z.M)+length(z.G,z.M))/2 +local c = length(z.F,z.G)/2 +local b = math.sqrt(a^2 - c^2) +local e = c / a +axis = line : new (z.G,z.F) +% directrix +z.K = axis : report ( b^2 / c, z.F ) +z.Kp = axis : report (-b^2 / c, z.G ) +% % major_axis +z.u = (z.C-z.K) : orthogonal (2) : at (z.K) +z.v = (z.C-z.K) : orthogonal (-2) : at (z.K) +L.dir = line : new (z.u,z.v) +% % %axis : ortho_from (z.K) +z.r = (z.C-z.Kp) : orthogonal (2) : at (z.Kp) +z.s = (z.C-z.Kp) : orthogonal (-2) : at (z.Kp) +CO = conic : new (z.F,L.dir,e) +curve = CO : points (0,1,100) +} + +\begin{center} + \begin{tikzpicture}[scale = .8] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(u,v r,s K,K') + \tkzDrawSegments[dashed](M,F M,G) + \tkzDrawLine(F,G) + \tkzDrawPoints(C,F,K,K',G,M) + \tkzLabelPoints(C,F,K,K',G,M) + \end{tikzpicture} +\end{center} + +\begin{Verbatim} +\directlua{ +init_elements () + z.F = point : new ( 1 , -1) + z.G = point : new ( 4 , 3) + z.M = point : new ( 2 , 3) + z.C = midpoint(z.F,z.G) + local a = (length(z.F,z.M)+length(z.G,z.M))/2 + local c = length(z.F,z.G)/2 + local b = math.sqrt(a^2 - c^2) + local e = c / a + axis = line : new (z.G,z.F) + % directrix + z.K = axis: report ( b^2 / c, z.F ) + z.Kp = axis: report (-b^2 / c, z.G ) + z.u = (z.C-z.K): orthogonal(2) : at (z.K) + z.v = (z.C-z.K): orthogonal(-2): at (z.K) + L.dir = line: new (z.u,z.v) + z.r = (z.C-z.Kp): orthogonal(2): at (z.Kp) + z.s = (z.C-z.Kp): orthogonal(-2): at (z.Kp) + CO = conic: new (z.F,L.dir,e) + curve = CO: points (0,1,100) +} +\begin{tikzpicture}[scale = .5] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(u,v r,s K,K') + \tkzDrawSegments[dashed](M,F M,G) + \tkzDrawLine(F,G) + \tkzDrawPoints(C,F,K,K',G,M) + \tkzLabelPoints(C,F,K,K',G,M) +\end{tikzpicture} + \end{Verbatim} + +% subsubsection ellipse_with_foci_and_point (end) + +\subsubsection{Method \Imeth{conic}{point}} % (fold) +\label{ssub:method_imeth_conic_point} + +This method is similar to method \code{point} from other classes, with some specific differences. The argument $t$ depends on the conic section. Frequently, $t$ is a real number between $0$ and $1$, which expresses a percentage of a given distance. This is not the case, of course, for the parabola and the hyperbola. In these cases, $t$ is the abscissa on the directrix of a point on the curve. On the other hand, for the ellipse, $t$ has the same meaning as for a circle. In fact, the point on the ellipse is derived from a point on the principal circle by an affinity transformation with a ratio of $b/a$. + +Refer to [\ref{ssub:method_imeth_conic_tangent_at}] . + +A few remarks on the following example. It shows how the affinity ellipse can be obtained from the main circle. Thus we have $HQ' = \dfrac{b}{a} HQ$, likewise $\tan(\beta) = \dfrac{b}{a} \tan(\alpha)$. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ + init_elements () + z.Fb = point: new ( 3 , 0 ) + z.Fa = point: new ( -3 , 2 ) + local c = length(z.Fa,z.Fb)/2 + local a = 4 + local b = math.sqrt(a^2 - c^2) + local e = c/a + L.FaFb = line : new (z.Fa,z.Fb) + z.C = L.FaFb.mid + z.K = report_(z.C,z.Fb,a^2/c) + z.Ko = ortho_from_(z.K,z.K,z.Fb) + L.dir = line :new(z.K,z.Ko) + EL = conic : new (z.Fb,L.dir,e) + curve = EL : points (0,1,100) + z.X = EL.vertex + C.X = circle : new (z.C,z.X) + z.Q = C.X : point(.15) + z.H = L.FaFb : projection (z.Q) + z.Qp = L.FaFb : affinity + (L.FaFb : ortho_from(z.C),b/a,z.Q) + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(Fa,Fb K,Ko) + \tkzDrawLines[add = 2 and 2](K,Ko) + \tkzDrawCircles(C,Q) + \tkzDrawSegments[dashed](C,Q C,Q' H,Q) + \tkzDrawPoints(Fa,Fb,C,X,Q,Q',H) + \tkzLabelPoints(Fa,Fb,C,X,Q,Q',H) + \tkzLabelAngle(Fb,C,Q'){$\beta$} + \tkzMarkAngle[size=.8](Fb,C,Q') + \tkzLabelAngle[pos=1.5](Fb,C,Q){$\alpha$} + \tkzMarkAngle[size=1.3](Fb,C,Q) + \end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.Fb = point: new ( 3 , 0 ) + z.Fa = point: new ( -3 , 2 ) + local c = length(z.Fa,z.Fb)/2 + local a = 4 + local b = math.sqrt(a^2 - c^2) + local e = c/a + L.FaFb = line : new (z.Fa,z.Fb) + z.C = L.FaFb.mid + z.K = report_(z.C,z.Fb,a^2/c) + z.Ko = ortho_from_(z.K,z.K,z.Fb) + L.dir = line :new(z.K,z.Ko) + EL = conic : new (z.Fb,L.dir,e) + curve = EL : points (0,1,100) + z.X = EL.vertex + C.X = circle : new (z.C,z.X) + z.Q = C.X : point(.15) + z.H = L.FaFb : projection (z.Q) + z.Qp = L.FaFb : affinity + (L.FaFb : ortho_from(z.C),b/a,z.Q) + } + \begin{center} + \begin{tikzpicture}[scale=.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(Fa,Fb K,Ko) + \tkzDrawLines[add = 2 and 2](K,Ko) + \tkzDrawCircles(C,Q) + \tkzDrawSegments[dashed](C,Q C,Q' H,Q) + \tkzDrawPoints(Fa,Fb,C,X,Q,Q',H) + \tkzLabelPoints(Fa,Fb,C,X,Q,Q',H) + \tkzLabelAngle(Fb,C,Q'){$\beta$} + \tkzMarkAngle[size=.8](Fb,C,Q') + \tkzLabelAngle[pos=1.5](Fb,C,Q){$\alpha$} + \tkzMarkAngle[size=1.3](Fb,C,Q) + \end{tikzpicture} + \end{center} +\end{minipage} + + +% subsubsection method_imeth_conic_point (end) + +\subsubsection{Method \Imeth{conic}{in\_out}} % (fold) +\label{ssub:method_imeth_conic_in_out} + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + EL = conic : new(z.F,L.dir,.8) + PA = conic : new(z.F,L.dir, 1) + HY = conic : new(z.F,L.dir, 1.2) + curve1 = EL : points ( 0,1,50) + curve2 = PA : points (-5,5,50) + curve3 = HY : points (-5,5,50) + z.L = point : new (-2,4) + Lel = tostring(EL : in_out (z.L)) + Lpa = tostring(PA : in_out (z.L)) + Lhy = tostring(HY : in_out (z.L)) + z.M = point : new (-1,5) + Mel = tostring(EL : in_out (z.M)) + Mpa = tostring(PA : in_out (z.M)) + Mhy = tostring(HY : in_out (z.M)) + z.N = point : new (0,6) + Nel = tostring(EL : in_out (z.N)) + Npa = tostring(PA : in_out (z.N)) + Nhy = tostring(HY : in_out (z.N)) + z.O = point : new (1,7) + Oel = tostring(EL : in_out (z.O)) + Opa = tostring(PA : in_out (z.O)) + Ohy = tostring(HY : in_out (z.O)) +} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawPoints(L) + \tkzLabelPoint(L){$L$:(\tkzUseLua{Lel};\tkzUseLua{Lpa};\tkzUseLua{Lhy})} + \tkzDrawPoints(M) + \tkzLabelPoint(M){$M$:(\tkzUseLua{Mel};\tkzUseLua{Mpa};\tkzUseLua{Mhy})} + \tkzDrawPoints(N) + \tkzLabelPoint(N){$N$:(\tkzUseLua{Nel};\tkzUseLua{Npa};\tkzUseLua{Nhy})} + \tkzDrawPoints(O) + \tkzLabelPoint(O){$N$:(\tkzUseLua{Oel};\tkzUseLua{Opa};\tkzUseLua{Ohy})} +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + EL = conic : new(z.F,L.dir,.8) + PA = conic : new(z.F,L.dir, 1) + HY = conic : new(z.F,L.dir, 1.2) + curve1 = EL : points ( 0,1,50) + curve2 = PA : points (-5,5,50) + curve3 = HY : points (-5,5,50) + z.L = point : new (-2,4) + Lel = tostring(EL : in_out (z.L)) + Lpa = tostring(PA : in_out (z.L)) + Lhy = tostring(HY : in_out (z.L)) + z.M = point : new (-1,5) + Mel = tostring(EL : in_out (z.M)) + Mpa = tostring(PA : in_out (z.M)) + Mhy = tostring(HY : in_out (z.M)) + z.N = point : new (0,6) + Nel = tostring(EL : in_out (z.N)) + Npa = tostring(PA : in_out (z.N)) + Nhy = tostring(HY : in_out (z.N)) + z.O = point : new (1,7) + Oel = tostring(EL : in_out (z.O)) + Opa = tostring(PA : in_out (z.O)) + Ohy = tostring(HY : in_out (z.O)) +} +\begin{center} + \begin{tikzpicture}[scale=.5] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawPoints(L) + \tkzLabelPoint(L){$L$:(\tkzUseLua{Lel};\tkzUseLua{Lpa};\tkzUseLua{Lhy})} + \tkzDrawPoints(M) + \tkzLabelPoint(M){$M$:(\tkzUseLua{Mel};\tkzUseLua{Mpa};\tkzUseLua{Mhy})} + \tkzDrawPoints(N) + \tkzLabelPoint(N){$N$:(\tkzUseLua{Nel};\tkzUseLua{Npa};\tkzUseLua{Nhy})} + \tkzDrawPoints(O) + \tkzLabelPoint(O){$N$:(\tkzUseLua{Oel};\tkzUseLua{Opa};\tkzUseLua{Ohy})} + \end{tikzpicture} +\end{center} +\end{minipage} + +% subsubsection method_imeth_conic_in_out (end) + +\subsubsection{Method \Imeth{conic}{orthoptic}} % (fold) +\label{ssub:method_imeth_conic_orthoptic} + +In the geometry of curves, an orthoptic is the set of points for which two tangents of a given curve meet at a right angle. In the case of the parabola, this curve is the directrix. For the hyperbola and ellipse, it's a circle, but for the hyperbola, the eccentricity must be between $1$ and $\sqrt{2}$. \footnote {When the eccentricity is equal to $\sqrt{2}$, then the hyperbola is equilateral. The asymptotes in a good orthonormal frame of reference have equations $y=x$ and $y=-x$.} + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ + init_elements () + z.A = point : new ( 0 , 1 ) + z.B = point : new ( 4 , 3 ) + z.F = point : new ( 2 , 6 ) + L.AB = line : new (z.A,z.B) + PA = conic : new (z.F,L.AB,1) + curve = PA : points (-5,5,50) + z.K = PA.K + z.S = PA.vertex + z.M = PA : point(-3) + z.H = PA.directrix : projection (z.M) + L.FH = line : new (z.F,z.H) + L.med = L.FH : mediator () + z.P = intersection (L.AB,L.med) + z.N = PA : tangent_from (z.P).pb + D = PA : orthoptic () + z.v = D :point(0.75) + T1,T2 = PA : tangent_from(z.v) + z.t1 = T1.pb + z.t2 = T2.pb + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth,thick,purple](curve) + \tkzDrawLines[add = 0 and .2](v,t1 v,t2 P,N) + \tkzDrawLines[add = .5 and .5](A,B M,P K,F) + \tkzDrawSegments(M,H H,F F,M) + \tkzDrawPoints(F,K,P,M,H,v,t1,t2,S,N) + \tkzLabelPoints(K,P,M,H,S) + \tkzLabelPoints[right](F,N) + \tkzMarkAngles[mark=||](H,M,P P,M,F) + \tkzMarkSegments[mark=x](H,M M,F) + \tkzMarkSegments[mark=|](F,S K,S) + \end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () + z.A = point : new ( 0 , 1 ) + z.B = point : new ( 4 , 3 ) + z.F = point : new ( 2 , 6 ) + L.AB = line : new (z.A,z.B) + PA = conic : new (z.F,L.AB,1) + curve = PA : points (-5,5,50) + z.K = PA.K + z.S = PA.vertex + z.M = PA : point(-3) + z.H = PA.directrix : projection (z.M) + L.FH = line : new (z.F,z.H) + L.med = L.FH : mediator () + z.P = intersection (L.AB,L.med) + z.N = PA : tangent_from (z.P).pb + D = PA : orthoptic () + z.v = D :point(0.75) + T1,T2 = PA : tangent_from(z.v) + z.t1 = T1.pb + z.t2 = T2.pb +} +\begin{center} + \begin{tikzpicture}[scale =.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth,thick,purple](curve) + \tkzDrawLines[add = 0 and .2](v,t1 v,t2 P,N) + \tkzDrawLines[add = .5 and .5](A,B M,P K,F) + \tkzDrawSegments(M,H H,F F,M) + \tkzDrawPoints(F,K,P,M,H,v,t1,t2,S,N) + \tkzLabelPoints(K,P,M,H,S) + \tkzLabelPoints[right](F,N) + \tkzMarkAngles[mark=||](H,M,P P,M,F) + \tkzMarkSegments[mark=x](H,M M,F) + \tkzMarkSegments[mark=|](F,S K,S) + \end{tikzpicture} +\end{center} +\end{minipage} + + +% subsubsection method_imeth_conic_orthoptic (end) + +% subsection methods_of_the_class_conic (end) + +\subsection{Intersection line - conic} % (fold) +\label{sub:intersection_line_conic} + +You will of course find some additional information in the [\ref{sec:intersections}] section, particularly in [\ref{sub:line_conic}]. + +Here's an example, with the three different types of conics and the same straight line. As with other intersections, you don't need to worry about the type of curve, the package will determine the class. For the moment, intersections only concern straight lines with conics. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} + \directlua{ + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + CO1 = conic : new(z.F,L.dir,.8) + CO2 = conic : new(z.F,L.dir, 1) + CO3 = conic : new(z.F,L.dir, 1.2) + curve1 = CO1 : points ( 0,1,50) + curve2 = CO2 : points (-5,5,50) + curve3 = CO3 : points (-5,5,50) + z.K = CO1.K + z.u,z.v = get_points(CO1.major_axis) + z.x = L.dir : report (-3,z.K) + z.y = L.dir : report ( 3,z.K) + z.r = point : new ( 0 , 4 ) + z.s = point : new ( 4 , 1 ) + L.rs = line : new (z.r,z.s) + z.u_1,z.u_2 = intersection (L.rs,CO1) + z.v_1,z.v_2 = intersection (L.rs,CO2) + z.w_1,z.w_2 = intersection (L.rs,CO3) + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add =.5 and .5](r,s u,v x,y) + \tkzDrawPoints[red](u_1,u_2,v_2,v_1,w_1,w_2) + \end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + CO1 = conic : new(z.F,L.dir,.8) + CO2 = conic : new(z.F,L.dir, 1) + CO3 = conic : new(z.F,L.dir, 1.2) + curve1 = CO1 : points ( 0,1,50) + curve2 = CO2 : points (-5,5,50) + curve3 = CO3 : points (-5,5,50) + z.K = CO1.K + z.u,z.v = get_points(CO1.major_axis) + z.x = L.dir : report (-3,z.K) + z.y = L.dir : report ( 3,z.K) + z.r = point : new ( 0 , 4 ) + z.s = point : new ( 4 , 1 ) + L.rs = line : new (z.r,z.s) + z.u_1,z.u_2 = intersection (L.rs,CO1) + z.v_1,z.v_2 = intersection (L.rs,CO2) + z.w_1,z.w_2 = intersection (L.rs,CO3) + } + \begin{center} + \begin{tikzpicture}[scale=.5] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add =.5 and .5](r,s u,v x,y) + \tkzDrawPoints[red](u_1,u_2,v_2,v_1,w_1,w_2) + \end{tikzpicture} + \end{center} +\end{minipage} + + +% subsection intersection_line_conic (end) + +\subsection{Useful tools} % (fold) +\label{sub:useful_tools} + +These tools are functions for obtaining the focus, directrix and eccentricity of a conic. + +\subsubsection{\Igfct{math}{PA\_dir }} % (fold) +\label{ssub:pa_dir} + +The parameters are the focus and two points on the parabola. The method used by this function is to consider circles centered on the two points passing through the focus. The tangent line common to both circles is the directrix. There are two solutions. + +We replace |_,L.dir| by |L.dir,_| to obtain the second solution. + +\begin{minipage}{.5\textwidth} + \begin{Verbatim} +\directlua{ +init_elements () + z.A = point: new (0 , 1) + z.B = point: new (5 , 2) + z.F = point: new (2 , -1) + _,L.dir = PA_dir(z.F,z.A,z.B) + PA = conic : new (z.F,L.dir,1) + curve = PA: points (-5,5,50) + z.T,z.Tp= get_points(L.dir) +} +\begin{tikzpicture}[scale = .5] + \tkzGetNodes + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawCircles(A,F B,F) + \tkzDrawPoints(A,B,F,T,T') + \tkzDrawLine(T,T') + \tkzLabelPoints(A,B,F,T,T') +\end{tikzpicture} + \end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ + init_elements () + z.A = point: new (0 , 1) + z.B = point: new (5 , 2) + z.F = point: new (2 , -1) + _,L.dir = PA_dir(z.F,z.A,z.B) + PA = conic : new (z.F,L.dir,1) + curve = PA: points (-5,5,50) + z.T,z.Tp= get_points(L.dir) +} + \begin{center} +\begin{tikzpicture}[scale = .5] + \tkzGetNodes + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawCircles(A,F B,F) + \tkzDrawPoints(A,B,F,T,T') + \tkzDrawLine(T,T') + \tkzLabelPoints(A,B,F,T,T') +\end{tikzpicture} + \end{center} +\end{minipage} + + + +% subsubsection _igfct_math_pa__focus (end) + +\subsubsection{\Igfct{math}{PA\_focus }} % (fold) +\label{ssub:_igfct_math_pa__focus} + +This time the arguments are the directrix, and two points. Of course we're looking for the focus. + +La méthode consiste encore à considérer deux cercles centrés aux deux points et tangents à la ligne directrix. Si c'est possible, le foyer se trouve à l'un des deux points communs aux cercles. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} + \directlua{ + init_elements () + z.A = point: new ( 0 , 1) + z.B = point: new ( 4 , 2) + z.u = point: new ( 2 , -1) + z.v = point: new (-2 , 0) + L.dir = line : new (z.u,z.v) + z.hA = L.dir : projection (z.A) + z.hB = L.dir : projection (z.B) + z.F,z.G = PA_focus (L.dir,z.A,z.B) + PA = conic : new (z.F,L.dir,1) + curve = PA: points (-5,5,50) + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawCircles(A,hA B,hB) + \tkzDrawLines(u,v) + \tkzDrawPoints(A,B,u,v,hA,hB,F,G) + \tkzLabelPoints(A,B,F,G,u,v) + \end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{ +init_elements () + z.A = point: new ( 0 , 1) + z.B = point: new ( 4 , 2) + z.u = point: new ( 2 , -1) + z.v = point: new (-2 , 0) + L.dir = line : new (z.u,z.v) + z.hA = L.dir : projection (z.A) + z.hB = L.dir : projection (z.B) + z.F,z.G = PA_focus (L.dir,z.A,z.B) + PA = conic : new (z.F,L.dir,1) + curve = PA: points (-5,5,50) +} +\begin{center} + \begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawCircles(A,hA B,hB) + \tkzDrawLines(u,v) + \tkzDrawPoints(A,B,u,v,hA,hB,F,G) + \tkzLabelPoints(A,B,F,G,u,v) + \end{tikzpicture} +\end{center} +\end{minipage} + +% subsubsection _igfct_math_pa__focus (end) + +\subsubsection{\Igfct{math}{HY\_bifocal }} % (fold) +\label{ssub:_igfct_math_hy__bifocal} + +For the hyperbola, only one tool is currently available, based on the bifocal definition. The arguments are the two foci and either the real $a$ (distance from the center to one of the vertices), or a point on the curve. The method is simple, and consists in determining the various attributes using the formulas that characterize them. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements () +z.F = point : new ( 1 , -1) +z.G = point : new ( 4 , 3) +z.M = point : new ( 6, 2) +z.C = midpoint(z.F,z.G) +HY = conic : new (HY_bifocal(z.G,z.F,z.M)) +curve = HY : points (-3,3,50) +z.K = HY.K +curveb = HY : points (-3,3,50,swap) +} +\begin{tikzpicture}[scale = .5] +\tkzGetNodes +\tkzDrawCoordinates[smooth,red](curve) +\tkzDrawCoordinates[smooth,red](curveb) +\tkzDrawSegments[dashed](M,F M,G) + \tkzDrawLine(F,G) + \tkzDrawPoints[red](M) + \tkzDrawPoints(C,F,G,K) + \tkzLabelPoints(C,F,G,K) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.F = point : new ( 1 , -1) + z.G = point : new ( 4 , 3) + z.M = point : new ( 6, 2) + z.C = midpoint(z.F,z.G) + HY = conic : new (HY_bifocal(z.G,z.F,z.M)) + curve = HY : points (-3,3,50) + z.K = HY.K + curveb = HY : points (-3,3,50,swap) + } + \begin{center} + \begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawCoordinates[smooth,red](curve) + \tkzDrawCoordinates[smooth,red](curveb) + \tkzDrawSegments[dashed](M,F M,G) + \tkzDrawLine(F,G) + \tkzDrawPoints[red](M) + \tkzDrawPoints(C,F,G,K) + \tkzLabelPoints(C,F,G,K) + \end{tikzpicture} + \end{center} +\end{minipage} + + +% subsubsection _igfct_math_hy__bifocal (end) + +\subsubsection{\Igfct{math}{EL\_bifocal }} % (fold) +\label{ssub:_igfct_math_el__bifocal} +For the ellipse, we have two options. +The first tool is \code{EL\_bifocal} like for hyperbola. + + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements () + z.F = point : new ( 1 , -1) + z.G = point : new ( 4 , 3) + z.M = point : new ( 2 , 4) + z.C = midpoint(z.F,z.G) + local a = (length(z.F,z.M)+length(z.G,z.M))/2 + EL = conic : new (EL_bifocal(z.F,z.G,z.M)) + curve = EL : points (0,1,100) + L.dir = EL.directrix + z.K = EL.K + z.Kp = z.C : symmetry (z.K) + z.u,z.v = get_points(EL.minor_axis) + z.r,z.s = get_points(EL.directrix) +} +\begin{tikzpicture}[scale = .5] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines[add = .5 and .5](K,K' u,v r,s) + \tkzDrawSegments[dashed](M,F M,G) + \tkzDrawPoints(C,F,K,K',G,M) + \tkzLabelPoints(C,F,K,K',G,M) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.F = point : new ( 1 , -1) + z.G = point : new ( 4 , 3) + z.M = point : new ( 2 , 4) + z.C = midpoint(z.F,z.G) + local a = (length(z.F,z.M)+length(z.G,z.M))/2 + EL = conic : new (EL_bifocal(z.F,z.G,z.M)) + curve = EL : points (0,1,100) + L.dir = EL.directrix + z.K = EL.K + z.Kp = z.C : symmetry (z.K) + z.u,z.v = get_points(EL.minor_axis) + z.r,z.s = get_points(EL.directrix) + } + \begin{center} + \begin{tikzpicture}[scale = .5] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines[add = .5 and .5](K,K' u,v r,s) + \tkzDrawSegments[dashed](M,F M,G) + \tkzDrawPoints(C,F,K,K',G,M) + \tkzLabelPoints(C,F,K,K',G,M) + \end{tikzpicture} + \end{center} +\end{minipage} + +% subsubsection _igfct_math_el__bifocal (end) + +\subsubsection{\Igfct{math}{EL\_points }} % (fold) +\label{ssub:_igfct_math_el__points} + +% subsubsection _igfct_math_el__points (end) + + The second allows us to return to the old method, which used the center, vertex and covertex of the ellipse. To obtain the three arguments now required, you need to apply the \code{EL\_points} function. + +I've left the programming lines, which are replaced by the function shown. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ +init_elements () +z.C = point : new ( 1 , -1) +z.V = point : new ( 4 , 3) +z.W = (z.C-z.V) : orthogonal (3) : at (z.C) +local a = length(z.C,z.V) +local b = length(z.C,z.W) +local c = math.sqrt(a^2 - b^2) +local e = c / a +axis = line : new (z.C,z.V) +% foci +z.F = axis : report (c,z.C) +z.G = z.C : symmetry (z.F) +% directrix +z.K = axis : report ( b^2 / c, z.F ) +z.Kp = axis : report (-b^2 / c, z.G ) +% major_axis +z.u = (z.C-z.K) : orthogonal (2) : at (z.K) +z.v = (z.C-z.K) : orthogonal (-2) : at (z.K) +L.dir = line : new (z.u,z.v) +% axis : ortho_from (z.K) +z.r = (z.C-z.Kp) : orthogonal (2) : at (z.Kp) +z.s = (z.C-z.Kp) : orthogonal (-2) : at (z.Kp) +%CO = conic : new (z.F,L.dir,e) +CO = conic : new (EL_points(z.C,z.V,z.W)) +curve = CO : points (0,1,100) +} +\begin{tikzpicture}[gridded] +\tkzGetNodes +\tkzDrawCoordinates[smooth](curve) +\tkzDrawLines(u,v r,s K,K') +\tkzDrawLine(C,V) +\tkzDrawPoints(V,W,C,F,K,K',G) +\tkzLabelPoints(V,W,C,F,K,K',G) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.C = point : new ( 1 , -1) + z.V = point : new ( 4 , 3) + z.W = (z.C-z.V) : orthogonal (3) : at (z.C) + local a = length(z.C,z.V) + local b = length(z.C,z.W) + local c = math.sqrt(a^2 - b^2) + local e = c / a + axis = line : new (z.C,z.V) + % foci + z.F = axis : report (c,z.C) + z.G = z.C : symmetry (z.F) + % directrix + z.K = axis : report ( b^2 / c, z.F ) + z.Kp = axis : report (-b^2 / c, z.G ) + % major_axis + z.u = (z.C-z.K) : orthogonal (2) : at (z.K) + z.v = (z.C-z.K) : orthogonal (-2) : at (z.K) + L.dir = line : new (z.u,z.v) + % axis : ortho_from (z.K) + z.r = (z.C-z.Kp) : orthogonal (2) : at (z.Kp) + z.s = (z.C-z.Kp) : orthogonal (-2) : at (z.Kp) + %CO = conic : new (z.F,L.dir,e) + CO = conic : new (EL_points(z.C,z.V,z.W)) + curve = CO : points (0,1,100) + } + \begin{center} + \begin{tikzpicture}[scale =.5] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve) + \tkzDrawLines(u,v r,s K,K') + \tkzDrawLine(C,V) + \tkzDrawPoints(V,W,C,F,K,K',G) + \tkzLabelPoints(V,W,C,F,K,K',G) + \end{tikzpicture} + \end{center} +\end{minipage} + + + +% subsection useful_tools (end) +% section class_iclass_conic (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex index 7b640220e67..e78f84a5aae 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex @@ -2,6 +2,9 @@ \section{Class \Iclass{ellipse}} % (fold) \label{sec:class_ellipse} +{\color{red} CETTE SECTION EST OBSOLÈTE. Il est préférable d'utiliser la classe \code{conic} +} + \subsection{Attributes of an ellipse} % (fold) \label{sub:attributes_of_an_ellipse} The first attributes are the three points that define the ellipse: : the \Iattr{ellipse}{center} , the \Iattr{ellipse}{vertex} and the\Iattr{ellipse}{covertex}. The first method to define an ellipse is to give its center, then the point named \tkzname{vertex} which defines the major axis and finally the point named \tkzname{covertex} which defines the minor axis. @@ -32,7 +35,7 @@ The first attributes are the three points that define the ellipse: : the \Iattr \egroup -\subsubsection{Atributes of an ellipse: example} % (fold) +\subsubsection{Attributes of an ellipse: example} % (fold) \label{ssub:attributes_of_an_ellipse} \begin{minipage}{.45\textwidth} \begin{Verbatim} @@ -241,7 +244,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale =1 z.A = point: new (0 , 0) z.B = point: new (5 , 1) L.AB = line : new (z.A,z.B) @@ -309,13 +311,12 @@ init_elements () The method \Imeth{ellipse}{point} defines a point $M$ of the ellipse whose coordinates are $(a\times cos(phi), b\times sin(phi))$. |phi| angle between (center,vertex) and (center,M) \emph{With \code{lua}, the radian is used as unit for angles. } - - + +\vspace{6pt} \begin{minipage}{0.6\textwidth} \begin{Verbatim} \directlua{% init_elements () - scale = .6 z.C = point: new (2 , 3) z.A = point: new (-1 , -2) a = value(4) @@ -339,7 +340,6 @@ init_elements () \begin{minipage}{0.4\textwidth} \directlua{% init_elements () -scale = .6 z.C = point: new (2 , 3) z.A = point: new (-1 , -2) a = value(4) @@ -358,7 +358,7 @@ z.N = L.tb.pb L.K = E :tangent_at (z.K) z.ka,z.kb = get_points(L.K) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .6] \tkzGetNodes \tkzDrawSegments(C,V C,CoV) \tkzDrawLines(x,y A,M A,N ka,kb) @@ -387,5 +387,94 @@ z.ka,z.kb = get_points(L.K) % subsubsection method_point (end) % subsection methods_of_the_class_ellipse (end) +\subsubsection{Example: drawing ellipse} % (fold) +\label{ssub:example_drawing_ellipse} + + It is possible to replace the line + + |\tkzDrawEllipse[teal](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})| + + by |\tkzDrawLuaEllipse[teal](C,A,B)|. Macro arguments: ellipse center, vertex and covertex. + +\vspace{6pt} +\begin{Verbatim} +\begin{tkzelements} +z.C = point: new (0,0) +z.A = point:new(4,2) +L.CA = line : new (z.C,z.A) +z.b = L.CA.north_pa +L = line : new (z.C,z.b) +z.B = L : point (0.5) +E = ellipse: new (z.C,z.A,z.B) a = E.Rx +b = E.Ry +z.F1 = E.Fa +z.F2 = E.Fb +slope = math.deg(E.slope) +z.E = E.east +z.N = E.north +z.W = E.west +z.S = E.south +z.Co = E.covertex +z.Ve = E.vertex +z.M = E : point (.125) +\end{tkzelements} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLuaEllipse[red](C,A,B) + %\tkzDrawEllipse[red](C,\tkzUseLua{a}, + \tkzUseLua{b},\tkzUseLua{slope}) + \tkzDrawPoints(C,A,B,W,S,F1,F2,M) + \tkzLabelPoints(C,A,B) + \tkzDrawLine[add = .25 and .25](A,W) + \tkzLabelSegment[pos=1,above,sloped](A,W){slope = + \pgfmathprintnumber{\tkzUseLua{slope}}} + \tkzLabelPoint[below](S){South} + \tkzLabelPoint[below left](F1){Focus 1} + \tkzLabelPoint[below left](F2){Focus 2} + \tkzLabelPoint[above right](Ve){Vertex = East} + \tkzLabelPoint[above right](Co){Covertex = North} + \end{tikzpicture} +\end{Verbatim} + +\begin{tkzelements} +z.C = point: new (0,0) +z.A = point:new(4,2) +L.CA = line : new (z.C,z.A) +z.b = L.CA.north_pa +L = line : new (z.C,z.b) +z.B = L : point (0.5) +E = ellipse: new (z.C,z.A,z.B) a = E.Rx +b = E.Ry +z.F1 = E.Fa +z.F2 = E.Fb +slope = math.deg(E.slope) +z.E = E.east +z.N = E.north +z.W = E.west +z.S = E.south +z.Co = E.covertex +z.Ve = E.vertex +z.M = E : point (.125) +\end{tkzelements} + +\begin{center} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawLuaEllipse[red](C,A,B) + \tkzDrawPoints(C,A,B,W,S,F1,F2,M) + \tkzLabelPoints(C,A,B) + \tkzDrawLine[add = .25 and .25](A,W) + \tkzLabelSegment[pos=1,above=12pt,sloped](A,W){slope = + \pgfmathprintnumber{\tkzUseLua{slope}}} + \tkzLabelPoint[below](S){South} + \tkzLabelPoint[below left](F1){Focus 1} + \tkzLabelPoint[below left](F2){Focus 2} + \tkzLabelPoint[above right](Ve){Vertex = East} + \tkzLabelPoint[above right](Co){Covertex = North} +\end{tikzpicture} +\end{center} + + +% subsubsection example_drawing_ellipse (end) % section class_ellipse (end) \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex index 91eda324308..ac869cf054b 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex @@ -78,7 +78,6 @@ len = L.ab.length \begin{Verbatim} \directlua{% init_elements () - scale = .5 z.a = point: new (1, 1) z.b = point: new (5, 4) L.ab = line : new (z.a,z.b) @@ -91,7 +90,7 @@ init_elements () len = L.ab.length } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75 ] \tkzGetNodes \tkzDrawPoints(a,b,m,e,r,s,w) \tkzLabelPoints(a,b,e,r,s,w) @@ -137,21 +136,23 @@ init_elements () \begin{minipage}{0.5\textwidth} \directlua{% init_elements () - scale = 1 z.A = point : new (1,1) z.B = point : new (3,2) L.AB = line : new (z.A,z.B) z.C = L.AB.north_pa z.D = L.AB.south_pa } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawLines(A,B C,D) - \tkzDrawPoints(A,...,D) - \tkzLabelPoints(A,...,D) - \tkzMarkRightAngle(B,A,C) - \tkzMarkSegments(A,C A,B A,D) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(A,B C,D) + \tkzDrawPoints(A,...,D) + \tkzLabelPoints(A,...,D) + \tkzMarkRightAngle(B,A,C) + \tkzMarkSegments(A,C A,B A,D) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection example_line_attributes (end) % subsection attributes_of_a_line (end) @@ -168,14 +169,18 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be \captionof{table}{Methods of the class line.(part 1)}\label{line:methods1} \begin{tabular}{lll} \toprule + \textbf{Methods} & \textbf{Comments} & \\ \midrule \Igfct{line}{new(pt, pt)} & |L.AB = line : new(z.A,z.B)| & Create line $(AB)$ ; [\ref{sub:altshiller}] \\ \midrule + \textbf{Real} &&\\ \midrule \Imeth{line}{distance (pt)} & |d = L.AB : distance (z.C)| & [\ref{ssub:method_imeth_line_distance}; \ref{ssub:example_distance_and_projection}] \\ \Imeth{line}{slope ()} & |a = L.AB : slope()| & better is L.AB.slope; [\ref{ssub:example_class_line}]\\ + + \textbf{Boolean} &&\\ \midrule \Imeth{line}{in\_out (pt)} & |b = L.AB: in_out(z.C)| & b=true if $C\in (AB)$ ; [\ref{ssub:method_imeth};\ref{ssub:in_out_for_a_line}] \\ @@ -183,47 +188,57 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be \Imeth{line}{is\_parallel(L)} & & \\ \Imeth{line}{is\_orthogonal(L)} & & \\ \Imeth{line}{is\_equidistant(pt)} & & \\\midrule + + \textbf{Points} &&\\ \midrule + \Imeth{line}{gold\_ratio ()} & |z.C=L.AB : gold_ratio()| & [\ref{sub:gold_ratio_with_segment} ; \ref{sub:the_figure_pappus_circle} ; \ref{sub:bankoff_circle} ] \\ + \Imeth{line}{normalize ()} & |z.C=L.AB : normalize()| & AC =1 and $C\in (AB)$ [ \ref{ssub:normalize}] \\ + \Imeth{line}{normalize\_inv ()} & |z.C=L.AB : normalize_inv()| & CB=1 and $C\in (AB)$ \\ + \Imeth{line}{barycenter (r,r)} & |z.C=L.AB : barycenter (1,2)| & [\ref{ssub:barycenter_with_a_line}] \\ + \Imeth{line}{point (r)} & |z.C=L.AB : point (2)| & $\overrightarrow{AC} = 2\overrightarrow{AB}$ [\ref{sub:ellipse} ; \ref{ssub:method_point}] \\ + \Imeth{line}{midpoint ()} & |z.M=L.AB : midpoint ()| & better is |z.M = L.AB.mid| \\ + \Imeth{line}{harmonic\_int (pt)} & |z.D=L.AB : harmonic_int (z.C)| & [ \ref{sub:bankoff_circle}] \\ + \Imeth{line}{harmonic\_ext (pt)} & |z.D=L.AB : harmonic_ext (z.C)| & [ \ref{sub:bankoff_circle}] \\ + \Imeth{line}{harmonic\_both (r)} & |z.C,z.D=L.AB : harmonic_both|($\varphi$) & [\ref{sub:harmonic_division_with_tkzphi}] \\ + \Imeth{line}{\_east(d)} & |z.M=L.AB : _east(2)| & |BM = 2| $A,B,M$ aligned \\ + \Imeth{line}{\_west(d)} & |z.M=L.AB : _east(2)| & |BM = 2| $A,B,M$ aligned \\ -\Imeth{line}{\_north\_pa(d)} &|z.M=L.AB: _north_pa(2)| &|AM=2|; $AM\perp AB$ ; $\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise. \\ -...&& [\ref{ssub:new_line_from_a_defined_line}; \ref{ssub:attributes_of_an_ellipse}]\\ + +\Imeth{line}{\_north\_pa(d)} &|z.M=L.AB: _north_pa(2)| &|AM=2|; $AM\perp AB$ ; \\ +...&$\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise& [\ref{ssub:new_line_from_a_defined_line}\\ + \Imeth{line}{\_south\_pa(d)} &|z.M=L.AB: _south_pa(2)| &|AM=2|; $AM\perp AB$ ; $\overrightarrow{AB},\overrightarrow{AM}$ clockwise \\ + \Imeth{line}{\_north\_pb(d)} &|z.M=L.AB: _north_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{BA},\overrightarrow{BM}$ clockwise \\ -\Imeth{line}{\_south\_pb(d)} &|z.M=L.AB: _south_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise \\ + +\Imeth{line}{\_south\_pb(d)} &|z.M=L.AB: _south_pb(2)| &|BM=2|; $BM\perp BA$ ; \\ +...&$\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise & [\ref{ssub:new_line_from_a_defined_line}\\ + \Imeth{line}{report(d,pt)} &|z.M=L.AB: report(2,z.N)| &|MN=2|; $AB\parallel MN$ ; [ex. \ref{ssub:method_report}]\\ + \Imeth{line}{colinear\_at(pt,k)} &|z.D=L.AB: colinear_at(z.C,2)| &|CD=2AB|; $AB\parallel CD$ ; [ex. \ref{ssub:method_imeth_line_colinear__at}]\\ \midrule \textbf{Lines} &&\\ \midrule + \Imeth{line}{ll\_from ( pt )} &|L.CD=L.AB: ll_from(z.C)| &$(CD) \parallel (AB)$; [\ref{ssub:new_line_from_a_defined_line}] \\ + \Imeth{line}{ortho\_from ( pt )} &|L.CD=L.AB: ortho_from(z.C)|&$(CD) \perp (AB)$; [\ref{ssub:newline_ortho_from}] \\ + \Imeth{line}{mediator ()} & |L.uv=L.AB: mediator()| & perpendicular bisector of $(A,B)$ \footnote{You can use |perpendicular_bisector| intead of \tkzname{mediator}.}; [\ref{ssub:method_imeth_line_mediator}]\\ -\midrule -\textbf{Triangles}&&\\ -\midrule -\Imeth{line}{equilateral (<swap>)} & |T.ABC=L.AB:equilateral()| & $(\overrightarrow{AB},\overrightarrow{AC})>0$ or $<0$ with swap \footnote{Triangles are defined in the direct sense of rotation, unless the "swap" option is present.}; [\ref{ssub:object_rotation}] \\ -\Imeth{line}{isosceles (an<,swap>)}&|T.ABC=L.AB:isosceles(math.pi/6)|& [\ref{ssub:method_imeth_line_isosceles}]\\ -\Imeth{line}{isosceles\_a (an<,swap>)}& same as |isosceles| & \\ -\Imeth{line}{isosceles\_s (an<,swap>)}&|T.ABC=L.AB:isosceles_s(4)| AC=BC = 4& \\ -\Imeth{line}{two\_angles (an,an)} &|T.ABC=L.AB:two_angles(an,an)|¬e \footnote{The given side is between the two angles} [\ref{ssub:triangle_with_two__angles}] \\ -\Imeth{line}{school ()} & 30°,60°, 90° & \\ -\Imeth{line}{half (<swap>)} & T.ABC = L.AB:half() $\widehat{B}$ = 90° and 2BC = AB& \\ -\Imeth{line}{sss (r,r<,swap>)} & $AC=r$ $BC=r$ & [\ref{ssub:triangle_with_three_given_sides}] \\ -\Imeth{line}{sas (r,an<,swap>)} & $AC =r$ $\widehat{BAC} = an$ & [\ref{ssub:triangle_with_three_given_sides}] \\ -\Imeth{line}{ssa (r,an<,swap>)} & $AC =r$ $\widehat{ABC} = an$& [\ref{ssub:triangle_with_three_given_sides}]\\ \bottomrule \end{tabular} \egroup @@ -239,6 +254,19 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be \toprule \textbf{Methods} & \textbf{Comments} & \\ \midrule +\textbf{Triangles}&&\\ +\midrule +\Imeth{line}{equilateral (<swap>)} & |T.ABC=L.AB:equilateral()| & $(\overrightarrow{AB},\overrightarrow{AC})>0$ or $<0$ with swap \footnote{Triangles are defined in the direct sense of rotation, unless the "swap" option is present.}; [\ref{ssub:object_rotation}] \\ +\Imeth{line}{isosceles (an<,swap>)}&|T.ABC=L.AB:isosceles(math.pi/6)|& [\ref{ssub:method_imeth_line_isosceles}]\\ +\Imeth{line}{isosceles\_a (an<,swap>)}& same as |isosceles| & \\ +\Imeth{line}{isosceles\_s (an<,swap>)}&|T.ABC=L.AB:isosceles_s(4)| AC=BC& \\ +\Imeth{line}{two\_angles (an,an)} &|T.ABC=L.AB:two_angles(an,an)|¬e \footnote{The given side is between the two angles} [\ref{ssub:triangle_with_two__angles}] \\ +\Imeth{line}{school ()} & 30°,60°, 90° & \\ +\Imeth{line}{half (<swap>)} & T.ABC = L.AB:half() $\widehat{B}$ = 90° and 2BC = AB& \\ +\Imeth{line}{sss (r,r<,swap>)} & $AC=r$ $BC=r$ & [\ref{ssub:triangle_with_three_given_sides}] \\ +\Imeth{line}{sas (r,an<,swap>)} & $AC =r$ $\widehat{BAC} = an$ & [\ref{ssub:triangle_with_three_given_sides}] \\ +\Imeth{line}{ssa (r,an<,swap>)} & $AC =r$ $\widehat{ABC} = an$& [\ref{ssub:triangle_with_three_given_sides}]\\ +\midrule \textbf{Squares}&&\\ \midrule \Imeth{line}{square ()} &|S.AB=L.AB : square () | & create a square |S.AB|.\footnote{ |_,_,z.C,z.D = get_points(S.AB)|}; [\ref{ssub:object_rotation}] \\ @@ -261,15 +289,20 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be \midrule \Imeth{line}{circle ()} & |C.AB = L.AB : circle ()| & center pa through pb \\ \Imeth{line}{apollonius (r)} & |C.apo = L.AB : apollonius (2)|& Set of points tq. |MA/MB = 2|; [\ref{ssub:apollonius_circle_ma_mb_k}] \\ -\Imeth{line}{c\_l\_pp (pt,pt)} & |C1,C2 = L.AB : c_l_pp(z.M,z.N)| & [\ref{ssub:c_l_pp}] \\ -\Imeth{line}{c\_ll\_p (pt,pt)} & |C1,C2 = L.AB : c_ll_p(z.C,z.P)| & [\ref{ssub:method_c__ll__p}] \\ +\Imeth{line}{c\_l\_pp (pt,pt)} & |C1,C2 = L.AB: c_l_pp(z.M,z.N)|&[\ref{ssub:c_l_pp}] \\ +\Imeth{line}{c\_ll\_p (pt,pt)} & |C1,C2 = L.AB: c_ll_p(z.C,z.P)|&[\ref{ssub:method_c__ll__p}] \\ \midrule \textbf{Transformations} &&\\ \midrule -\Imeth{line}{reflection ( obj )} & |new obj = L.AB : reflection (obj|& [\ref{ssub:reflection_of_object}] \\ +\Imeth{line}{reflection ( obj )} & |new obj = L.AB : reflection (obj)|& [\ref{ssub:reflection_of_object}] \\ \Imeth{line}{translation ( obj )} & |new obj = L.AB : translation (obj)|& [\ref{ssub:example_translation}] \\ -\Imeth{line}{projection ( obj )} & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$; [\ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}]\\ -... & & [ \ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}]\\ + +\Imeth{line}{projection ( obj )} & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$; \\ +... & & [\ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}; \ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}]\\ + +\Imeth{line}{projection\_ll(L,pts)} & |z.Mp=L.AB:projection_ll(L.CD,z.M)|& [\ref{ssub:method_imeth_line_projection__ll}] \\ + +\Imeth{line}{affinity\_ll(L,k,pts)} & |z.Mp=L.AB:affinity(L.CD,2,z.M)|& [\ref{ssub:method_imeth_line_affinity}] \\ \bottomrule \end{tabular} \egroup @@ -523,10 +556,10 @@ end \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{ - z.A = point : new (0 , 0 ) - z.B = point : new (0 , 4 ) + z.A = point : new (0 , 0 ) + z.B = point : new (0 , 4 ) L.AB = line : new (z.A,z.B) - z.C = point : new (3 , 4 ) + z.C = point : new (3 , 4 ) L.BC = line : new (z.B,z.C) if L.AB:is_orthogonal (L.BC) then tex.print("orthogonal") @@ -645,12 +678,15 @@ z.M = point : new (0,2) z.N = L.AB : report (2.5,z.M) z.O = L.AB : report (2.5) } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawSegments(A,B M,N) -\tkzDrawPoints(A,B,M,N,O) -\tkzLabelPoints(A,B,M,N,O) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawSegments(A,B M,N) + \tkzDrawPoints(A,B,M,N,O) + \tkzLabelPoints(A,B,M,N,O) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection method_report (end) @@ -715,19 +751,20 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = 2 - z.a = point : new (1,2) - z.b = point : new (5,1) - L.ab = line : new (z.a,z.b) - T.abc = L.ab : isosceles (math.pi/6,indirect) - z.c = T.abc.pc - z.L = T.abc : lemoine_point () - T.SY = T.abc : symmedian () - z.Ka,z.Kb,z.Kc = get_points (T.SY) - L.Kb = T.abc : symmedian_line (1) - _,z.Kb = get_points(L.Kb) + z.a = point : new (1,2) + z.b = point : new (5,1) + L.ab = line : new (z.a,z.b) + T.abc = L.ab : isosceles (math.pi/6,indirect) + z.c = T.abc.pc + z.L = T.abc : lemoine_point () + T.SY = T.abc : symmedian () + z.Ka, + z.Kb, + z.Kc = get_points (T.SY) + L.Kb = T.abc : symmedian_line (1) + _,z.Kb = get_points(L.Kb) } -\begin{tikzpicture} +\begin{tikzpicture}[scale= 2] \tkzGetNodes \tkzDrawPolygons(a,b,c Ka,Kb,Kc) \tkzDrawPoints(a,b,c,L,Ka,Kb,Kc) @@ -740,27 +777,30 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = 2 - z.a = point : new (1,2) - z.b = point : new (5,1) - L.ab = line : new (z.a,z.b) - T.abc = L.ab : isosceles (math.pi/6,indirect) - z.c = T.abc.pc - z.L = T.abc : lemoine_point () - T.SY = T.abc : symmedian () - z.Ka,z.Kb, - z.Kc = get_points (T.SY) - L.Kb = T.abc : symmedian_line (1) - _,z.Kb = get_points(L.Kb) + z.a = point: new (1,2) + z.b = point: new (5,1) + L.ab = line: new (z.a,z.b) + T.abc = L.ab:isosceles(math.pi/6,indirect) + z.c = T.abc.pc + z.L = T.abc: lemoine_point () + T.SY = T.abc: symmedian () + z.Ka, + z.Kb, + z.Kc = get_points (T.SY) + L.Kb = T.abc : symmedian_line (1) + _,z.Kb = get_points(L.Kb) } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygons(a,b,c Ka,Kb,Kc) -\tkzDrawPoints(a,b,c,L,Ka,Kb,Kc) -\tkzLabelPoints(c,L,Ka,Kb) -\tkzLabelPoints[above](a,b,Kc) -\tkzDrawSegments[cyan](a,Ka b,Kb c,Kc) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture}[scale= 1.5] + \tkzGetNodes + \tkzDrawPolygons(a,b,c Ka,Kb,Kc) + \tkzDrawPoints(a,b,c,L,Ka,Kb,Kc) + \tkzLabelPoints(c,L,Ka,Kb) + \tkzLabelPoints[above](a,b,Kc) + \tkzDrawSegments[cyan](a,Ka b,Kb c,Kc) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection method_imeth_line_isosceles (end) @@ -785,7 +825,6 @@ init_elements () z.D = T.ABD.pc z.E = T.ABE.pc } -\hspace{\fill} \begin{tikzpicture}[gridded] \tkzGetNodes \tkzDrawPolygons(A,B,C A,B,D A,B,E) @@ -830,39 +869,37 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = 1 - z.A = point : new ( 0 , 0 ) - z.B = point : new ( 5 , 0 ) - L.AB = line : new ( z.A , z.B ) - T.ABC = L.AB : ssa (value(3),math.pi/6) - T.ABD = L.AB : ssa (value(3),math.pi/6,swap) - z.C = T.ABC.pc - z.D = T.ABD.pc + z.A = point: new ( 0 , 0 ) + z.B = point: new ( 5 , 0 ) + L.AB = line: new ( z.A , z.B ) + T.ABC= L.AB: ssa(value(3),math.pi/6) + T.ABD= L.AB: ssa(value(3),math.pi/6,swap) + z.C = T.ABC.pc + z.D = T.ABD.pc } \begin{tikzpicture}[gridded] - \tkzGetNodes - \tkzDrawPolygons(A,B,C A,B,D) - \tkzDrawPoints(A,B,C,D) - \tkzLabelPoints(A,B) - \tkzLabelPoints[above](C,D) - \tkzLabelAngle[teal](C,B,A){$\pi/6$} - \tkzLabelSegment[below left](A,C){$7$} - \tkzLabelSegment[below left](A,D){$7$} + \tkzGetNodes + \tkzDrawPolygons(A,B,C A,B,D) + \tkzDrawPoints(A,B,C,D) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](C,D) + \tkzLabelAngle[teal](C,B,A){$\pi/6$} + \tkzLabelSegment[below left](A,C){$7$} + \tkzLabelSegment[below left](A,D){$7$} \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.6\textwidth} \directlua{% init_elements () - scale =1 - z.A = point : new ( 0 , 0 ) - z.B = point : new ( 5 , 0 ) - L.AB = line : new ( z.A , z.B ) - T.ABC = L.AB : ssa (value(3),math.pi/6) - T.ABD = L.AB : ssa (value(3),math.pi/6,swap) - z.C = T.ABC.pc - z.D = T.ABD.pc - } + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 5 , 0 ) + L.AB = line : new ( z.A , z.B ) + T.ABC = L.AB : ssa (value(3),math.pi/6) + T.ABD = L.AB : ssa (value(3),math.pi/6,swap) + z.C = T.ABC.pc + z.D = T.ABD.pc +} \begin{center} \begin{tikzpicture}[gridded] @@ -946,12 +983,15 @@ init_elements () T.ABH = L.AB : pythagoras () z.H = T.ABH.pc } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,C A,B,D A,B,E A,B,F A,B,G A,B,H) - \tkzDrawPoints(A,...,H) - \tkzLabelPoints(A,...,H) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygons(A,B,C A,B,D A,B,E A,B,F A,B,G A,B,H) + \tkzDrawPoints(A,...,H) + \tkzLabelPoints(A,...,H) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection about_triangles (end) @@ -1144,17 +1184,16 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = 1.25 - z.A = point : new (1,1) - z.B = point : new (3,2) - L.AB = line : new (z.A,z.B) - z.C = L.AB.north_pa - z.D = L.AB.south_pa - L.CD = line : new (z.C,z.D) - _,z.E = get_points ( L.CD: ll_from (z.B)) - % z.E = L2.pb +z.A = point : new (1,1) +z.B = point : new (3,2) +L.AB = line : new (z.A,z.B) +z.C = L.AB.north_pa +z.D = L.AB.south_pa +L.CD = line : new (z.C,z.D) +_,z.E = get_points ( L.CD: ll_from (z.B)) +% z.E = L2.pb } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawLines(A,B C,D B,E) \tkzDrawPoints(A,...,E) @@ -1167,7 +1206,7 @@ init_elements () \begin{minipage}{0.5\textwidth} \directlua{% init_elements () -scale = 1.25 + z.A = point : new (1,1) z.B = point : new (3,2) L.AB = line : new (z.A,z.B) @@ -1179,7 +1218,7 @@ _,z.E = get_points ( L.CD: ll_from (z.B)) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawLines(A,B C,D B,E) \tkzDrawPoints(A,...,E) @@ -1345,7 +1384,6 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = .8 z.a = point: new (0, 0) z.b = point: new (4, 1) z.c = point: new (2, 5) @@ -1353,7 +1391,7 @@ init_elements () L.ab = line: new (z.a,z.b) z.cp,z.dp = L.ab: projection(z.c,z.d) } - \begin{tikzpicture} + \begin{tikzpicture}[scale = .8] \tkzGetNodes \tkzDrawLines(a,b c,c' d,d') \tkzDrawPoints(a,...,d,c',d') @@ -1364,7 +1402,6 @@ init_elements () \begin{minipage}{0.5\textwidth} \directlua{% init_elements () -scale = .8 z.a = point: new (0, 0) z.b = point: new (4, 1) z.c = point: new (2, 5) @@ -1374,7 +1411,7 @@ z.cp,z.dp = L.ab : projection(z.c,z.d) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .8] \tkzGetNodes \tkzDrawLines(a,b c,c' d,d') \tkzDrawPoints(a,...,d,c',d') @@ -1384,9 +1421,109 @@ z.cp,z.dp = L.ab : projection(z.c,z.d) \end{minipage} -% \caption{Projection of several points} % subsubsection example_projection_of_several_points (end) +\subsubsection{Method \Imeth{line}{projection\_ll}} % (fold) +\label{ssub:method_imeth_line_projection__ll} + +We've just seen (orthogonal) projection, but this time we're talking about projecting a point onto a line parallel to a line. At present, this transformation only applies to a point or a group of points, but it will be extended to objects. + +\vspace{6pt} +\begin{minipage}{0.5\textwidth} +\begin{Verbatim} +\directlua{ + z.a = point: new (0, 0) + z.b = point: new (4, 1) + z.c = point: new (-1, 3) + z.d = point: new (-2, -1) + z.m = point: new (1,2) + z.n = point: new (3,2) + L.ab = line: new (z.a,z.b) + L.cd = line: new (z.c,z.d) + z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n) +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawLines(a,b c,d e,m f,n) +\tkzDrawPoints(a,...,f,m,n) +\tkzLabelPoints(a,...,f,m,n) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{0.5\textwidth} +\directlua{ + z.a = point: new (0, 0) + z.b = point: new (4, 1) + z.c = point: new (-1, 3) + z.d = point: new (-2, -1) + z.m = point: new (1,2) + z.n = point: new (3,2) + L.ab = line: new (z.a,z.b) + L.cd = line: new (z.c,z.d) + z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n) +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawLines(a,b c,d e,m f,n) +\tkzDrawPoints(a,...,f,m,n) +\tkzLabelPoints(a,...,f,m,n) +\end{tikzpicture} +\end{minipage} + +% subsubsection method_imeth_line_projection__ll (end) + +\subsubsection{Method \Imeth{line}{affinity}} % (fold) +\label{ssub:method_imeth_line_affinity} + +The introduction of parrallel projection to an axis allows us to define a new transformation: affinity. + +\vspace{6pt} +\begin{minipage}{0.5\textwidth} +\begin{Verbatim} +\directlua{ + z.a = point: new (0, 0) + z.b = point: new (4, 1) + z.c = point: new (-1, 3) + z.d = point: new (-2, -1) + z.m = point: new (1,2) + z.n = point: new (3,2) + L.ab = line: new (z.a,z.b) + L.cd = line: new (z.c,z.d) + z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n) + z.g,z.h = L.ab : affinity(L.cd,2,z.m,z.n)} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(a,b c,d e,m f,n) + \tkzDrawPoints(a,...,h,m,n) + \tkzLabelPoints(a,...,h,m,n) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{0.5\textwidth} +\directlua{ + z.a = point: new (0, 0) + z.b = point: new (4, 1) + z.c = point: new (-1, 3) + z.d = point: new (-2, -1) + z.m = point: new (1,2) + z.n = point: new (3,2) + L.ab = line: new (z.a,z.b) + L.cd = line: new (z.c,z.d) + z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n) + z.g,z.h = L.ab : affinity(L.cd,2,z.m,z.n)} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawLines(a,b c,d e,m f,n) +\tkzDrawPoints(a,...,h,m,n) +\tkzLabelPoints(a,...,h,m,n) +\end{tikzpicture} +\end{minipage} + + +% subsubsection method_imeth_line_affinity (end) + + + \subsubsection{Example: combination of methods} % (fold) \label{ssub:example_combination_of_methods} @@ -1426,7 +1563,6 @@ init_elements () \begin{minipage}{0.4\textwidth} \directlua{% init_elements () -scale = .5 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.C = point: new (1 , 5) @@ -1441,7 +1577,7 @@ z.a,z.b = L.ab.pa,L.ab.pb } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawCircle(O,A) @@ -1501,11 +1637,10 @@ init_elements () \tkzGetNodes \tkzDrawPoints(A,...,F) \tkzLabelPoints(A,...,F) - \tkzDrawSegments[->,red,> =latex](C,E D,F A,B) ) + \tkzDrawSegments[->,red,> =latex](C,E D,F A,B) \end{tikzpicture} \end{center} - \end{minipage} % subsubsection example_translation (end) @@ -1684,8 +1819,11 @@ Remark: |\tkzUseLua{length(z.P,z.A)/length(z.P,z.B)}| = \tkzUseLua{length(z.P,z. \label{ssub:c_l_pp} Circle tangent to a line passing through two points. -First, consider the general case: a straight line $(AB)$ and two points, $M$ and $N$. We are tasked with finding the circle that is tangent to the line and passes through the two points. We will focus on the straight line $(AB)$ and apply a specific method designed for such cases. +First, consider the general case: a straight line $(AB)$ and two points, $M$ and $N$. We are tasked with finding the circle that is tangent to the line and passes through the two points. + + We will focus on the straight line $(AB)$ and apply a specific method designed for such cases. The method takes into account the following special cases: + \begin{itemize} \item line $(MN)$ is perpendicular to the line $(AB)$; \item line $(MN)$ is parallel to line $(AB)$; @@ -1698,7 +1836,6 @@ The method takes into account the following special cases: \begin{Verbatim} \directlua{ init_elements () - scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 8 , 0 ) z.M = point : new ( 1 , 1 ) @@ -1710,7 +1847,7 @@ The method takes into account the following special cases: z.T1 = C1.through z.T2 = C2.through } - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawLines(A,B M,N) \tkzDrawCircles(O1,T1 O2,T2) @@ -1723,7 +1860,6 @@ The method takes into account the following special cases: \begin{minipage}{0.6\textwidth} \directlua{ init_elements () -scale =.75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 6 , 0 ) z.M = point : new ( 1 , 1 ) @@ -1735,24 +1871,29 @@ z.O2 = C2.center z.T1 = C1.through z.T2 = C2.through } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawLines(A,B M,N) -\tkzDrawCircles(O1,T1 O2,T2) -\tkzDrawPoints(A,B,M,N) -\tkzLabelPoints(A,B,M,N) -\tkzDrawPoints(A,B,M,N,O1,T1,O2,T2) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture}[scale =.6] + \tkzGetNodes + \tkzDrawLines(A,B M,N) + \tkzDrawCircles(O1,T1 O2,T2) + \tkzDrawPoints(A,B,M,N) + \tkzLabelPoints(A,B,M,N) + \tkzDrawPoints(A,B,M,N,O1,T1,O2,T2) + \end{tikzpicture} +\end{center} + \end{minipage} \vspace{6pt} -Let's look at the impossible case: the points are on either side of the line. The method returns \code{nil} and \code{nil}. +Let's look at the impossible case: the points are on either side of the line. +The method returns \code{nil} and \code{nil}. + +\vspace{6pt} \begin{minipage}{0.4\textwidth} \begin{Verbatim} \directlua{ init_elements () -scale =.75 z.A = point :new (0, 0) z.B = point :new (6, 0) z.M = point :new (1, 1) @@ -1763,8 +1904,6 @@ z.I = intersection(L.AB,L.MN) C1,C2 = L.AB : c_l_pp(z.M,z.N) if C1 == nil then - tex.print('\\message{Error: Argument is nil}') - tex.print('Error: Argument is nil') else z.C = C1.center z.Cp = C2.center @@ -1772,7 +1911,7 @@ else z.Tp = C2.through end } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.6] \tkzGetNodes \tkzDrawLines(A,B M,N) \tkzDrawPoints(A,B,M,N) @@ -1783,7 +1922,6 @@ end \begin{minipage}{0.6\textwidth} \directlua{ init_elements () -scale =.75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 6 , 0 ) z.M = point : new ( 1 , 1 ) @@ -1793,9 +1931,8 @@ L.MN = line:new(z.M,z.N) z.I = intersection(L.AB,L.MN) C1,C2 = L.AB : c_l_pp(z.M,z.N) if C1 == nil - then - tex.print('\\message{Error: Argument is nil}') - tex.print('Error: Argument is nil') +then + else z.C = C1.center z.Cp = C2.center @@ -1803,12 +1940,15 @@ else z.Tp = C2.through end } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawLines(A,B M,N) -\tkzDrawPoints(A,B,M,N) -\tkzLabelPoints(A,B,M,N) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture}[scale =.6] + \tkzGetNodes + \tkzDrawLines(A,B M,N) + \tkzDrawPoints(A,B,M,N) + \tkzLabelPoints(A,B,M,N) + \end{tikzpicture} +\end{center} + \end{minipage} \vspace{6pt} @@ -1820,7 +1960,7 @@ Let's look at the case where the line $(MN)$ is parallel to the initial line. \directlua{ init_elements () z.A = point : new ( 0 , 0 ) - z.B = point : new ( 8 , 0 ) + z.B = point : new ( 6 , 0 ) z.M = point : new ( 0 , 3 ) z.N = point : new ( 5 , 3 ) L.AB = line:new(z.A,z.B) @@ -1832,7 +1972,7 @@ Let's look at the case where the line $(MN)$ is parallel to the initial line. } \begin{tikzpicture} \tkzGetNodes - \tkzDrawLines(A,B M,N) + \tkzDrawSegments(A,B M,N) \tkzDrawCircles(O1,T1) \tkzDrawPoints(A,B,M,N) \tkzDrawPoints(A,B,M,N) @@ -1840,28 +1980,31 @@ Let's look at the case where the line $(MN)$ is parallel to the initial line. \end{tikzpicture} \end{Verbatim} \end{minipage} -\begin{minipage}{0.4\textwidth} +\begin{minipage}{0.6\textwidth} \directlua{ init_elements () -z.A = point : new ( 0 , 0 ) -z.B = point : new ( 8 , 0 ) -z.M = point : new ( 0 , 3 ) -z.N = point : new ( 5 , 3 ) -L.AB = line:new(z.A,z.B) -C1,C2 = L.AB : c_l_pp(z.M,z.N) -z.O1 = C1.center -z.O2 = C2.center -z.T1 = C1.through -z.T2 = C2.through +z.A = point : new (0 , 0 ) +z.B = point : new (6 , 0 ) +z.M = point : new (0 , 3 ) +z.N = point : new (5 , 3 ) +L.AB = line:new(z.A,z.B) +C1,C2= L.AB : c_l_pp(z.M,z.N) +z.O1 = C1.center +z.O2 = C2.center +z.T1 = C1.through +z.T2 = C2.through } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawLines(A,B M,N) -\tkzDrawCircles(O1,T1) -\tkzDrawPoints(A,B,M,N) -\tkzDrawPoints(A,B,M,N) -\tkzLabelPoints(A,B,M,N) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawSegments(A,B M,N) + \tkzDrawCircles(O1,T1) + \tkzDrawPoints(A,B,M,N) + \tkzDrawPoints(A,B,M,N) + \tkzLabelPoints(A,B,M,N) + \end{tikzpicture} +\end{center} + \end{minipage} @@ -1873,7 +2016,6 @@ Where the line is perpendicular to the initial line. \begin{Verbatim} \directlua{ init_elements () -scale = .75 z.A = point : new(0, 0 ) z.B = point : new(6, 0 ) z.M = point : new(1, 1 ) @@ -1890,7 +2032,6 @@ z.T2 = C2.through \begin{minipage}{0.6\textwidth} \directlua{ init_elements () -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 6 , 0 ) z.M = point : new ( 1 , 1 ) @@ -1902,14 +2043,17 @@ z.O2 = C2.center z.T1 = C1.through z.T2 = C2.through } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawLines(A,B M,N) -\tkzDrawCircles(O1,T1 O2,T2) -\tkzDrawPoints(A,B,M,N) -\tkzLabelPoints(A,B,M,N) -\tkzDrawPoints(A,B,M,N,O1,T1,O2,T2) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawLines(A,B M,N) + \tkzDrawCircles(O1,T1 O2,T2) + \tkzDrawPoints(A,B,M,N) + \tkzLabelPoints(A,B,M,N) + \tkzDrawPoints(A,B,M,N,O1,T1,O2,T2) + \end{tikzpicture} +\end{center} + \end{minipage} The last special case is when one of the points is on the initial line. In this case, there's only one solution. @@ -1958,22 +2102,23 @@ z.O2 = C2.center z.T1 = C1.through z.T2 = C2.through } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawLines(A,B M,N) -\tkzDrawCircles(O1,T1 O2,T2) -\tkzDrawPoints(A,B,M,N) -\tkzLabelPoints(A,B,M,N) -\tkzDrawPoints(A,B,M,N,O1,T1,O2,T2) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(A,B M,N) + \tkzDrawCircles(O1,T1 O2,T2) + \tkzDrawPoints(A,B,M,N) + \tkzLabelPoints(A,B,M,N) + \tkzDrawPoints(A,B,M,N,O1,T1,O2,T2) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection c_l_pp (end) \subsubsection{Method \Imeth{line}{c\_ll\_p}} % (fold) \label{ssub:method_c__ll__p} - - Let's consider two straight lines $(AB)$ and $(AC)$ and a point $P$ not belonging to these lines. Is there a circle through $P$ tangent to these two lines? @@ -1982,35 +2127,33 @@ The following example shows that there are two solutions using the method linked \vspace{6pt} \begin{minipage}{0.5\textwidth} \begin{Verbatim} - \directlua{ +\directlua{ init_elements() - scale =.75 - z.A = point : new ( 0 , 0 ) - z.B = point : new ( 6 , 0 ) - L.AB = line : new ( z.A,z.B ) - z.C = point : new ( 6 , 4 ) - L.AC = line : new ( z.A,z.C ) - T = triangle : new (z.A,z.B,z.C) - z.P = point : new ( 3 , 1 ) - C1,C2 = L.AB : c_ll_p (z.C,z.P) - z.O1 = C1.center - z.T1 = C1.through - z.O2 = C2.center - z.T2 = C2.through - } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawLines[thick](A,B A,C) - \tkzDrawCircles[red](O1,T1 O2,T2) - \tkzDrawPoints(A,B,C,P) - \tkzLabelPoints(A,B,C,P) - \end{tikzpicture} + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 6 , 0 ) + L.AB = line : new ( z.A,z.B ) + z.C = point : new ( 6 , 4 ) + L.AC = line : new ( z.A,z.C ) + T = triangle : new (z.A,z.B,z.C) + z.P = point : new ( 3 , 1 ) + C1,C2 = L.AB : c_ll_p (z.C,z.P) + z.O1 = C1.center + z.T1 = C1.through + z.O2 = C2.center + z.T2 = C2.through +} +\begin{tikzpicture}[scale =.75] +\tkzGetNodes +\tkzDrawLines[thick](A,B A,C) + \tkzDrawCircles[red](O1,T1 O2,T2) + \tkzDrawPoints(A,B,C,P) + \tkzLabelPoints(A,B,C,P) +\end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{0.5\textwidth} \directlua{ init_elements() - scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 6 , 0 ) L.AB = line : new ( z.A,z.B ) @@ -2025,7 +2168,7 @@ init_elements() z.T2 = C2.through } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale =.75] \tkzGetNodes \tkzDrawLines[thick](A,B A,C) \tkzDrawCircles[red](O1,T1 O2,T2) @@ -2043,7 +2186,6 @@ The first special case is where the point $P$ lies on the bisector of $A$. \begin{Verbatim} \directlua{ init_elements() -scale =.75 z.A = point : new (0 , 0) z.B = point : new (6 , 0) L.AB = line : new ( z.A,z.B) @@ -2058,7 +2200,7 @@ scale =.75 z.O2 = C2.center z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawLines(A,B A,C A,P) \tkzDrawCircles(O1,T1 O2,T2) @@ -2070,7 +2212,6 @@ scale =.75 \begin{minipage}{0.5\textwidth} \directlua{ init_elements() -scale = .75 z.A = point : new (0 , 0) z.B = point : new (6 , 0) L.AB = line : new ( z.A,z.B) @@ -2086,7 +2227,7 @@ scale = .75 z.T2 = C2.through } \begin{center} -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawLines(A,B A,C A,P) \tkzDrawCircles(O1,T1 O2,T2) @@ -2105,7 +2246,6 @@ A first special case is when the point $P$ lies on one of the lines \begin{Verbatim} \directlua{ init_elements() -scale =.75 z.A = point:new(0, 0) z.B = point:new(6, 0) L.AB = line:new(z.A,z.B) @@ -2121,7 +2261,7 @@ scale =.75 z.O2 = C2.center z.T2 = C2.through } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawLines(A,B A,C A,I) \tkzDrawCircles(O1,T1 O2,T2) @@ -2133,7 +2273,6 @@ scale =.75 \begin{minipage}{0.5\textwidth} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 6 , 0 ) L.AB = line : new ( z.A,z.B ) @@ -2150,7 +2289,7 @@ scale = .75 z.T2 = C2.through } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawLines(A,B A,C A,I) \tkzDrawCircles(O1,T1 O2,T2) @@ -2161,8 +2300,6 @@ scale = .75 \end{minipage} %subsubsection method_c__ll__p (end) - % subsection methods_from_class_line (end) - % section class_line (end) \endinput diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex index dfb17d2cc26..475fe23ae11 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex @@ -24,7 +24,7 @@ This \code{matrix} class has been created to avoid the need for an external libr a, b, c, et d being real or complex numbers. \end{mybox} \end{minipage} - \begin{minipage}{.5\textwidth} + \begin{minipage}{.4\textwidth} \directlua{% init_elements () M = matrix: new {{a,b},{c,d}} @@ -47,7 +47,7 @@ init_elements () |V = matrix : vector (1,2,3)| \end{mybox} \end{minipage} -\begin{minipage}{.5\textwidth} +\begin{minipage}{.4\textwidth} \directlua{% init_elements () V = matrix : vector (1,2,3) tex.print('V = ') V : print () @@ -63,7 +63,7 @@ init_elements () |H = matrix : htm (math.pi/3,1,2,2,1)| \end{mybox} \end{minipage} -\begin{minipage}{.5\textwidth} +\begin{minipage}{.4\textwidth} \directlua{% init_elements () H = matrix : htm (math.pi/3,1,2,2,1) @@ -598,23 +598,25 @@ z.Kp = Tp.pc \begin{Verbatim} \directlua{% init_elements () - pi = math.pi - M = matrix : htm (pi/4 , 3 , 1 ) - z.O = point : new (0,0) - V.ori = z.O.mtx : homogenization () - z.I = point : new (1,0) - z.J = point : new (0,1) - z.A = point: new (2,0) - z.B = point: new (1,2) - L.AB = line : new (z.A,z.B) - z.Op,z.Ip,z.Jp = M : htm_apply (z.O,z.I,z.J) - L.ApBp = M : htm_apply (L.AB) - z.Ap = L.ApBp.pa - z.Bp = L.ApBp.pb - z.K = point : new (2,2) - T = triangle : new ( z.I , z.J , z.K ) - Tp = M : htm_apply (T) - z.Kp = Tp.pc + pi = math.pi + M = matrix : htm (pi/4 , 3 , 1 ) + z.O = point : new (0,0) + V.ori = z.O.mtx : homogenization () + z.I = point : new (1,0) + z.J = point : new (0,1) + z.A = point: new (2,0) + z.B = point: new (1,2) + L.AB = line : new (z.A,z.B) + z.Op, + z.Ip, + z.Jp = M : htm_apply (z.O,z.I,z.J) + L.ApBp = M : htm_apply (L.AB) + z.Ap = L.ApBp.pa + z.Bp = L.ApBp.pb + z.K = point : new (2,2) + T = triangle : new ( z.I , z.J , z.K ) + Tp = M : htm_apply (T) + z.Kp = Tp.pc } \end{Verbatim} \end{minipage} diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex index ac2641f52cd..1ef68141cb7 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex @@ -72,14 +72,13 @@ Explanations are given here: \ref{sub:barycenter} \label{sub:harmonic_division_with_tkzphi} \begin{Verbatim} \directlua{% -init_elements () - scale =.5 + init_elements () z.a = point: new(0,0) z.b = point: new(8,0) L.ab = line: new (z.a,z.b) z.m,z.n = L.ab: harmonic_both (tkzphi) } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawLine[add= .2 and .2](a,n) \tkzDrawPoints(a,b,n,m) @@ -89,21 +88,23 @@ init_elements () \directlua{% -init_elements () - scale =.25 + init_elements () z.a = point: new(0,0) z.b = point: new(8,0) L.ab = line: new (z.a,z.b) z.m,z.n = L.ab: harmonic_both (tkzphi) } -\hspace*{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawLine[add= .1 and .1](a,n) - \tkzDrawPoints(a,b,n,m) - \tkzLabelPoints(a,b,n,m) -\end{tikzpicture} - \hspace*{\fill} + +\begin{center} + \begin{tikzpicture}[scale =.25] + \tkzGetNodes + \tkzDrawLine[add= .1 and .1](a,n) + \tkzDrawPoints(a,b,n,m) + \tkzLabelPoints(a,b,n,m) + \end{tikzpicture} +\end{center} + + % subsection harmonic_division_with_tkzphi (end) \subsection{Function islinear or is\_linear} % (fold) @@ -111,14 +112,14 @@ init_elements () \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 (4, 4) - if islinear (z.a,z.b,z.c) then - z.d = point: new (0, 0) - else - z.d = point: new (-1, -1) + init_elements () + z.a = point: new (1, 1) + z.b = point: new (2, 2) + z.c = point: new (4, 4) + if islinear (z.a,z.b,z.c) then + z.d = point: new (0, 0) + else + z.d = point: new (-1, -1) end } \begin{tikzpicture} @@ -130,7 +131,7 @@ init_elements () \end{minipage} \begin{minipage}{0.5\textwidth} \directlua{% -init_elements () + init_elements () z.a = point: new (1, 1) z.b = point: new (2, 2) z.c = point: new (4, 4) @@ -140,13 +141,16 @@ init_elements () z.d = point: new (-1, -1) end } - \hspace*{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPoints(a,...,d) - \tkzLabelPoints(a,...,d) -\end{tikzpicture} -\hspace*{\fill} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPoints(a,...,d) + \tkzLabelPoints(a,...,d) + \end{tikzpicture} +\end{center} + + \end{minipage} % subsection function_islinear (end) @@ -207,15 +211,18 @@ init_elements () l = L.AB.length z.H = L.AB : projection (z.C) } - \hspace*{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawLines(A,B C,H) -\tkzDrawPoints(A,B,C,H) -\tkzLabelPoints(A,B,C,H) -\tkzLabelSegment[above right,draw](C,H){$CH = \tkzUseLua{d}$} -\tkzLabelSegment[below right,draw](A,B){$AB = \tkzUseLua{l}$} -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(A,B C,H) + \tkzDrawPoints(A,B,C,H) + \tkzLabelPoints(A,B,C,H) + \tkzLabelSegment[above right,draw](C,H){$CH = \tkzUseLua{d}$} + \tkzLabelSegment[below right,draw](A,B){$AB = \tkzUseLua{l}$} + \end{tikzpicture} +\end{center} + \end{minipage} % subsection transfer_from_lua_to_tex (end) @@ -242,7 +249,6 @@ init_elements () \end{Verbatim} \directlua{% init_elements () - scale = .75 z.a = point: new(0, 0) z.b = point: new(-3, -3) z.c = point: new(0, 3) @@ -260,7 +266,7 @@ tex.print('slope normalized of (ad) : '..tostring(angle_normalize(angle))..'\\\\ \begin{minipage}{.5\textwidth} \begin{Verbatim} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawLines[red](a,b a,c a,d) \tkzDrawPoints(a,b,c,d) @@ -271,7 +277,7 @@ tex.print('slope normalized of (ad) : '..tostring(angle_normalize(angle))..'\\\\ \end{minipage} \begin{minipage}{.5\textwidth} \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawLines[red](a,b a,c a,d) \tkzDrawPoints(a,b,c,d) @@ -280,9 +286,6 @@ tex.print('slope normalized of (ad) : '..tostring(angle_normalize(angle))..'\\\\ \end{center} \end{minipage} - - - % subsection normalized_angles (end) \subsection{Get angle} % (fold) @@ -315,27 +318,29 @@ init_elements () \end{minipage} \begin{minipage}{0.4\textwidth} \directlua{% -init_elements () - scale = 1.2 - z.a = point: new(0, 0) - z.b = point: new(-2, -2) - z.c = point: new(0, 3) - angcb = tkzround ( get_angle (z.a,z.c,z.b),3) - angbc = tkzround ( get_angle (z.a,z.b,z.c),3) + init_elements () + z.a = point: new(0, 0) + z.b = point: new(-2, -2) + z.c = point: new(0, 3) + angcb = tkzround ( get_angle (z.a,z.c,z.b),3) + angbc = tkzround ( get_angle (z.a,z.b,z.c),3) } -\hspace*{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawLines[red](a,b a,c) -\tkzDrawPoints(a,b,c) -\tkzLabelPoints(a,b,c) -\tkzMarkAngle[->](c,a,b) -\tkzLabelAngle(c,a,b){\tkzUseLua{angcb}} -\tkzMarkAngle[->](b,a,c) -\tkzLabelAngle(b,a,c){\tkzUseLua{angbc}} -\end{tikzpicture} -\hspace*{\fill} + +\begin{center} + \begin{tikzpicture}[scale = 1.2] + \tkzGetNodes + \tkzDrawLines[red](a,b a,c) + \tkzDrawPoints(a,b,c) + \tkzLabelPoints(a,b,c) + \tkzMarkAngle[->](c,a,b) + \tkzLabelAngle(c,a,b){\tkzUseLua{angcb}} + \tkzMarkAngle[->](b,a,c) + \tkzLabelAngle(b,a,c){\tkzUseLua{angbc}} + \end{tikzpicture} +\end{center} + + \end{minipage} % subsection get_angle (end) @@ -368,7 +373,6 @@ init_elements () \begin{minipage}{0.5\textwidth} \directlua{% init_elements () - scale = .6 z.A = point: new(0,0) z.B = point: new(5,0) z.C = point: new(0,3) @@ -378,16 +382,18 @@ init_elements () z.C_1 = get_points (T.ABC: anti ()) x = dot_product (z.A,z.B,z.C) } -\hspace*{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon(A,B,C) - \tkzDrawPoints(A,B,C,A_1,B_1,C_1) - \tkzLabelPoints(A,B,C,A_1,B_1,C_1) - \tkzDrawPolygon[blue](A_1,B_1,C_1) - \tkzText[right](0,-1){dot product =\tkzUseLua{x}} - \end{tikzpicture} -\hspace*{\fill} + +\begin{center} + \begin{tikzpicture}[ scale = .6] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawPoints(A,B,C,A_1,B_1,C_1) + \tkzLabelPoints(A,B,C,A_1,B_1,C_1) + \tkzDrawPolygon[blue](A_1,B_1,C_1) + \tkzText[right](0,-1){dot product =\tkzUseLua{x}} + \end{tikzpicture} +\end{center} + \end{minipage} The scalar product of the vectors $\overrightarrow{AC}$ and $\overrightarrow{AB}$ is equal to $\tkzUseLua{x}$, so these vectors are orthogonal. @@ -445,19 +451,22 @@ init_elements () angci = tkzround ( get_angle (z.a,z.b,z.i),2) z.e = bisector_ext (z.a,z.b,z.c).pb } -\hspace{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon(a,b,c) - \tkzDrawSegments(a,i b,h a,e) - \tkzDrawPoints(a,b,c,i,h) - \tkzLabelPoints(a,b) - \tkzLabelPoints[above](c,i,h) - \tkzMarkAngle[->](i,a,c) - \tkzLabelAngle[font=\tiny,pos=.75](i,a,c){\tkzUseLua{angci}} - \tkzMarkAngle[<-](b,a,i) - \tkzLabelAngle[font=\tiny,pos=.75](b,a,i){\tkzUseLua{angic}} -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(a,b,c) + \tkzDrawSegments(a,i b,h a,e) + \tkzDrawPoints(a,b,c,i,h) + \tkzLabelPoints(a,b) + \tkzLabelPoints[above](c,i,h) + \tkzMarkAngle[->](i,a,c) + \tkzLabelAngle[font=\tiny,pos=.75](i,a,c){\tkzUseLua{angci}} + \tkzMarkAngle[<-](b,a,i) + \tkzLabelAngle[font=\tiny,pos=.75](b,a,i){\tkzUseLua{angic}} + \end{tikzpicture} +\end{center} + \end{minipage} % subsection bisector_and_altitude (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex new file mode 100644 index 00000000000..86d3da6c7d8 --- /dev/null +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex @@ -0,0 +1,341 @@ +\newpage +\section{Orthormal cartesian coordinate system} % (fold) +\label{sec:orthormal_cartesian_coordinate_system} + +This new class is still experimental. I mainly use it for drawing conics. + +It's also an opportunity to remind you of certain notions concerning this package. Although the aim of the package is not to use equations, to draw with \TIKZ{} it is necessary to use a coordinate system. So as not to complicate development, I've chosen to work only with an orthonormal Cartesian coordinate system (occs). + +For now, the goal is to move from one orthonormal Cartesian coordinate system to another, also orthonormal. The new coordinate system is obtained from the first by translation and rotation. The arguments are a straight line that indicates the direction of the new abscissa axis and a point that will be the center of the new coordinate system. + +Let's look at a concrete example. We are looking for the intersections of a parabola with a straight line. The parabola is defined by a directrix and a focus. In a reference frame centered on the vertex $S$ of the parabola, with the x-axis being a parallel passing through this vertex to the directrix, the equation of the parabola is $y =\dfrac{x^2}{2p}$, where $p$ is the value of the \code{latus rectum}. This corresponds to the length of the segment originating from the focus, parallel to the directrix, and ending on the parabola. $p$ is also the distance from the focus to the directrix. + +To find the intersections, we simply determine the equation of the line in the new reference frame and use $y =\dfrac{x^2}{2p}$ as the equation of the curve. In this example, two internal functions are used. It is best not to use them at this stage, as their names may change. The function \code{param\_line} is used to determine the coefficients of the line, and \code{solve\_para\_line} finds the intersection points. + +If solutions exist, the result provides two values, $r_1$ and $r_2$, which are the abscissas of the intersection points in the new reference frame. After computing the ordinates, one could use a function to determine the coordinates in \TIKZ{} within the new coordinate system. However, there is another approach: we determine the points $x$ and $y$ corresponding to the values found ($r_1$, $r_2$) on the abscissa axis of the new reference frame \code{OCCS.abscissa}. Then, geometrically, we locate the intersection points on the parabola. + +\begin{Verbatim} +\directlua{ + init_elements () +z.O = point : new (0,0) +z.i = point : new (1,0) +z.j = point : new (0,1) +z.A = point : new (-1 , 0) +z.B = point : new (5 , 4) +L.dir = line : new (z.A , z.B) +z.F = point : new (0 , 3) +PA = conic : new (z.F,L.dir,1) +curve = PA : points (-3,3,50) +local p = PA.p +z.P = L.dir : report (p,z.K) +z.X = PA : point (p) +z.H = L.dir : projection (z.X) +z.K = PA.K +z.S = PA.vertex +L.KF = PA.major_axis +% new occs +OCCS = occs : new (L.dir,z.S) +z.u = OCCS.x +z.v = OCCS.y +% line a,b +z.a = point : new (-1,1) +z.b = point : new (3,5) +L.ab = line : new (z.a,z.b) +% % coordinates in the new occs +X,Y = OCCS : coordinates (z.F) +Xa,Ya = OCCS : coordinates (z.a) +Xb,Yb = OCCS : coordinates (z.b) +% solve in the new occs +local r,s = param_line (Xa,Ya,Xb,Yb) +r1,r2 = solve_para_line (p,r,s) +z.x = OCCS.abscissa :report(r1,z.K) +z.y = OCCS.abscissa :report(r2,z.K) +L1 = L.dir : ortho_from (z.x) +L2 = L.dir : ortho_from (z.y) +z.s1 = intersection (L.ab,L1) +z.s2 = intersection (L.ab,L2) +} + +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth,orange,thick](curve) + \tkzDrawLines(A,B) + \tkzDrawLines[add = 1 and 1](K,F) + \tkzDrawSegments[add = .5 and .5,blue](a,b) + \tkzDrawSegments[dashed](s1,x s2,y) + \tkzDrawPoints(A,B,F,K,S) + \tkzDrawPoints[blue,size=2](a,b) + \tkzDrawPoints[blue,size=2](s1,s2,x,y) + \tkzLabelPoints[blue](a,b) + \tkzLabelPoints[blue,above left](s1,s2) + \tkzLabelPoints(O,i,u,S,A,B,x,y) + \tkzLabelPoints[left](j,v) + \tkzLabelPoints[right](F,K) + \tkzDrawSegments[->,red,thick](O,i O,j) + \tkzDrawSegments[->,purple,thick](S,u S,v) + \tkzLabelSegment[below,sloped,pos=.7](A,B){Directrix} +\end{tikzpicture} +\end{Verbatim} + +\directlua{ + init_elements () +z.O = point : new (0,0) +z.i = point : new (1,0) +z.j = point : new (0,1) +z.A = point : new (-1 , 0) +z.B = point : new (5 , 4) +L.dir = line : new (z.A , z.B) +z.F = point : new (0 , 3) +PA = conic : new (z.F,L.dir,1) +curve = PA : points (-3,3,50) +local p = PA.p +z.P = L.dir : report (p,z.K) +z.X = PA : point (p) +z.H = L.dir : projection (z.X) +z.K = PA.K +z.S = PA.vertex +L.KF = PA.major_axis +% new occs +OCCS = occs : new (L.dir,z.S) +z.u = OCCS.x +z.v = OCCS.y +% line a,b +z.a = point : new (-1,1) +z.b = point : new (3,5) +L.ab = line : new (z.a,z.b) +% % coordinates in the new occs +X,Y = OCCS : coordinates (z.F) +Xa,Ya = OCCS : coordinates (z.a) +Xb,Yb = OCCS : coordinates (z.b) +% solve in the new occs +local r,s = param_line (Xa,Ya,Xb,Yb) +r1,r2 = solve_para_line (p,r,s) +z.x = OCCS.abscissa :report(r1,z.K) +z.y = OCCS.abscissa :report(r2,z.K) +L1 = L.dir : ortho_from (z.x) +L2 = L.dir : ortho_from (z.y) +z.s1 = intersection (L.ab,L1) +z.s2 = intersection (L.ab,L2) +} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth,orange,thick](curve) + \tkzDrawLines(A,B) + \tkzDrawLines[add = 1 and 1](K,F) + \tkzDrawSegments[add = .5 and .5,blue](a,b) + \tkzDrawSegments[dashed](s1,x s2,y) + \tkzDrawPoints(A,B,F,K,S) + \tkzDrawPoints[blue,size=2](a,b) + \tkzDrawPoints[blue,size=2](s1,s2,x,y) + \tkzLabelPoints[blue](a,b) + \tkzLabelPoints[blue,above left](s1,s2) + \tkzLabelPoints(O,i,u,S,A,B,x,y) + \tkzLabelPoints[left](j,v) + \tkzLabelPoints[right](F,K) + \tkzDrawSegments[->,red,thick](O,i O,j) + \tkzDrawSegments[->,purple,thick](S,u S,v) + \tkzLabelSegment[below,sloped,pos=.7](A,B){Directrix} + \end{tikzpicture} +\end{center} + +\subsection{Attribtes of an occs} % (fold) +\label{sub:attribtes_of_an_occs} + +\begin{mybox} + Creation |sys = occs: new (L.AB,z.S) | +\end{mybox} + +\bgroup +\catcode`_=12 +\small +\captionof{table}{occs attributes.}\label{occs:att} +\begin{tabular}{lll} +\toprule +\textbf{Attributes} & \textbf{Application} &\\ +\Iattr{occs}{type} & |sys.type = "occs"| & \\ +\Iattr{occs}{origin} & |sys.origin = z.S| &\\ +\Iattr{occs}{x} & |sys.x = z.I| & |SI = 1|\\ +\Iattr{occs}{y} & |sys.x = z.J| & |SJ = 1|\\ +\Iattr{occs}{abscissa} & |sys.abscissa = L.SI| & \\ +\Iattr{occs}{ordinate} & |sys.ordinate = L.SJ| & \\ +\bottomrule % +\end{tabular} +\egroup + +\subsubsection{Example: attributes of occs} % (fold) +\label{ssub:example_attributes_of_occs} + + \begin{minipage}{.5\textwidth} +\begin{Verbatim} + \directlua{ + init_elements () + z.O = point : new (0,0) + z.i = point : new (1,0) + z.j = point : new (0,1) + z.A = point : new (-1 , -1) + z.B = point : new (4 , 2) + L.AB = line : new (z.A , z.B) + z.S = point : new (0 , 3) + % new occs + sys = occs : new (L.AB,z.S) + z.u = sys.x + z.v = sys.y + z.ax = sys.abscissa.pa + z.bx = sys.ordinate.pa + z.ay = sys.abscissa.pb + z.by = sys.ordinate.pb + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines(A,B) + \tkzDrawLines[purple,add=2 and 4](ax,ay bx,by) + \tkzDrawSegments[->,red,thick](O,i O,j) + \tkzDrawSegments[->,purple,thick](S,u S,v) + \tkzLabelSegment[below,sloped,pos=.7](A,B){L.AB} + \tkzLabelSegment[below,sloped,pos=3](ax,ay){abscissa} + \tkzLabelSegment[below,sloped,pos=3](bx,by){ordinate} + \tkzLabelPoints(O,S) + \tkzLabelPoints[left](j,v) + \tkzLabelPoints[below right](i,u) + \end{tikzpicture} +\end{Verbatim} +\end{minipage} + \begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.O = point : new (0,0) + z.i = point : new (1,0) + z.j = point : new (0,1) + z.A = point : new (-1 , -1) + z.B = point : new (4 , 2) + L.AB = line : new (z.A , z.B) + z.S = point : new (0 , 3) + % new occs + sys = occs : new (L.AB,z.S) + z.u = sys.x + z.v = sys.y + z.ax = sys.abscissa.pa + z.bx = sys.ordinate.pa + z.ay = sys.abscissa.pb + z.by = sys.ordinate.pb + } + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawSegment(A,B) + \tkzDrawLines[purple,add=2 and 4](ax,ay bx,by) + \tkzDrawSegments[->,red,thick](O,i O,j) + \tkzDrawSegments[->,purple,thick](S,u S,v) + \tkzLabelSegment[below,sloped,pos=.7](A,B){L.AB} + \tkzLabelSegment[below,sloped,pos=3](ax,ay){abscissa} + \tkzLabelSegment[below,sloped,pos=3](bx,by){ordinate} + \tkzLabelPoints(O,S) + \tkzLabelPoints[left](j,v) + \tkzLabelPoints[below right](i,u) + \end{tikzpicture} + \end{center} + \end{minipage} + + + +% subsubsection example_attributes_of_occs (end) +% subsection attribtes_of_an_occs (end) + +\subsection{Methods of the class occs} % (fold) +\label{sub:methods_of_the_class_occs} + +Currently, there are only two methods. \code{new} for creation and \code{coordinates} for obtaining the new coordinates of a point. + +The affix of $S$ in the original system is $\tkzUseLua{tostring(z.S)}$. +The new coordinates of $S$ are $\tkzUseLua{XS}$ and $\tkzUseLua{YS}$. +The affix of $u$ in the original system is $\tkzUseLua{tostring(z.u)}$. +The new coordinates of $u$ are $\tkzUseLua{Xu}$ and $\tkzUseLua{Yu}$. + +The point $M$ whose coordinates are $(2,6)$ in the original system has coordinates $(4.6305; 1.8865)$ in the new one. + +\begin{Verbatim} + \directlua{ + z.O = point : new (0,0) + z.i = point : new (1,0) + z.j = point : new (0,1) + z.A = point : new (-1 , -1) + z.B = point : new (4 , 2) + L.AB = line : new (z.A , z.B) + z.S = point : new (-1 , 2) + % new occs + sys = occs : new (L.AB,z.S) + z.u = sys.x + z.v = sys.y + z.ax = sys.abscissa.pa + z.bx = sys.ordinate.pa + z.ay = sys.abscissa.pb + z.by = sys.ordinate.pb + XS,YS = sys : coordinates (z.S) + Xu,Yu = sys : coordinates (z.u) + Xv,Yv = sys : coordinates (z.v) + z.M = point : new (2,6) + XM,YM = sys : coordinates (z.M) + z.xm = sys.abscissa :projection (z.M) + z.ym = sys.ordinate :projection (z.M) + } + + \begin{tikzpicture}[gridded] + \tkzGetNodes + \tkzDrawLines(A,B) + \tkzDrawLines[purple,add=4 and 4](ax,ay bx,by) + \tkzDrawSegments[->,red,thick](O,i O,j) + \tkzDrawSegments[->,purple,thick](S,u S,v M,xm M,ym) + \tkzDrawPoint(M) + \tkzLabelPoint[above](M){$M:$ ($\pmpn{\tkzUseLua{XM}};\pmpn{\tkzUseLua{YM}})$} + \tkzLabelPoints(O,S) + \tkzLabelPoints[left](j,v) + \tkzLabelPoints[below right](i,u) + \end{tikzpicture} +\end{Verbatim} + + \directlua{ + z.O = point : new (0,0) + z.i = point : new (1,0) + z.j = point : new (0,1) + z.A = point : new (-1 , -1) + z.B = point : new (4 , 2) + L.AB = line : new (z.A , z.B) + z.S = point : new (-1 , 2) + % new occs + sys = occs : new (L.AB,z.S) + z.u = sys.x + z.v = sys.y + z.ax = sys.abscissa.pa + z.bx = sys.ordinate.pa + z.ay = sys.abscissa.pb + z.by = sys.ordinate.pb + XS,YS = sys : coordinates (z.S) + Xu,Yu = sys : coordinates (z.u) + Xv,Yv = sys : coordinates (z.v) + z.M = point : new (2,6) + XM,YM = sys : coordinates (z.M) + z.xm = sys.abscissa :projection (z.M) + z.ym = sys.ordinate :projection (z.M) + } + + \begin{center} + \begin{tikzpicture}[gridded] + \tkzGetNodes + \tkzDrawLines(A,B) + \tkzDrawLines[purple,add=4 and 4](ax,ay bx,by) + \tkzDrawSegments[->,red,thick](O,i O,j) + \tkzDrawSegments[->,purple,thick](S,u S,v M,xm M,ym) + \tkzDrawPoint(M) + \tkzLabelPoint[above](M){$M:$ ($\pmpn{\tkzUseLua{XM}};\pmpn{\tkzUseLua{YM}})$} + \tkzLabelPoints(O,S) + \tkzLabelPoints[left](j,v) + \tkzLabelPoints[below right](i,u) + \end{tikzpicture} + \end{center} + + +% subsection methods_of_the_class_occs (end) +% section orthormal_cartesian_coordinate_system (end) +\endinput diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex index 3ff936a8a8a..d1e00f812a4 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex @@ -74,15 +74,18 @@ z.C = P.new.pc z.D = P.new.pd z.I = P.new.center } - \hspace{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C,D) -\tkzDrawPoints(A,B,C,D) -\tkzLabelPoints(A,B) -\tkzLabelPoints[above](C,D) -\tkzDrawPoints[red](I) -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C,D) + \tkzDrawPoints(A,B,C,D) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](C,D) + \tkzDrawPoints[red](I) + \end{tikzpicture} +\end{center} + \end{minipage} @@ -113,7 +116,6 @@ z.I = P.new.center \begin{Verbatim} \directlua{% init_elements () - scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 3 , 1 ) z.C = point : new ( 4 , 3 ) @@ -121,7 +123,7 @@ P.four = parallelogram : fourth (z.A,z.B,z.C) z.D = P.four.pd z.I = P.four.center } -\begin{tikzpicture} +\begin{tikzpicture}[ scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPoints(A,B,C,D) @@ -134,7 +136,6 @@ z.I = P.four.center \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 3 , 1 ) z.C = point : new ( 4 , 3 ) @@ -143,15 +144,17 @@ z.D = P.four.pd z.I = P.four.center } -\hspace{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C,D) -\tkzDrawPoints(A,B,C,D) -\tkzLabelPoints(A,B) -\tkzLabelPoints[above](C,D) -\tkzDrawPoints[red](I) -\end{tikzpicture} -\hspace{\fill} +\begin{center} + \begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawPolygon(A,B,C,D) + \tkzDrawPoints(A,B,C,D) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](C,D) + \tkzDrawPoints[red](I) + \end{tikzpicture} +\end{center} + + \end{minipage} % subsubsection parallelogram_with_side_method (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex index 5dcea5febce..c29edc951e9 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex @@ -124,7 +124,6 @@ init_elements () } \hspace*{\fill} - \begin{Verbatim} \directlua{ init_elements () @@ -295,7 +294,7 @@ The methods described in the following table are standard and can be found in mo \midrule \textbf{Points} &&\\ \midrule -\Imeth{point}{north(r)} & |r| distance to the point (1 if empty) & [\ref{ssub:power_v2} ; \ref{ssub:methods}] \\ +\Imeth{point}{north(r)} & |r| distance to the point (1 if empty) & \ref{ssub:methods}] \\ \Imeth{point}{south(r)} & & \\ \Imeth{point}{east(r)} & & \\ \Imeth{point}{west(r)} & & \\ @@ -344,7 +343,6 @@ If |d| is absent then it is considered equal to 1. \begin{minipage}{.5\textwidth} \directlua{ init_elements () - scale = 1.5 z.O = point : new ( 0, 0 ) z.A = z.O : east () z.Ap = z.O : east (2) : north (2) @@ -354,7 +352,7 @@ If |d| is absent then it is considered equal to 1. } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 1.5] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPoints(A,B,C,D,O,A') @@ -393,14 +391,13 @@ This involves defining a point using its modulus and argument. \begin{minipage}{0.4\textwidth} \directlua{ init_elements () - scale = .75 z.O = point: new (0, 0) z.A = point: new (3, 0) z.F = point: polar (3, math.pi/3) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircle(O,A) \tkzDrawSegments[new](O,A) @@ -420,28 +417,25 @@ init_elements () The result is a point located between the origin and the initial point at a distance of $1$ from the origin. +\vspace{6pt} \directlua{ init_elements () -scale = 1.5 z.O = point : new (0,0) z.A = point : new (2,1) z.B = z.A : normalize () z.I = point : new (1,0) } - - \begin{minipage}{0.5\textwidth} \begin{Verbatim} \directlua{ init_elements () - scale = 1.5 z.O = point : new (0,0) z.A = point : new (1,2) z.B = z.A : normalize () z.I = point : new (1,0) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 1.5] \tkzGetNodes \tkzDrawSegment(O,A) \tkzDrawCircle(O,B) @@ -453,7 +447,7 @@ init_elements () \end{minipage} \begin{minipage}{0.5\textwidth} \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 1.5] \tkzGetNodes \tkzDrawSegment(O,A) \tkzDrawCircle(O,B) @@ -537,8 +531,8 @@ z.D =(z.C-z.A):orthogonal(2) : at (z.C) \begin{minipage}{.4\textwidth} \directlua{% init_elements () -z.O = point : new ( 0,0 ) -z.A = point : new ( 3 , 2 ) +z.O = point : new ( 0,0 ) +z.A = point : new ( 3 ,2) z.B = z.A : orthogonal (1) z.C = z.A+z.B z.D =(z.C-z.A):orthogonal(2) : at (z.C) @@ -583,16 +577,15 @@ init_elements () \end{minipage} \begin{minipage}{.4\textwidth} \directlua{% -init_elements () - scale = .5 - z.a = point: new(0, -1) - z.b = point: new(4, 0) - z.o = point: new(6, -2) - z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b) + init_elements () + z.a = point: new(0, -1) + z.b = point: new(4, 0) + z.o = point: new(6, -2) + z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b) } \begin{center} -\begin{tikzpicture} +\begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawLines(o,a o,a' o,b o,b') \tkzDrawPoints(a,a',b,b',o) @@ -613,7 +606,6 @@ Rotate a triangle by an angle of $\pi/6$ around $O$. \begin{Verbatim} \directlua{% init_elements () - scale = .75 z.O = point: new(-1, -1) z.A = point: new(2, 0) z.B = point: new(5, 0) @@ -628,7 +620,7 @@ init_elements () T.ApBpCp = z.O : rotation(math.pi/3,T.ABC) z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygons(A,B,C A',B',C'% A,B,E,F A',B',E',F') @@ -656,7 +648,7 @@ z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp) } \begin{center} -\begin{tikzpicture} +\begin{tikzpicture}[ scale = .75] \tkzGetNodes \tkzDrawPolygons(A,B,C A',B',C' A,B,E,F A',B',E',F') \tkzDrawPoints (A,B,C,A',B',C',O) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex index ec9765ea6d3..813603fad0d 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex @@ -1,5 +1,5 @@ \newpage -\section{Class \Iclass{Quadrilateral}} % (fold) +\section{Class \Iclass{quadrilateral}} % (fold) \subsection{Quadrilateral Attributes} % (fold) \label{sub:quadrilateral_attributes} @@ -44,13 +44,13 @@ Creation | Q.new = rectangle : new (z.A,z.B,z.C,z.D)| \begin{Verbatim} \directlua{% init_elements () -z.A = point : new ( 0 , 0 ) -z.B = point : new ( 4 , 0 ) -z.C = point : new ( 5 , 1 ) -z.D = point : new ( 0 , 3 ) -Q.ABCD = quadrilateral : new ( z.A , z.B , z.C , z.D ) -z.I = Q.ABCD.i -z.G = Q.ABCD.g +z.A = point : new ( 0 , 0 ) +z.B = point : new ( 4 , 0 ) +z.C = point : new ( 5 , 1 ) +z.D = point : new ( 0 , 3 ) +Q.ABCD = quadrilateral : new (z.A, z.B, z.C, z.D) +z.I = Q.ABCD.i +z.G = Q.ABCD.g } \begin{tikzpicture} @@ -73,12 +73,15 @@ z.I = Q.ABCD.i z.G = Q.ABCD.g } -\hspace{\fill}\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C,D) -\tkzDrawSegments(A,C B,D) -\tkzDrawPoints(A,B,C,D,I,G) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C,D) + \tkzDrawSegments(A,C B,D) + \tkzDrawPoints(A,B,C,D,I,G) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection quadrilateral_attributes (end) @@ -112,10 +115,11 @@ z.D = point : polar ( 4 , 2*math.pi/3 ) L.DB = line : new (z.D,z.B) T.equ = L.DB : equilateral () z.C = T.equ.pc -Q.new = quadrilateral : new (z.A,z.B,z.C,z.D) +Q.new = quadrilateral : new(z.A,z.B,z.C,z.D) bool = Q.new : iscyclic () if bool == true then -C.cir = triangle : new (z.A,z.B,z.C): circum_circle () +C.cir = triangle : new(z.A,z.B,z.C) +: circum_circle() z.O = C.cir.center end } @@ -134,7 +138,6 @@ end \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) z.D = point : polar ( 4 , 2*math.pi/3 ) @@ -148,16 +151,18 @@ C.cir = triangle : new (z.A,z.B,z.C): circum_circle () z.O = C.cir.center end } -\hspace{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C,D) -\tkzDrawPoints(A,B,C,D) -\tkzLabelPoints(A,B,C,D) -\tkzDrawCircle(O,A) -\ifthenelse{\equal{\tkzUseLua{bool}}{true}}{ -\tkzDrawCircle(O,A)}{} -\end{tikzpicture} +\begin{center} + \begin{tikzpicture}[scale = .75 ] + \tkzGetNodes + \tkzDrawPolygon(A,B,C,D) + \tkzDrawPoints(A,B,C,D) + \tkzLabelPoints(A,B,C,D) + \tkzDrawCircle(O,A) + \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{ + \tkzDrawCircle(O,A)}{} + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection inscribed_quadrilateral (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex index 0a9edc0d6d0..85a79bcf5b0 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex @@ -62,18 +62,17 @@ z.I = R.new.center \end{Verbatim} \end{minipage} \hspace{\fill}\begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale =1.5 +\directlua{% + init_elements () z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) z.C = point : new ( 4 , 2) z.D = point : new ( 0 , 2) R.new = rectangle : new (z.A,z.B,z.C,z.D) z.I = R.new.center - } +} - \begin{tikzpicture} + \begin{tikzpicture}[scale =1.5] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawSegment[dashed](A,C) @@ -122,7 +121,6 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () -scale = .5 z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) z.I = point : new ( 4 , 3 ) @@ -132,7 +130,7 @@ z.C = P.ABCD.pc z.D = P.ABCD.pd } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPoints(A,B,C) @@ -144,7 +142,6 @@ z.D = P.ABCD.pd \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = .5 z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) z.I = point : new ( 4 , 3 ) @@ -153,7 +150,7 @@ z.B = P.ABCD.pb z.C = P.ABCD.pc z.D = P.ABCD.pd } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPoints(A,B,C) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex index 51cf6fff5d6..e05fea99046 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex @@ -16,7 +16,7 @@ Creation | RP.IA = regular_polygon : new (z.I,z.A,6)| \toprule \textbf{Attributes} & \textbf{Application} \\ \Iattr{regular}{center} & |z.I = RP.IA.center| \\ -\Iattr{regular}{table} & array containing all vertex affixes \\ +\Iattr{regular}{vertices} & array containing all vertex affixes \\ \Iattr{regular}{through} & first vertex \\ \Iattr{regular}{circle} & defines the circle with center I passing through A \\ \Iattr{regular}{type} & |RP.IA.type= 'regular\_polygon'| \\ @@ -35,7 +35,6 @@ Creation | RP.IA = regular_polygon : new (z.I,z.A,6)| \begin{Verbatim} \directlua{% init_elements () -scale = .75 z.O = point: new (0,0) z.I = point: new (1,3) z.A = point: new (2,0) @@ -44,7 +43,7 @@ RP.five : name ("P_") C.ins = circle: radius (z.I,RP.five.inradius) z.H = RP.five.proj } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \def\nb{\tkzUseLua{RP.five.nb}} \tkzGetNodes \tkzDrawCircles(I,A I,H) @@ -55,27 +54,29 @@ z.H = RP.five.proj \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% -init_elements () -scale = .75 - z.O = point: new (0,0) - z.I = point: new (1,3) - z.A = point: new (2,0) - RP.five = regular_polygon : new (z.I,z.A,5) - RP.five : name ("P_") - C.ins = circle : radius ( z.I , RP.five.inradius ) - z.H = RP.five.proj - } - \hspace{\fill} - \begin{tikzpicture} - \def\nb{\tkzUseLua{RP.five.nb}} - \tkzGetNodes - \tkzDrawCircles(I,A I,H) - \tkzDrawPolygon(P_1,P_...,P_\nb) - \tkzDrawPoints[red](P_1,P_...,P_\nb,H,I) - \tkzLabelPoints[red](I,A,H) - \end{tikzpicture} - \hspace{\fill} +\directlua{% + init_elements () + z.O = point: new (0,0) + z.I = point: new (1,3) + z.A = point: new (2,0) + RP.five = regular_polygon : new (z.I,z.A,5) + RP.five : name ("P_") + C.ins = circle : radius ( z.I , RP.five.inradius ) + z.H = RP.five.proj + } + +\begin{center} + \begin{tikzpicture}[scale = .75] + \def\nb{\tkzUseLua{RP.five.nb}} + \tkzGetNodes + \tkzDrawCircles(I,A I,H) + \tkzDrawPolygon(P_1,P_...,P_\nb) + \tkzDrawPoints[red](P_1,P_...,P_\nb,H,I) + \tkzLabelPoints[red](I,A,H) + \end{tikzpicture} +\end{center} + + \end{minipage} % subsubsection pentagon (end) % subsection regular_polygon_attributes (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex index edfdaca4746..d79585ef520 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex @@ -76,19 +76,22 @@ init_elements () z.I = S.new.center z.H = S.new.proj } - \hspace{\fill} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles[orange](I,A I,H) - \tkzDrawPolygon(A,B,C,D) - \tkzDrawPoints(A,B,C,D,H,I) - \tkzLabelPoints(A,B,H,I) - \tkzLabelPoints[above](C,D) - \tkzDrawSegments(I,B I,H) - \tkzLabelSegment[sloped](I,B){\pmpn{\tkzUseLua{S.new.circumradius}}} - \tkzLabelSegment[sloped](I,H){\pmpn{\tkzUseLua{S.new.inradius}}} - \tkzLabelSegment[sloped](D,C){\pmpn{\tkzUseLua{S.new.side}}} - \end{tikzpicture} + + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawCircles[orange](I,A I,H) + \tkzDrawPolygon(A,B,C,D) + \tkzDrawPoints(A,B,C,D,H,I) + \tkzLabelPoints(A,B,H,I) + \tkzLabelPoints[above](C,D) + \tkzDrawSegments(I,B I,H) + \tkzLabelSegment[sloped](I,B){\pmpn{\tkzUseLua{S.new.circumradius}}} + \tkzLabelSegment[sloped](I,H){\pmpn{\tkzUseLua{S.new.inradius}}} + \tkzLabelSegment[sloped](D,C){\pmpn{\tkzUseLua{S.new.side}}} + \end{tikzpicture} + \end{center} + \end{minipage} @@ -118,8 +121,7 @@ init_elements () \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - scale = 2 + init_elements () z.A = point : new ( 0 , 0 ) z.B = point : new ( 2 , 1 ) S.side = square : side (z.A,z.B) @@ -129,7 +131,7 @@ init_elements () z.I = S.side.center } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 2] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPoints(A,B,C,D) @@ -142,7 +144,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = 2 z.A = point : new ( 0 , 0 ) z.B = point : new ( 2 , 1 ) S.side = square : side (z.A,z.B) @@ -151,15 +152,18 @@ z.C = S.side.pc z.D = S.side.pd z.I = S.side.center } -\hspace{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C,D) -\tkzDrawPoints(A,B,C,D) -\tkzLabelPoints(A,B) -\tkzLabelPoints[above](C,D) -\tkzDrawPoints[red](I) -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture}[scale = 2] + \tkzGetNodes + \tkzDrawPolygon(A,B,C,D) + \tkzDrawPoints(A,B,C,D) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](C,D) + \tkzDrawPoints[red](I) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection square_with_side_method (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex index 1ca2f6e0691..33abc79d6e4 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex @@ -182,8 +182,8 @@ init_elements () \midrule \textbf{Reals} &&\\ \midrule - \Imeth{triangle}{area ()} & $ \mathcal{A}$| = T.ABC: area ()| better T.ABC.area\\ - \Imeth{triangle}{barycentric\_coordinates(pt)} & Triples of numbers corresponding to masses placed at the vertices\\ + \Imeth{triangle}{area ()} & $ \mathcal{A}$| = T.ABC: area ()| better T.ABC.area\\ + \Imeth{triangle}{barycentric\_coordinates(pt)}& Triples of numbers ( masses placed at the vertices)\\ \midrule \textbf{Points} &&\\ \midrule @@ -206,18 +206,22 @@ init_elements () \Imeth{triangle}{spieker\_center ()} & Incenter of the medial triangle& [\ref{sub:apollonius_circle_v1_with_inversion}]\\ -\Imeth{triangle}{barycentric (ka,kb,kc)} & |T.ABC: barycentric (2,1,1)| barycenter of |({A,2},{B,1},{C,1}) |&Remark \footnote{The function \code{barycenter} is used to obtain the barycentre for any number of points }\\ +\Imeth{triangle}{barycentric (ka,kb,kc)} & |T.ABC: barycentric (2,1,1)| & Remark \footnote{The function \code{barycenter} is used to obtain the barycentre for any number of points }\\ -\Imeth{triangle}{base (u,v) } & |z.D = T.ABC: base(1,1)| \tkzar ABDC is a parallelogram & [\ref{ssub:method_imeth_triangle_base}] \\ -\Imeth{triangle}{trilinear (u,v,w) } & |z.D = T.ABC: trilinear(1,1,1)| \tkzar ABDC parallelogram & [\ref{ssub:method_imeth_triangle_trilinear}] \\ +\Imeth{triangle}{base (u,v) } & |z.D = T.ABC: base(1,1)| ABDC is a parallelogram& [\ref{ssub:method_imeth_triangle_base}] \\ +\Imeth{triangle}{trilinear (u,v,w) } & |z.D = T.ABC: trilinear(1,1,1)| ABDC parallelogram& [\ref{ssub:method_imeth_triangle_trilinear}] \\ -\Imeth{triangle}{projection (p) } & Projection of a point on the sides &[\ref{sub:euler_relation}; \ref{ssub:method_imeth_triangle_projection}]\\ +\Imeth{triangle}{projection (p)} & Projection of a point on the sides &[\ref{sub:euler_relation}; \ref{ssub:method_imeth_triangle_projection}]\\ -\Imeth{triangle}{euler\_points () } & Euler points of euler circle & [\ref{ssub:method_imeth_triangle_euler__points}] \\ +\Imeth{triangle}{euler\_points()} & Euler points of euler circle & [\ref{ssub:method_imeth_triangle_euler__points}] \\ -\Imeth{triangle}{nine\_points () } & 9 Points of the euler circle & [\ref{ssub:method_imeth_triangle_nine__points}] \\ +\Imeth{triangle}{nine\_points()} & 9 Points of the euler circle & [\ref{ssub:method_imeth_triangle_nine__points}] \\ -\Imeth{triangle}{parallelogram ()} & |z.D = T.ABC : parallelogram ()| \tkzar ABCD parallelogram& [\ref{sub:director_circle}]\\ +\Imeth{triangle}{taylor\_points()}&Points on the Taylor circle & Refer to [\ref{ssub:method_imeth_triangle_taylor__circle}] \\ + +\Imeth{triangle}{parallelogram()}& |z.D = T.ABC:parallelogram()| ABCD parallelogram& [\ref{sub:director_circle}]\\ + +\Imeth{triangle}{kimberling (n)} & |z.X = T.ABC : kimberling (115)| & Refer to [\ref{ssub:method_imeth_triangle_kimberling}]\\ \midrule \textbf{Lines} &&\\ @@ -235,9 +239,38 @@ init_elements () \footnote{N center of nine points circle, G centroid, H orthocenter , O circum center } & [\ref{sub:hexagram}]\\ \Imeth{triangle}{antiparallel(pt,n)} & n=0 antiparallel through pt to $(BC)$, n=1 to $(AC)$ etc.& [\ref{sub:antiparallel_through_lemoine_point}]\\ + +\Imeth{triangle}{steiner\_line(pt)} & &[\ref{ssub:method_imeth_triangle_steiner__line} +] \\ + +\Imeth{triangle}{simson\_line(pt)} & &[\ref{ssub:method_imeth_triangle_simson__line}; \ref{ssub:kiepert_hyperbola} +] \\ + +\Imeth{triangle}{lemoine\_axis()} & &[\ref{ssub:method_imeth_triangle_lemoine__line} +] \\ + +\Imeth{triangle}{brocard\_axis()} & &[\ref{ssub:method_imeth_triangle_brocard__axis}] \\ + +\Imeth{triangle}{fermat\_axis()} & & \\ \midrule - \textbf{Circles} &&\\ +\bottomrule +\end{tabular} +\end{minipage} +\egroup + +\newpage +\bgroup +\catcode`_=12 +\small +\begin{minipage}{\textwidth} +\begin{center} +%\caption{Methods of the class triangle (follow-up) } +\begin{tabular}{lll} +\toprule +\textbf{Methods} & \textbf{Comments} & \\ +\midrule + \textbf{Circles} & &\\ \midrule \Imeth{triangle}{euler\_circle ()} & C.|NP = T.ABC : euler_circle ()| \tkzar $N$ euler point \footnote{ The midpoint of each side of the triangle, the foot of each altitude, the midpoint of the line segment from each vertex of the triangle to the orthocenter.} & [\ref{ssub:method_imeth_triangle_euler_circle}]\\ @@ -247,9 +280,9 @@ init_elements () \Imeth{triangle}{in\_circle ()} & Inscribed circle of the triangle& [\ref{ssub:method_imeth_triangle_in_circle}]\\ -\Imeth{triangle}{ex\_circle (n)} & Circle tangent to the three sides of the triangle ; n =1 swap ; n=2 2 swap & [\ref{ssub:method_imeth_triangle_ex__circle}]\\ +\Imeth{triangle}{ex\_circle (n)} & External circle tangent to a side of the triangle ; n swap & [\ref{ssub:method_imeth_triangle_ex__circle}]\\ -\Imeth{triangle}{first\_lemoine\_circle ()} & The center is the midpoint between Lemoine point and the circumcenter.\footnote{Through the Lemoine point draw lines parallel to the triangle's sides. The points where the parallel lines intersect the sides of ABC then lie on a circle known as the first Lemoine circle. }& [\ref{sub:first_and_second_lemoine_circles} +\Imeth{triangle}{first\_lemoine\_circle ()} & & [\ref{sub:first_and_second_lemoine_circles} ] \\ \Imeth{triangle}{second\_lemoine\_circle ()} & & \ref{sub:antiparallel_through_lemoine_point}] \\ @@ -266,56 +299,42 @@ init_elements () \Imeth{triangle}{conway\_circle ()} & Circumscribed circle of Conway points & [\ref{ssub:method_imeth_triangle_conway}]\\ -\Imeth{triangle}{c\_ll\_p (pt)} & circle tgt to two side through pt [\ref{ssub:tr_method_c__ll__p}]\\ -\bottomrule -\end{tabular} -\end{minipage} -\egroup - +\Imeth{triangle}{taylor\_circle ()} & Circumscribed circle of Conway points & [\ref{ssub:method_imeth_triangle_taylor__circle}]\\ -\clearpage\newpage -\bgroup -\catcode`_=12 -\small -\begin{minipage}{\textwidth} -\begin{center} -%\caption{Methods of the class triangle (follow-up) } -\begin{tabular}{ll} -\toprule -\textbf{Methods} & \textbf{Comments} \\ +\Imeth{triangle}{c\_ll\_p (pt)} & circle tgt to two side through pt [\ref{ssub:tr_method_c__ll__p}]\\ \midrule \textbf{Triangles} &\\ \midrule -\Imeth{triangle}{orthic ()} & |T = T.ABC : orthic ()| triangle joining the feet of the altitudes ; [\ref{ssub:method_imeth_triangle_altitude}] \\ +\Imeth{triangle}{orthic ()} & |T = T.ABC : orthic ()| joining the feet of the altitudes & [\ref{ssub:method_imeth_triangle_altitude}] \\ -\Imeth{triangle}{medial ()} & |T = T.ABC : medial ()| triangle with vertices at the midpoints; [\ref{ssub:method_imeth_triangle_medial} ; \ref{sub:nine_points} ; \ref{ssub:method_imeth_triangle_symmedial}]\\ +\Imeth{triangle}{medial ()} & |T = T.ABC : medial ()| with vertices at the midpoints; [\ref{ssub:method_imeth_triangle_medial} & \ref{sub:nine_points} ; \ref{ssub:method_imeth_triangle_symmedial}]\\ -\Imeth{triangle}{incentral ()}& Cevian triangle of the triangle with respect to its incenter. [\ref{ssub:method_incentral}] \\ +\Imeth{triangle}{incentral ()}& Cevian triangle of the triangle with respect to its incenter. &[\ref{ssub:method_incentral}] \\ -\Imeth{triangle}{excentral ()} & Triangle with vertices corresponding to the excenters. [\ref{ssub:method_imeth_triangle_feuerbach} ] \\ +\Imeth{triangle}{excentral ()} & With vertices corresponding to the excenters. &[\ref{ssub:method_imeth_triangle_feuerbach} ] \\ -\Imeth{triangle}{extouch ()} & Triangle formed by the points of tangency with the excircles. [\ref{sub:excircles} ] \\ +\Imeth{triangle}{extouch ()} & Withthe points of tangency with the excircles. &[\ref{sub:excircles} ] \\ -\Imeth{triangle}{intouch () } & Contact triangle formed by the points of tangency of the incircle [\ref{ssub:gergonne_point}]\\ +\Imeth{triangle}{intouch () } & Contact triangle formed by the points of tangency of the incircle &[\ref{ssub:gergonne_point}]\\ \Imeth{triangle}{contact () } & contact = intouch ; [ \ref{ssub:gergonne_point}] \\ -\Imeth{triangle}{tangential ()} & Triangle formed by the lines tangent to the circumcircle at the vertices; [\ref{ssub:method_imeth_triangle_tangential}]\\ +\Imeth{triangle}{tangential ()} & With the lines tangent to the circumcircle at the vertices; &[\ref{ssub:method_imeth_triangle_tangential}]\\ -\Imeth{triangle}{feuerbach ()} & Triangle formed by the points of tangency of the euler circle with the excircles; [\ref{ssub:method_imeth_triangle_feuerbach}]\\ +\Imeth{triangle}{feuerbach ()} & With the points of tangency of the euler circle with the excircles& [\ref{ssub:method_imeth_triangle_feuerbach}]\\ -\Imeth{triangle}{anti () }& Anticomplementary Triangle The given triangle is its medial triangle.\footnote{You can use \tkzname{similar} instead of \tkzname{anti}.} ; [\ref{ssub:method_imeth_triangle_anti}] \\ +\Imeth{triangle}{anti () }& Anticomplementary Triangle The given triangle is its medial triangle.\footnote{You can use \tkzname{similar} instead of \tkzname{anti}.} & [\ref{ssub:method_imeth_triangle_anti}] \\ -\Imeth{triangle}{cevian (pt)} & Triangle formed with the endpoints of the three cevians with respect to |pt|; [\ref{ssub:method_imeth_triangle_cevian}] \\ +\Imeth{triangle}{cevian (pt)} & With the endpoints of the three cevians with respect to |pt|& [\ref{ssub:method_imeth_triangle_cevian}] \\ -\Imeth{triangle}{pedal (pt)} & Triangle formed by projections onto the sides of |pt| [\ref{ssub:method_imeth_triangle_pedal}]\\ +\Imeth{triangle}{pedal (pt)} & With projections onto the sides of |pt| &[\ref{ssub:method_imeth_triangle_pedal}]\\ -\Imeth{triangle}{symmedial ()} & Triangle formed with the intersection points of the symmedians ; [\ref{ssub:method_imeth_triangle_symmedial}] \\ +\Imeth{triangle}{symmedial ()} & With the intersection points of the symmedians ; &[\ref{ssub:method_imeth_triangle_symmedial}] \\ -\Imeth{triangle}{euler ()} & Triangle formed with the euler points ; [\ref{ssub:method_imeth_triangle_euler__points}] \\ +\Imeth{triangle}{euler ()} & With the euler points & [\ref{ssub:method_imeth_triangle_euler__points}] \\ -\Imeth{triangle}{similar ()} & Triangle formed with straight lines parallel to the sides [\ref{ssub:method_imeth_triangle_similar}] \\ +\Imeth{triangle}{similar ()} & With straight lines parallel to the sides &[\ref{ssub:method_imeth_triangle_similar}] \\ \midrule \textbf{Ellipses} &\\ \Imeth{triangle}{steiner\_inellipse ()} & [ex. \ref{ssub:steiner_inellipse_and_circumellipse}] \\ @@ -330,7 +349,7 @@ init_elements () \egroup % subsubsection methods_of_the_class_triangle (end) -\subsubsection{Gergonne point} % (fold) +\subsubsection{Method \Imeth{triangle}{gergonne\_point}} % (fold) \label{ssub:gergonne_point} In this example, some usefull methods are applied like \Imeth{triangle}{intouch} or \Imeth{triangle}{contact}. @@ -398,7 +417,6 @@ Let $E_a$ be the point at which the $J_a$-excircle meets the side $(BC)$ of a tr \begin{Verbatim} \directlua{% init_elements () - scale = .7 z.A = point : new (0,0) z.B = point : new (3.6,0) z.C = point : new (2.8,4) @@ -409,7 +427,7 @@ init_elements () z.E_a,z.E_b, z.E_c = get_points (T.ABC : extouch ()) } -\begin{tikzpicture} +\begin{tikzpicture}[scale= .7] \tkzGetNodes \tkzDrawPoints(A,B,C) \tkzDrawPoints[red,size=2](J_a,J_b,J_c) @@ -428,20 +446,19 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .7 z.A = point : new (0,0) z.B = point : new (3.6,0) z.C = point : new (2.8,4) T.ABC = triangle: new (z.A,z.B,z.C) z.Na = T.ABC : nagel_point () z.J_a,z.J_b, - z.J_c = get_points (T.ABC : excentral ()) + z.J_c = get_points (T.ABC : excentral ()) z.E_a,z.E_b, - z.E_c = get_points (T.ABC : extouch ()) + z.E_c = get_points (T.ABC : extouch ()) } \begin{center} -\begin{tikzpicture} +\begin{tikzpicture}[scale = .7] \tkzGetNodes \tkzDrawPoints(A,B,C) \tkzDrawPoints[red,size=2](J_a,J_b,J_c) @@ -472,7 +489,6 @@ The Mittenpunkt is the symmedian point of the excentral triangle. The mittenpunk \begin{Verbatim} \directlua{% init_elements () - scale = 1 z.A = point : new ( 0 , 0 ) z.B = point : new ( 6 , 0 ) z.C = point : new ( 4 , 6 ) @@ -490,7 +506,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = 1 z.A = point : new ( 0 , 0 ) z.B = point : new ( 6 , 0 ) z.C = point : new ( 4 , 6 ) @@ -612,6 +627,72 @@ z.Z = T.ABC : projection (z.J) % subsubsection method_imeth_triangle_projection (end) +\subsubsection{Method \Imeth{triangle}{kimberling}} % (fold) +\label{ssub:method_imeth_triangle_kimberling} + +C. Kimberling has extensively tabulated and enumerated the properties of triangle centers (Kimberling 1994, 1998, and online), denoting the nth center in his numbering scheme by $X_n$. 101 (plus 13 additional) centers appeared in Kimberling (1994), 360 in Kimberling (1998), and the remainder appear in a list maintained online by Kimberling at [\href{http://faculty.evansville.edu/ck6/encyclopedia/ETC.html}]. In his honor, these centers are called Kimberling centers in this work. Kimberling's compilation contains 3053 centers as of December 2004. A subset of these is illustrated above. + +[\href{https://mathworld.wolfram.com/KimberlingCenter.html}{Weisstein, Eric W. "Kimberling Center." From MathWorld--A Wolfram Web Resource.}] + +Only a few centers can be used with this method; here is the current list: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 20, 110, 115. + +Here's an example: + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} +\directlua{ + init_elements () + z.B = point: new (0,0) + z.C = point: new (4,0) + z.A = point : new (1,3.2) + T = triangle: new(z.A,z.B,z.C) + z.H = T : kimberling (4) + z.O = T : kimberling (3) + L.euler = line : new (z.O,z.H) + z.F = T : kimberling (110) + kiepert = conic : new (z.F,L.euler,1) + curve = kiepert : points (-4,4,50) + z.ea,z.eb = get_points(L.euler) } +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan,add= .5 and .5](A,C A,B A,C) + \tkzDrawPolygon[cyan](A,B,C) + \tkzDrawCoordinates[smooth,red](curve) + \tkzDrawLines[red,add= .5 and .5](ea,eb) + \tkzDrawPoints(A,B,C,F,O,H) + \tkzLabelPoints(A,B,C,F,O,H) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + init_elements () + z.B = point: new (0,0) + z.C = point: new (4,0) + z.A = point : new (1,3.2) + T = triangle: new(z.A,z.B,z.C) + z.H = T : kimberling (4) + z.O = T : kimberling (3) + L.euler = line : new (z.O,z.H) + z.F = T : kimberling (110) + kiepert = conic : new (z.F,L.euler,1) + curve = kiepert : points (-4,4,50) + z.ea,z.eb = get_points(L.euler) } + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan,add= .5 and .5](A,C A,B A,C) + \tkzDrawPolygon[cyan](A,B,C) + \tkzDrawCoordinates[smooth,red](curve) + \tkzDrawLines[red,add= .5 and .5](ea,eb) + \tkzDrawPoints(A,B,C,F,O,H) + \tkzLabelPoints(A,B,C,F,O,H) + \end{tikzpicture} + \end{center} +\end{minipage} + + +% subsubsection method_imeth_triangle_kimberling (end) \subsubsection{Method \Imeth{triangle}{trilinear}} % (fold) \label{ssub:method_imeth_triangle_trilinear} @@ -696,25 +777,24 @@ init_elements () \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale = .75 - z.A = point: new (1,1) - z.B = point: new (8,0) - z.C = point: new (2,5) - T = triangle: new(z.A,z.B,z.C) - z.G = T.centroid - ca,cb,cc = T : barycentric_coordinates (z.G) - } - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,C) - \tkzDrawPoints(A,B,C,G) - \tkzLabelPoints(A,B) - \tkzLabelPoints[above](C) \tkzLabelPoint(G){\pmpn{\tkzUseLua{ca}}:\pmpn{\tkzUseLua{cb}}:\pmpn{\tkzUseLua{cc}}} - \end{tikzpicture} - \end{center} +\directlua{% + init_elements () + z.A = point: new (1,1) + z.B = point: new (8,0) + z.C = point: new (2,5) + T = triangle: new(z.A,z.B,z.C) + z.G = T.centroid + ca,cb,cc = T : barycentric_coordinates (z.G) +} +\begin{center} +\begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawPolygons(A,B,C) + \tkzDrawPoints(A,B,C,G) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](C) \tkzLabelPoint(G){\pmpn{\tkzUseLua{ca}}:\pmpn{\tkzUseLua{cb}}:\pmpn{\tkzUseLua{cc}}} +\end{tikzpicture} +\end{center} \end{minipage} % subsubsection method_imeth_triangle_barycentric__coordinates (end) @@ -728,8 +808,27 @@ In the next example, the point $D$ is defined by $\overrightarrow{AD} = 1\cdot \ \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - scale = .75 + init_elements () + z.A = point: new (1,1) + z.B = point: new (8,0) + z.C = point: new (0,5) + z.X = point: new (2,2) + T = triangle: new(z.A,z.B,z.C) + z.D = T : base (1,1) + z.E = T : base (.5,1) +} +\begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawPolygons(A,B,D,C A,B,E,C) + \tkzDrawPoints(A,B,C,D,E) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](C,D,E) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{% + init_elements () z.A = point: new (1,1) z.B = point: new (8,0) z.C = point: new (0,5) @@ -738,37 +837,15 @@ init_elements () z.D = T : base (1,1) z.E = T : base (.5,1) } -\begin{tikzpicture} +\begin{center} +\begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawPolygons(A,B,D,C A,B,E,C) \tkzDrawPoints(A,B,C,D,E) \tkzLabelPoints(A,B) \tkzLabelPoints[above](C,D,E) \end{tikzpicture} -\end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale = .75 - z.A = point: new (1,1) - z.B = point: new (8,0) - z.C = point: new (0,5) - z.X = point: new (2,2) - T = triangle: new(z.A,z.B,z.C) - z.D = T : base (1,1) - z.E = T : base (.5,1) - } - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,D,C A,B,E,C) - \tkzDrawPoints(A,B,C,D,E) - \tkzLabelPoints(A,B) - \tkzLabelPoints[above](C,D,E) - \end{tikzpicture} - \end{center} - +\end{center} \end{minipage} % subsubsection method_imeth_triangle_base (end) @@ -780,25 +857,24 @@ init_elements () The points $a$, $b$ and $c$ are the Euler points. They are the midpoints of the segments $AH$, $BH$ and $CH$. \begin{minipage}{.5\textwidth} - \begin{Verbatim} - \directlua{% -init_elements () - scale = 1.25 - z.A = point: new (0,0) - z.B = point: new (5,0) - z.C = point: new (1,4) - T = triangle: new(z.A,z.B,z.C) - z.N = T.eulercenter - z.a, - z.b, - z.c = get_points (T : euler ()) - z.H = T.orthocenter - T.orthic = T: orthic() - z.Ha, - z.Hb, - z.Hc = get_points (T.orthic) - } - \begin{tikzpicture} +\begin{Verbatim} +\directlua{% + init_elements () + z.A = point: new (0,0) + z.B = point: new (5,0) + z.C = point: new (1,4) + T = triangle: new(z.A,z.B,z.C) + z.N = T.eulercenter + z.a, + z.b, + z.c = get_points (T : euler ()) + z.H = T.orthocenter + T.orthic = T: orthic() + z.Ha, + z.Hb, + z.Hc = get_points (T.orthic) +} +\begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawPolygons[red](A,B,C) \tkzDrawPolygons[cyan](a,b,c) @@ -807,13 +883,12 @@ init_elements () \tkzDrawSegments[red](C,Hc B,Hb A,Ha) \tkzLabelPoints(A,B,a,b,H) \tkzLabelPoints[above](c,C) - \end{tikzpicture} - \end{Verbatim} +\end{tikzpicture} +\end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} \directlua{% -init_elements () - scale = 1.25 + init_elements () z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (1,4) @@ -830,7 +905,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawPolygons[red](A,B,C) \tkzDrawPolygons[cyan](a,b,c) @@ -855,7 +930,6 @@ In the next example, we look for the centre of gravity in two different ways: th \begin{Verbatim} \directlua{% init_elements () - scale = 1.5 z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (1,4) @@ -876,7 +950,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = 1.5 z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (1,4) @@ -892,18 +965,21 @@ init_elements () z.e8, z.e9 = T : nine_points () } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons[red](A,B,C) - \tkzDrawCircle[purple](N,e1) - \tkzDrawPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9) - \tkzLabelPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture}[ scale = 1.5] + \tkzGetNodes + \tkzDrawPolygons[red](A,B,C) + \tkzDrawCircle[purple](N,e1) + \tkzDrawPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9) + \tkzLabelPoints(e1,e2,e3,e4,e5,e6,e7,e8,e9) + \end{tikzpicture} +\end{center} + \end{minipage} \begin{minipage}{.5\textwidth} \begin{Verbatim} -\begin{tikzpicture} +\begin{tikzpicture}[ scale = 1.5] \tkzGetNodes \tkzDrawPolygons[red](A,B,C) \tkzDrawCircle[purple](N,e1) @@ -1058,7 +1134,7 @@ There are several ways of obtaining the Euler circle. The first would be to use \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () + init_elements () z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (1,4) @@ -1078,7 +1154,7 @@ init_elements () \end{minipage} \begin{minipage}{.5\textwidth} \directlua{% -init_elements () + init_elements () z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (1,4) @@ -1148,7 +1224,6 @@ init_elements () \tkzLabelPoints[above](C,K) \end{tikzpicture} \end{center} - \end{minipage} % subsubsection method_imeth_triangle_circum_circle (end) @@ -1165,45 +1240,47 @@ The incenter is the point of concurrence of the triangle's angle bisectors. In a \vspace{6pt} \directlua{% -init_elements () - scale = 2 - z.A = point : new (0 , 0) - z.B = point : new (5 , 0) - z.C = point : new (1 , 3) - T.ABC = triangle : new ( z.A , z.B , z.C ) - z.E = T.ABC : bisector ().pb - z.F = T.ABC : bisector (1).pb - z.G = T.ABC : bisector (2).pb - C.IH = T.ABC : in_circle () - z.I,z.H = get_points (C.IH) + init_elements () + z.A = point : new (0 , 0) + z.B = point : new (5 , 0) + z.C = point : new (1 , 3) + T.ABC = triangle : new ( z.A , z.B , z.C ) + z.E = T.ABC : bisector ().pb + z.F = T.ABC : bisector (1).pb + z.G = T.ABC : bisector (2).pb + C.IH = T.ABC : in_circle () + z.I,z.H = get_points (C.IH) } -\begin{tikzpicture}% - [ new/.style ={ color = orange }, - one/.style = { new,/tkzmkangle/size=.5 }, - two/.style = { new,/tkzmkangle/size=.6 }, - l/.style = { /tkzmkangle/arc=l }, - ll/.style = { /tkzmkangle/arc=ll }, - lll/.style = { /tkzmkangle/arc=lll }] -\tkzGetNodes -\tkzDrawPolygon(A,B,C) -\tkzDrawSegments[new](A,E B,F C,G) - \tkzDrawSegments[dashed,add=0 and .5](I,H) - \tkzDrawPoints(A,B,C,E,F,G,I) - \tkzDrawCircle(I,H) - \tkzDrawPoints(I,A,B,C,H) -\begin{scope}[one] - \tkzMarkAngles[l](B,A,E) - \tkzMarkAngles[ll](C,B,F) - \tkzMarkAngles[lll](A,C,G) -\end{scope} -\begin{scope}[two] - \tkzMarkAngles[l](E,A,C) - \tkzMarkAngles[ll](F,B,A) - \tkzMarkAngles[lll](G,C,B) -\end{scope} -\tkzLabelPoints(A,B,I) -\tkzLabelPoints[above](C,H) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + [scale = 2, new/.style ={ color = orange }, + one/.style = { new,/tkzmkangle/size=.5 }, + two/.style = { new,/tkzmkangle/size=.6 }, + l/.style = { /tkzmkangle/arc=l }, + ll/.style = { /tkzmkangle/arc=ll }, + lll/.style = { /tkzmkangle/arc=lll }] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawSegments[new](A,E B,F C,G) + \tkzDrawSegments[dashed,add=0 and .5](I,H) + \tkzDrawPoints(A,B,C,E,F,G,I) + \tkzDrawCircle(I,H) + \tkzDrawPoints(I,A,B,C,H) + \begin{scope}[one] + \tkzMarkAngles[l](B,A,E) + \tkzMarkAngles[ll](C,B,F) + \tkzMarkAngles[lll](A,C,G) + \end{scope} + \begin{scope}[two] + \tkzMarkAngles[l](E,A,C) + \tkzMarkAngles[ll](F,B,A) + \tkzMarkAngles[lll](G,C,B) + \end{scope} + \tkzLabelPoints(A,B,I) + \tkzLabelPoints[above](C,H) + \end{tikzpicture} +\end{center} + @@ -1290,7 +1367,6 @@ z.Zj = T.ABC : projection (z.J) \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .5 z.A = point: new (0 , 0) z.B = point: new (5 , 0) z.C = point: new (-.4 , 4) @@ -1309,7 +1385,7 @@ z.Yj, z.Zj = T.ABC : projection (z.J) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawArc(K,Xk)(Yk) @@ -1327,7 +1403,7 @@ z.Zj = T.ABC : projection (z.J) \begin{minipage}{.5\textwidth} \begin{Verbatim} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawArc(K,Xk)(Yk) @@ -1352,8 +1428,7 @@ In geometry, the incircle of the medial triangle of a triangle is the Spieker ci \begin{minipage}{.5\textwidth} \directlua{% -init_elements () - scale = 1.5 + init_elements () z.A = point: new (1,1) z.B = point: new (5,1) z.C = point: new (2.2,4) @@ -1367,7 +1442,7 @@ init_elements () z.Qc = midpoint(z.C,z.N) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale = 1.5] \tkzGetNodes \tkzDrawPolygons(A,B,C Qa,Qb,Qc) \tkzDrawPolygons[red](Ma,Mb,Mc) @@ -1379,11 +1454,10 @@ init_elements () \end{tikzpicture} \end{center} \end{minipage} - \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () + init_elements () z.A = point: new (1,1) z.B = point: new (5,1) z.C = point: new (2.2,4) @@ -1424,7 +1498,6 @@ Picking a Cevian point $P$ in the interior of a triangle $ABC$ and drawing Cevia \directlua{% init_elements () - scale = 1.25 z.A = point: new (0,0) z.B = point: new (4,0) z.C = point: new (1.8,3) @@ -1439,7 +1512,7 @@ init_elements () z.w = C.cev.center } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawPolygons[cyan](A,B,C) \tkzDrawSegments[cyan](A,Qb B,Qa) @@ -1499,29 +1572,29 @@ Given a point $P$, the pedal triangle of $P$ is the triangle whose polygon verti \vspace{6pt} \begin{minipage}{.5\textwidth} \begin{Verbatim} - \directlua{% -init_elements () - z.A = point: new(0,0) - z.B = point: new(5,0) - z.C = point: new(1.5,3) - z.O = point: new (2,1) - T.ABC = triangle: new (z.A,z.B,z.C) - T.pedal = T.ABC : pedal (z.O) - z.E,z.F,z.G = get_points(T.pedal) - C.pedal = T.ABC : pedal_circle (z.O) - z.w = C.pedal.center - z.T = C.pedal.through - } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon(A,B,C) - \tkzDrawPolygon[red](E,F,G) - \tkzDrawCircle(w,T) - \tkzDrawPoints(A,B,C,E,F,G,O) - \tkzLabelPoints(A,B,G) - \tkzLabelPoints[above](C,E,F) - \tkzDrawSegments(O,E O,F O,G) - \end{tikzpicture} +\directlua{% + init_elements () + z.A = point: new(0,0) + z.B = point: new(5,0) + z.C = point: new(1.5,3) + z.O = point: new (2,1) + T.ABC = triangle: new (z.A,z.B,z.C) + T.pedal = T.ABC : pedal (z.O) + z.E,z.F,z.G = get_points(T.pedal) + C.pedal = T.ABC : pedal_circle (z.O) + z.w = C.pedal.center + z.T = C.pedal.through +} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawPolygon(A,B,C) +\tkzDrawPolygon[red](E,F,G) +\tkzDrawCircle(w,T) +\tkzDrawPoints(A,B,C,E,F,G,O) +\tkzLabelPoints(A,B,G) +\tkzLabelPoints[above](C,E,F) +\tkzDrawSegments(O,E O,F O,G) +\end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} @@ -1589,19 +1662,18 @@ init_elements () \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale = .5 - z.A = point:new (0,0) - z.C = point:new (5,0) - z.B = point:new (1,3) - T.ABC = triangle : new (z.A,z.B,z.C) - C.conway = T.ABC : conway_circle () - z.w,z.t = get_points(C.conway) - z.t1,z.t2,z.t3, - z.t4,z.t5,z.t6= T.ABC : conway_points () - } - \begin{tikzpicture} +\directlua{% + init_elements () + z.A = point:new (0,0) + z.C = point:new (5,0) + z.B = point:new (1,3) + T.ABC = triangle : new (z.A,z.B,z.C) + C.conway = T.ABC : conway_circle () + z.w,z.t = get_points(C.conway) + z.t1,z.t2,z.t3, + z.t4,z.t5,z.t6= T.ABC : conway_points () +} + \begin{tikzpicture}[ scale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawCircles(w,t) @@ -1623,17 +1695,16 @@ init_elements () \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - scale = .5 - z.A = point: new (1,1) - z.B = point: new (6,0) - z.C = point: new (2,4) - T = triangle: new(z.A,z.B,z.C) - C.bevan = T : bevan_circle () - z.c,z.t = get_points (C.bevan) - % or z.c = T : bevan_point () + init_elements () + z.A = point: new (1,1) + z.B = point: new (6,0) + z.C = point: new (2,4) + T = triangle: new(z.A,z.B,z.C) + C.bevan = T : bevan_circle () + z.c,z.t = get_points (C.bevan) +% or z.c = T : bevan_point () } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawPolygons(A,B,C) \tkzDrawCircle(c,t) @@ -1644,37 +1715,32 @@ init_elements () \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale =.5 - z.A = point: new (1,1) - z.B = point: new (6,0) - z.C = point: new (2,4) - T = triangle: new(z.A,z.B,z.C) - C.bevan = T : bevan_circle () - z.c,z.t = get_points (C.bevan) - } - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,C) - \tkzDrawCircle(c,t) - \tkzDrawPoints(A,B,C,c,t) - \tkzLabelPoints(A,B,c,t) - \tkzLabelPoints[above](C) - \end{tikzpicture} - \end{center} +\directlua{% + init_elements () + z.A = point: new (1,1) + z.B = point: new (6,0) + z.C = point: new (2,4) + T = triangle: new(z.A,z.B,z.C) + C.bevan = T : bevan_circle () + z.c,z.t = get_points (C.bevan) +} +\begin{center} + \begin{tikzpicture}[scale =.5] + \tkzGetNodes + \tkzDrawPolygons(A,B,C) + \tkzDrawCircle(c,t) + \tkzDrawPoints(A,B,C,c,t) + \tkzLabelPoints(A,B,c,t) + \tkzLabelPoints[above](C) + \end{tikzpicture} +\end{center} \end{minipage} % subsubsection methods_imeth_triangle_bevan_circle_and_imeth_triangle_bevan_point (end) - - %%%%%% Triangles %%%%% - - \subsubsection{Method \Imeth{triangle}{feuerbach} and method \Imeth{triangle}{feuerbach\_point}} % (fold) \label{ssub:method_imeth_triangle_feuerbach} @@ -1688,19 +1754,18 @@ The exinscribed circles of a triangle are tangent to the circle of the nine poin \begin{Verbatim} \directlua{% init_elements () - scale = .8 - z.A = point: new (0,0) - z.B = point: new (6,0) - z.C = point: new (0.8,4) - T.ABC = triangle : new ( z.A,z.B,z.C ) - z.N = T.ABC.eulercenter - z.Fa,z.Fb,z.Fc = get_points ( T.ABC : feuerbach () ) - z.F = T.ABC : feuerbach_point () - z.Ja,z.Jb,z.Jc = get_points ( T.ABC : excentral () ) - z.I = T.ABC.incenter - z.Ia,z.Ib,z.Ic = get_points (T.ABC : intouch ()) + z.A = point: new (0,0) + z.B = point: new (6,0) + z.C = point: new (0.8,4) + T.ABC = triangle : new ( z.A,z.B,z.C ) + z.N = T.ABC.eulercenter + z.Fa,z.Fb,z.Fc = get_points ( T.ABC : feuerbach () ) + z.F = T.ABC : feuerbach_point () + z.Ja,z.Jb,z.Jc = get_points ( T.ABC : excentral () ) + z.I = T.ABC.incenter + z.Ia,z.Ib,z.Ic = get_points (T.ABC : intouch ()) } -\begin{tikzpicture} +\begin{tikzpicture}[ scale = .8] \tkzGetNodes \tkzDrawPoints(Ja,Jb,Jc) \tkzClipBB @@ -1717,21 +1782,20 @@ init_elements () \directlua{% -init_elements () - scale = .7 - z.A = point: new (0,0) - z.B = point: new (6,0) - z.C = point: new (0.8,4) - T.ABC = triangle : new ( z.A,z.B,z.C ) - z.N = T.ABC.eulercenter - z.Fa,z.Fb,z.Fc = get_points ( T.ABC : feuerbach () ) - z.F = T.ABC : feuerbach_point () - z.Ja,z.Jb,z.Jc = get_points ( T.ABC : excentral () ) - z.I = T.ABC.incenter - z.Ia,z.Ib,z.Ic = get_points (T.ABC : intouch ()) + init_elements () + z.A = point: new (0,0) + z.B = point: new (6,0) + z.C = point: new (0.8,4) + T.ABC = triangle : new ( z.A,z.B,z.C ) + z.N = T.ABC.eulercenter + z.Fa,z.Fb,z.Fc = get_points ( T.ABC : feuerbach () ) + z.F = T.ABC : feuerbach_point () + z.Ja,z.Jb,z.Jc = get_points ( T.ABC : excentral () ) + z.I = T.ABC.incenter + z.Ia,z.Ib,z.Ic = get_points (T.ABC : intouch ()) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .7] \tkzGetNodes \tkzDrawPoints(Ja,Jb,Jc) \tkzClipBB @@ -1755,18 +1819,17 @@ The \code{similar} method creates a new triangle whose sides are parallel to the \begin{minipage}{.5\textwidth} \begin{Verbatim} - \directlua{% -init_elements () - scale =.5 - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.C = point: new (1.5 , 3.5) - T.ABC = triangle: new (z.A,z.B,z.C) - z.X,z.Y,z.Z = get_points ( T.ABC : similar ()) - z.H_a,z.H_b, - z.H_c = get_points (T.ABC : orthic ()) - } - \begin{tikzpicture} +\directlua{% + init_elements () + z.A = point: new (0 , 0) + z.B = point: new (6 , 0) + z.C = point: new (1.5 , 3.5) + T.ABC = triangle: new (z.A,z.B,z.C) + z.X,z.Y,z.Z = get_points ( T.ABC : similar ()) + z.H_a,z.H_b, + z.H_c = get_points (T.ABC : orthic ()) +} + \begin{tikzpicture}[ scale =.5] \tkzGetNodes \tkzDrawPolygons(A,B,C X,Y,Z) \tkzDrawLines(A,H_a B,H_b C,H_c) @@ -1777,9 +1840,8 @@ init_elements () \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale =.5 +\directlua{% + init_elements () z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.C = point: new (1.5 , 3.5) @@ -1788,15 +1850,17 @@ init_elements () z.H_a,z.H_b, z.H_c = get_points (T.ABC : orthic ()) } -\hspace*{\fill} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,C X,Y,Z) - \tkzDrawLines(A,H_a B,H_b C,H_c) - \tkzDrawPoints(A,B,C,X,Y,Z) - \tkzLabelPoints(A,B,Z) - \tkzLabelPoints[above](X,Y,C) - \end{tikzpicture} + \begin{center} + \begin{tikzpicture}[ scale =.5] + \tkzGetNodes + \tkzDrawPolygons(A,B,C X,Y,Z) + \tkzDrawLines(A,H_a B,H_b C,H_c) + \tkzDrawPoints(A,B,C,X,Y,Z) + \tkzLabelPoints(A,B,Z) + \tkzLabelPoints[above](X,Y,C) + \end{tikzpicture} + \end{center} + \end{minipage} @@ -1810,20 +1874,48 @@ The triangle $MaMbMc$ formed by joining the midpoints of the sides of a triangle \vspace{6pt} \begin{minipage}{.5\textwidth} - \begin{Verbatim} - \directlua{% -init_elements () - scale = 1.25 - z.A = point: new (0,1) - z.B = point: new (6,0) - z.C = point: new (2,4) - T = triangle: new(z.A,z.B,z.C) - T.med = T : medial () - z.Ma,z.Mb,z.Mc= get_points (T.med) - z.G = T.centroid - z.O = T.circumcenter - } - \begin{tikzpicture} +\begin{Verbatim} +\directlua{% + init_elements () + z.A = point: new (0,1) + z.B = point: new (6,0) + z.C = point: new (2,4) + T = triangle: new(z.A,z.B,z.C) + T.med = T : medial () + z.Ma,z.Mb,z.Mc= get_points (T.med) + z.G = T.centroid + z.O = T.circumcenter +} +\begin{tikzpicture}[scale = 1.25] +\tkzGetNodes +\tkzDrawPolygons(A,B,C) +\tkzDrawPolygons[red](Ma,Mb,Mc) +\tkzDrawSegments(A,Ma B,Mb C,Mc) + \tkzDrawSegments[dashed,cyan](O,Ma O,Mb O,Mc) +\tkzDrawPoints(A,B,C,Ma,Mb,Mc,O,G) +\tkzLabelPoints(A,B,Mc,O) +\tkzLabelPoints[above](C) +\tkzLabelPoints[left](Mb) +\tkzLabelPoints[right](Ma,G) +\tkzMarkRightAngles[fill=cyan!20, + opacity=.4](O,Ma,B O,Mb,A O,Mc,A) +\end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} +\directlua{% + init_elements () + z.A = point: new (0,1) + z.B = point: new (6,0) + z.C = point: new (2,4) + T = triangle: new(z.A,z.B,z.C) + T.med = T : medial () + z.Ma,z.Mb,z.Mc= get_points (T.med) + z.G = T.centroid + z.O = T.circumcenter +} +\begin{center} + \begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawPolygons(A,B,C) \tkzDrawPolygons[red](Ma,Mb,Mc) @@ -1837,36 +1929,6 @@ init_elements () \tkzMarkRightAngles[fill=cyan!20, opacity=.4](O,Ma,B O,Mb,A O,Mc,A) \end{tikzpicture} - \end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale = 1.25 - z.A = point: new (0,1) - z.B = point: new (6,0) - z.C = point: new (2,4) - T = triangle: new(z.A,z.B,z.C) - T.med = T : medial () - z.Ma,z.Mb,z.Mc= get_points (T.med) - z.G = T.centroid - z.O = T.circumcenter - } - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,C) - \tkzDrawPolygons[red](Ma,Mb,Mc) - \tkzDrawSegments(A,Ma B,Mb C,Mc) - \tkzDrawSegments[dashed,cyan](O,Ma O,Mb O,Mc) - \tkzDrawPoints(A,B,C,Ma,Mb,Mc,O,G) - \tkzLabelPoints(A,B,Mc,O) - \tkzLabelPoints[above](C) - \tkzLabelPoints[left](Mb) - \tkzLabelPoints[right](Ma,G) - \tkzMarkRightAngles[fill=cyan!20, - opacity=.4](O,Ma,B O,Mb,A O,Mc,A) - \end{tikzpicture} \end{center} \end{minipage} @@ -1909,8 +1971,8 @@ init_elements () \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% -init_elements () +\directlua{% + init_elements () z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.C = point: new (1 , 4) @@ -1921,19 +1983,19 @@ init_elements () z.Ta,z.Tb, z.Tc = get_points (T.ABC : intouch ()) } - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon(A,B,C) - \tkzDrawPolygon[dashed,red](Ia,Ib,Ic) - \tkzDrawSegments[dashed,red](A,Ia B,Ib C,Ic) - \tkzDrawCircle(I,Ta) - \tkzDrawPoints(A,B,C,Ia,Ib,Ic,I,Ta,Tb,Tc) - \tkzLabelPoints(A,B,Ic,I,Tc) - \tkzLabelPoints[above](Ia,Ta,C) - \tkzLabelPoints[above left](Ib,Tb) - \end{tikzpicture} - \end{center} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawPolygon[dashed,red](Ia,Ib,Ic) + \tkzDrawSegments[dashed,red](A,Ia B,Ib C,Ic) + \tkzDrawCircle(I,Ta) + \tkzDrawPoints(A,B,C,Ia,Ib,Ic,I,Ta,Tb,Tc) + \tkzLabelPoints(A,B,Ic,I,Tc) + \tkzLabelPoints[above](Ia,Ta,C) + \tkzLabelPoints[above left](Ib,Tb) + \end{tikzpicture} +\end{center} \end{minipage} @@ -1948,12 +2010,8 @@ The tangential triangle is the triangle $TaTbTc$ formed by the lines tangent to The sides of an orthic triangle are parallel to the tangents to the circumcircle at the vertices (Johnson 1929, p. 172). This is equivalent to the statement that each line from a triangle's circumcenter to a vertex is always perpendicular to the corresponding side of the orthic triangle (Honsberger 1995, p. 22), and to the fact that the orthic and tangential triangles are homothetic. [ \href{https://mathworld.wolfram.com/TangentialTriangle.html}{Weisstein, Eric W. "Tangential Triangle." From MathWorld--A Wolfram Web Resource.}] -\vspace{6pt} -\begin{minipage}{.5\textwidth} -\begin{Verbatim} \directlua{% init_elements () - scale = .75 z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (1,3) @@ -1969,7 +2027,9 @@ init_elements () z.Tb, z.Tc = get_points (T : tangential ()) } -\begin{tikzpicture} + + \begin{center} +\begin{tikzpicture}[scale = .75,rotate=-80] \tkzGetNodes \tkzDrawPolygons[red](A,B,C Ta,Tb,Tc) \tkzDrawCircle(O,A) @@ -1983,12 +2043,12 @@ init_elements () \tkzLabelPoints[font=\small,above](Ha,Hb) \tkzMarkRightAngles(A,Ha,C B,Hb,A C,Hc,B) \end{tikzpicture} -\end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth} + \end{center} +\vspace{6pt} + +\begin{Verbatim} \directlua{% init_elements () - scale = .75 z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (1,3) @@ -2004,9 +2064,7 @@ init_elements () z.Tb, z.Tc = get_points (T : tangential ()) } - - \begin{center} -\begin{tikzpicture} +\begin{tikzpicture}[scale= .75] \tkzGetNodes \tkzDrawPolygons[red](A,B,C Ta,Tb,Tc) \tkzDrawCircle(O,A) @@ -2020,9 +2078,8 @@ init_elements () \tkzLabelPoints[font=\small,above](Ha,Hb) \tkzMarkRightAngles(A,Ha,C B,Hb,A C,Hc,B) \end{tikzpicture} - \end{center} +\end{Verbatim} -\end{minipage} % subsubsection method_imeth_triangle_tangential (end) @@ -2047,25 +2104,24 @@ In the next example, $L$ is the \code{Lemoine point} or the \code{Symmedian poin \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - scale = 2 - z.A = point : new (0,0) - z.B = point : new (7,0) - z.C = point : new (2,3) - T.ABC = triangle : new (z.A,z.B,z.C) - z.L = T.ABC : lemoine_point () - T.SY = T.ABC : symmedian () - T.med = T.ABC : medial () - z.Ka,z.Kb,z.Kc = get_points (T.SY) - z.Ma,z.Mb,z.Mc = get_points (T.med) - L.Kb = T.ABC : symmedian_line (1) - _,z.Kb = get_points(L.Kb) - z.G = T.ABC.centroid - z.Ia,z.Ib,z.Ic = get_points ( T.ABC : incentral ()) - % z.T = T.ABC : trilinear (0,1,1) - z.I = T.ABC.incenter + init_elements () + z.A = point : new (0,0) + z.B = point : new (7,0) + z.C = point : new (2,3) + T.ABC = triangle : new (z.A,z.B,z.C) + z.L = T.ABC : lemoine_point () + T.SY = T.ABC : symmedian () + T.med = T.ABC : medial () + z.Ka,z.Kb,z.Kc = get_points (T.SY) + z.Ma,z.Mb,z.Mc = get_points (T.med) + L.Kb = T.ABC : symmedian_line (1) +_,z.Kb = get_points(L.Kb) +z.G = T.ABC.centroid +z.Ia,z.Ib,z.Ic = get_points ( T.ABC : incentral ()) +% z.T = T.ABC : trilinear (0,1,1) +z.I = T.ABC.incenter } -\begin{tikzpicture} +\begin{tikzpicture}[ scale = 2] \tkzGetNodes \tkzDrawPolygons(A,B,C) \tkzDrawPoints(A,B,C,L,Ka,Kb,Kc,G,Ma,Mb,Mc,Ia,Ib,Ic,I) @@ -2079,10 +2135,9 @@ init_elements () \end{Verbatim} \end{minipage} -\begin{minipage}{.5\textwidth} + \directlua{% init_elements () - scale = 2 z.A = point : new (0,0) z.B = point : new (7,0) z.C = point : new (2,3) @@ -2099,7 +2154,7 @@ init_elements () z.I = T.ABC.incenter } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale =1.75] \tkzGetNodes \tkzDrawPolygons(A,B,C) \tkzDrawPoints(A,B,C,L,Ka,Kb,Kc,G,Ma,Mb,Mc,Ia,Ib,Ic,I) @@ -2113,7 +2168,6 @@ init_elements () \end{center} -\end{minipage} % subsubsection method_imeth_triangle_symmedial (end) @@ -2127,7 +2181,6 @@ The anticomplementary triangle is the triangle $TaTbTc$ which has a given triang \begin{Verbatim} \directlua{% init_elements () - scale = .6 z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (2,4) @@ -2137,7 +2190,7 @@ init_elements () z.Tb, z.Tc = get_points (T.similar) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .6] \tkzGetNodes \tkzDrawPolygons[red](A,B,C) \tkzDrawPolygon[blue](Ta,Tb,Tc) @@ -2150,7 +2203,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .6 z.A = point: new (0,0) z.B = point: new (5,0) z.C = point: new (2,4) @@ -2161,7 +2213,7 @@ init_elements () z.Tc = get_points (T.similar) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .6] \tkzGetNodes \tkzDrawPolygons[red](A,B,C) \tkzDrawPolygon[blue](Ta,Tb,Tc) @@ -2176,72 +2228,89 @@ init_elements () % subsubsection method_imeth_triangle_anti (end) -\subsubsection{Euler line} % (fold) +\subsubsection{Methods \Imeth{triangle}{euler\_line} and \Imeth{triangle}{orthic\_axis}} % (fold) \label{ssub:euler_line} +Let $ha$, $hb$ and $hc$ be the vertices of the orthic triangle of a triangle $ABC$. Then each side of each triangle meets the three sides of the other triangle, and the points of intersection lie on a line $QcQb$ called the orthic axis of $ABC$. It is perpendicular to the Euler line. The \code{orthic\_axis} method returns a straight line, i.e. only two points. To obtain the third point, use the \Imeth{triangle}{orthic\_axis\_points} method. + The line on which the orthocenter $H$, triangle centroid $G$, circumcenter $O$, nine-point center $N$, and a number of other important triangle centers lie. [ \href{https://mathworld.wolfram.com/EulerLine.html}{Weisstein, Eric W. "Euler Line." From MathWorld--A Wolfram Web Resource.}] -\begin{minipage}{.5\textwidth} \begin{Verbatim} -\directlua{% -init_elements () - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.C = point: new (1.5 , 3.5) - T.ABC = triangle: new (z.A,z.B,z.C) - z.O = T.ABC.circumcenter - z.G = T.ABC.centroid - z.N = T.ABC.eulercenter - z.H = T.ABC.orthocenter - z.P,z.Q,z.R = get_points (T.ABC: orthic()) - z.K,z.I,z.J = get_points (T.ABC: medial ()) +\directlua{ + init_elements () + z.B = point: new (0,0) + z.C = point: new (5,0) + z.A = point: new (.6,3) + T = triangle: new(z.A,z.B,z.C) + z.N = T.eulercenter + z.H = T.orthocenter + z.O = T.circumcenter + z.G = T.centroid + z.ha,z.hb,z.hc = get_points (T : orthic ()) + L.orthic = T : orthic_axis () + z.Qa,z.Qb,z.Qc = T : orthic_axis_points () + L.euler = T : euler_line () + z.ea,z.eb = get_points (L.euler) + z.K = L.orthic : projection (z.N) } \begin{tikzpicture} - \tkzGetNodes - \tkzDrawLines[blue](O,H) - \tkzDrawCircle[red](N,I) - \tkzDrawCircles[teal](O,A) - \tkzDrawSegments(A,P B,Q C,R) - \tkzDrawSegments[red](A,I B,J C,K) - \tkzDrawPolygons(A,B,C) - \tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G) - \tkzLabelPoints(A,B,C,I,J,K,P,Q,R,H) - \tkzLabelPoints[below](N,O,G) + \tkzGetNodes + \tkzDrawPolygons[cyan](A,B,C) + \tkzDrawLines[red](Qc,Qb) + \tkzDrawSegments(A,Qc B,Qa A,ha B,hb C,hc C,Qb) + \tkzDrawSegments[dashed](hb,Qc hb,Qa ha,Qb) + \tkzDrawLines[blue, add = .5 and .5](ea,eb) + \tkzDrawPoints(A,B,C,ha,hb,hc) + \tkzDrawPoints(N,H,O,G,Qa,Qb,Qc) + \tkzLabelPoints(N,H,O,G) + \tkzLabelPoints(B,C,ha) + \tkzLabelPoints[above right](A,hb) + \tkzLabelPoints[left](hc,Qa,Qb,Qc) + \tkzMarkRightAngle(N,K,Qb) + \tkzLabelSegment[sloped,blue,pos=1.4,above](ea,eb){\small\texttt{euler\_line}} +\tkzLabelSegment[sloped,red,pos=.8](Qc,Qb){\small\texttt{orthic\_axis}} \end{tikzpicture} \end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth} -\directlua{% -init_elements () - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.C = point: new (1.5 , 3.5) - T.ABC = triangle: new (z.A,z.B,z.C) - z.O = T.ABC.circumcenter - z.G = T.ABC.centroid - z.N = T.ABC. eulercenter - z.H = T.ABC. orthocenter - z.P,z.Q,z.R = get_points (T.ABC: orthic()) - z.K,z.I,z.J = get_points (T.ABC: medial ()) + +\directlua{ + z.B = point: new (0,0) + z.C = point: new (5,0) + z.A = point: new (.6,3) + T = triangle: new(z.A,z.B,z.C) + z.N = T.eulercenter + z.H = T.orthocenter + z.O = T.circumcenter + z.G = T.centroid + z.ha,z.hb,z.hc = get_points (T : orthic ()) + L.orthic = T : orthic_axis () + z.Qa,z.Qb,z.Qc = T : orthic_axis_points () + L.euler = T : euler_line () + z.ea,z.eb = get_points (L.euler) + z.K = L.orthic : projection (z.N) } \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawLines[blue](O,H) - \tkzDrawCircle[red](N,I) - \tkzDrawCircles[teal](O,A) - \tkzDrawSegments(A,P B,Q C,R) - \tkzDrawSegments[red](A,I B,J C,K) - \tkzDrawPolygons(A,B,C) - \tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G) - \tkzLabelPoints(A,B,J,P,R) - \tkzLabelPoints[above](C,I,Q,K) - \tkzLabelPoints[below](N,O,G,H) + \begin{tikzpicture}[scale=1.25] + \tkzGetNodes + \tkzDrawPolygons[cyan](A,B,C) + \tkzDrawLines[red](Qc,Qb) + \tkzDrawSegments(A,Qc B,Qa A,ha B,hb C,hc C,Qb) + \tkzDrawSegments[dashed](hb,Qc hb,Qa ha,Qb) + \tkzDrawLines[blue, add = .5 and .5](ea,eb) + \tkzDrawPoints(A,B,C,ha,hb,hc) + \tkzDrawPoints(N,H,O,G,Qa,Qb,Qc) + \tkzLabelPoints(N,H,O,G) + \tkzLabelPoints(B,C,ha) + \tkzLabelPoints[above right](A,hb) + \tkzLabelPoints[left](hc,Qa,Qb,Qc) + \tkzMarkRightAngle(N,K,Qb) + \tkzLabelSegment[sloped,blue,pos=1.4,above](ea,eb){\small\texttt{euler\_line}} + \tkzLabelSegment[sloped,red,pos=.8](Qc,Qb){\small\texttt{orthic\_axis}} \end{tikzpicture} \end{center} -\end{minipage} + + % subsubsection euler_line (end) \subsubsection{Euler ellipse} % (fold) @@ -2251,69 +2320,63 @@ Example of obtaining the Euler circle as well as the Euler ellipse. \vspace{6pt} \directlua{% -init_elements () -z.A = point: new (2,3.8) -z.B = point: new (0 ,0) -z.C = point: new (6.2 ,0) -L.AB = line : new ( z.A , z.B ) -T.ABC = triangle: new (z.A,z.B,z.C) -z.K = midpoint (z.B,z.C) -E.euler = T.ABC : euler_ellipse () -z.N = T.ABC.eulercenter -C.euler = circle : new (z.N,z.K) -ang = math.deg(E.euler.slope) -z.O = T.ABC.circumcenter -z.G = T.ABC.centroid -z.H = T.ABC.orthocenter + init_elements () + z.A = point: new (2,3.8) + z.B = point: new (0 ,0) + z.C = point: new (6.2 ,0) + L.AB = line : new ( z.A , z.B ) + T.ABC = triangle: new (z.A,z.B,z.C) + z.K = midpoint (z.B,z.C) + EL.euler = T.ABC : euler_ellipse () + curve = EL.euler : points (0,1,50) + z.N = T.ABC.eulercenter + C.euler = circle : new (z.N,z.K) + z.O = T.ABC.circumcenter + z.G = T.ABC.centroid + z.H = T.ABC.orthocenter } +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircle(N,K) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawLine(O,H) + \tkzDrawPoints(A,B,C,N,O,H,G) + \tkzLabelPoints[below left](B,C,N,O,H,G) + \tkzLabelPoints[above](A) + \end{tikzpicture} +\end{center} -\begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () -z.A = point: new (2,3.8) -z.B = point: new (0 ,0) -z.C = point: new (6.2 ,0) -L.AB = line : new ( z.A , z.B ) -T.ABC = triangle: new (z.A,z.B,z.C) -z.K = midpoint (z.B,z.C) -E.euler = T.ABC : euler_ellipse () -z.N = T.ABC.eulercenter -C.euler = circle : new (z.N,z.K) -ang = math.deg(E.euler.slope) -z.O = T.ABC.circumcenter -z.G = T.ABC.centroid -z.H = T.ABC.orthocenter + init_elements () + z.A = point: new (2,3.8) + z.B = point: new (0 ,0) + z.C = point: new (6.2 ,0) + L.AB = line : new ( z.A , z.B ) + T.ABC = triangle: new (z.A,z.B,z.C) + z.K = midpoint (z.B,z.C) + EL.euler = T.ABC : euler_ellipse () + curve = EL.euler : points (0,1,50) + z.N = T.ABC.eulercenter + C.euler = circle : new (z.N,z.K) + z.O = T.ABC.circumcenter + z.G = T.ABC.centroid + z.H = T.ABC.orthocenter } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircle(N,K) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawLine(O,H) + \tkzDrawPoints(A,B,C,N,O,H,G) + \tkzLabelPoints[below left](B,C,N,O,H,G) + \tkzLabelPoints[above](A) + \end{tikzpicture} \end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C) -\tkzDrawCircle(N,K) -\tkzDrawEllipse[teal](N,\tkzUseLua{E.euler.Rx}, - \tkzUseLua{E.euler.Ry},\tkzUseLua{ang}) -\tkzDrawLine(O,H) -\tkzDrawPoints(A,B,C,N,O,H,G) -\tkzLabelPoints[below left](B,C,N,O,H,G) -\tkzLabelPoints[above](A) -\end{tikzpicture} -\end{minipage} -\begin{Verbatim} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C) -\tkzDrawCircle(N,K) -\tkzDrawEllipse[teal](N,\tkzUseLua{E.euler.Rx}, - \tkzUseLua{E.euler.Ry},\tkzUseLua{ang}) -\tkzDrawLine(O,H) -\tkzDrawPoints(A,B,C,N,O,H,G) -\tkzLabelPoints[below left](B,C,N,O,H,G) -\tkzLabelPoints[above](A) -\end{tikzpicture} -\end{Verbatim} % subsubsection euler_ellipse (end) \subsubsection{Steiner inellipse and circumellipse} % (fold) @@ -2321,83 +2384,96 @@ z.H = T.ABC.orthocenter In this example, the inner and outer Steiner ellipses, referred to as the "inellipse" and "circumellipse" [\href{https://mathworld.wolfram.com/SteinerInellipse.html}{Weisstein, Eric W. "Steiner Inellipse." From MathWorld--A Wolfram Web Resource.} and \href{https://mathworld.wolfram.com/SteinerCircumellipse.html}{Weisstein, Eric W. "Steiner Circumellipse." From MathWorld--A Wolfram Web Resource.}], respectively, along with the orthoptic circle, are depicted.. The triangle must be acutangle. \vspace{6pt} -\begin{minipage}{.5\textwidth} +\directlua{ + z.A = point: new (1 , 4) + z.B = point: new (11 , 1) + z.C = point: new (5 , 12) + T.ABC = triangle: new(z.A,z.B,z.C) + EL_a = T.ABC: steiner_inellipse () + curve_a = EL_a : points (0,1,100) + z.G = EL_a.center + ang = math.deg(EL_a.slope) + z.F = EL_a.Fa + z.E = EL_a.Fb + C = EL_a: orthoptic () + z.w = C.center + z.o = C.through + EL_b = T.ABC : steiner_circumellipse () + curve_b = EL_b : points (0,1,100) + z.M = C : point (0) + L.T1, + L.T2 = EL_a : tangent_from (z.M) + z.T1 = L.T1.pb + z.T2 = L.T2.pb +} +\begin{center} + \begin{tikzpicture}[scale =.5] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircles[black!50!green](w,o) + \tkzDrawCoordinates[smooth,red](curve_a) + \tkzDrawCoordinates[smooth,cyan](curve_b) + \tkzDrawLines(F,E M,T1 M,T2) + \tkzDrawPoints(A,B,C,F,E,G,M,T1,T2) + \tkzLabelPoints[above](C) + \tkzLabelPoints[right](B) + \tkzLabelPoints[below left](A,F,E,G,T1,T2,M) + \end{tikzpicture} +\end{center} + +\vspace{6pt} \begin{Verbatim} -\directlua{% -init_elements () - scale = .5 - z.A = point: new (1 , 4) - z.B = point: new (11 , 1) - z.C = point: new (5 , 12) - T.ABC = triangle: new(z.A,z.B,z.C) - E = T.ABC: steiner_inellipse () - z.G = E.center - ang = math.deg(E.slope) - z.F = E.Fa - z.E = E.Fb - C = E: orthoptic_circle () - z.w = C.center - z.o = C.through - EE = T.ABC : steiner_circumellipse () - z.M = C : point (0) - L.T1,L.T2= E : tangent_from (z.M) - z.T1 = L.T1.pb - z.T2 = L.T2.pb +\directlua{ + z.A = point: new (1 , 4) + z.B = point: new (11 , 1) + z.C = point: new (5 , 12) + T.ABC = triangle: new(z.A,z.B,z.C) + EL_a = T.ABC: steiner_inellipse () + curve_a = EL_a : points (0,1,100) + z.G = EL_a.center + ang = math.deg(EL_a.slope) + z.F = EL_a.Fa + z.E = EL_a.Fb + C = EL_a: orthoptic () + z.w = C.center + z.o = C.through + EL_b = T.ABC : steiner_circumellipse () + curve_b = EL_b : points (0,1,100) + z.M = C : point (0) + L.T1, + L.T2 = EL_a : tangent_from (z.M) + z.T1 = L.T1.pb + z.T2 = L.T2.pb } +\begin{tikzpicture}[scale =.5] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircles[black!50!green](w,o) + \tkzDrawCoordinates[smooth,red](curve_a) + \tkzDrawCoordinates[smooth,cyan](curve_b) + \tkzDrawLines(F,E M,T1 M,T2) + \tkzDrawPoints(A,B,C,F,E,G,M,T1,T2) + \tkzLabelPoints[above](C) + \tkzLabelPoints[right](B) + \tkzLabelPoints[below left](A,F,E,G,T1,T2,M) +\end{tikzpicture} + \end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth}\directlua{% -init_elements () - scale = .5 -z.A = point: new (1 , 4) -z.B = point: new (11 , 1) -z.C = point: new (5 , 12) -T.ABC = triangle: new(z.A,z.B,z.C) -E = T.ABC: steiner_inellipse () -z.G = E.center -ang = math.deg(E.slope) -z.F = E.Fa -z.E = E.Fb -C = E: orthoptic_circle () -z.w = C.center -z.o = C.through -EE = T.ABC : steiner_circumellipse () -z.M = C : point (0) -L.T1,L.T2= E : tangent_from (z.M) -z.T1 = L.T1.pb -z.T2 = L.T2.pb -} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C) -\tkzDrawCircles(w,o) -\tkzDrawEllipse[teal](G,\tkzUseLua{E.Rx}, - \tkzUseLua{E.Ry},\tkzUseLua{ang}) -\tkzDrawEllipse[red](G,\tkzUseLua{EE.Rx}, - \tkzUseLua{EE.Ry},\tkzUseLua{ang}) -\tkzDrawLines(F,E M,T1 M,T2) % -\tkzDrawPoints(A,B,C,F,E,G,M,T1,T2) -\tkzLabelPoints[above](C,M,T1) -\tkzLabelPoints[right](T2,B) -\tkzLabelPoints[below left](A,F,E,G) -\end{tikzpicture} -\end{minipage} + \begin{Verbatim} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C) -\tkzDrawCircles(w,o) -\tkzDrawEllipse[teal](G,\tkzUseLua{E.Rx}, - \tkzUseLua{E.Ry},\tkzUseLua{ang}) -\tkzDrawEllipse[red](G,\tkzUseLua{EE.Rx}, - \tkzUseLua{EE.Ry},\tkzUseLua{ang}) -\tkzDrawLines(F,E M,T1 M,T2) % -\tkzDrawPoints(A,B,C,F,E,G,M,T1,T2) -\tkzLabelPoints[above](C,M,T1) -\tkzLabelPoints[right](T2,B) -\tkzLabelPoints[below left](A,F,E,G) +\begin{tikzpicture}[scale =.5] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircles[black!50!green](w,o) + \tkzDrawCoordinates[smooth,red](curve_a) + \tkzDrawCoordinates[smooth,cyan](curve_b) + \tkzDrawLines(F,E M,T1 M,T2) + \tkzDrawPoints(A,B,C,F,E,G,M,T1,T2) + \tkzLabelPoints[above](C) + \tkzLabelPoints[right](B) + \tkzLabelPoints[below left](A,F,E,G,T1,T2,M) \end{tikzpicture} \end{Verbatim} % subsubsection steiner_inellipse_and_circumellipse (end) @@ -2418,7 +2494,6 @@ Let four points $A$, $C$, $B$ and $D$, in this order, lying on the straight line \begin{Verbatim} \directlua{% init_elements () - scale = .4 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.M = point: new (5 , 4) @@ -2442,7 +2517,6 @@ init_elements () \begin{minipage}{.6\textwidth} \directlua{% init_elements () - scale =.4 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.M = point: new (5 , 4) @@ -2461,25 +2535,28 @@ init_elements () z.E = intersection (L.LL,L.MC) z.F = intersection (L.LL,L.MD) } -\hspace{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon(A,B,M) - \tkzDrawCircle[purple](O,C) - \tkzDrawSegments[purple](M,E M,D E,F) - \tkzDrawSegments(D,B) - \tkzDrawPoints(A,B,M,C,D,E,F) - \tkzLabelPoints[below right](A,B,C,D,E) - \tkzLabelPoints[above](M,F) - \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D) - \tkzMarkAngles[mark=||,size=.5](A,M,E E,M,B B,E,M) - \tkzMarkAngles[mark=|,size=.5](B,M,F M,F,B) - \tkzMarkSegments(B,E B,M B,F) -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture}[scale =.4] + \tkzGetNodes + \tkzDrawPolygon(A,B,M) + \tkzDrawCircle[purple](O,C) + \tkzDrawSegments[purple](M,E M,D E,F) + \tkzDrawSegments(D,B) + \tkzDrawPoints(A,B,M,C,D,E,F) + \tkzLabelPoints[below right](A,B,C,D,E) + \tkzLabelPoints[above](M,F) + \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D) + \tkzMarkAngles[mark=||,size=.5](A,M,E E,M,B B,E,M) + \tkzMarkAngles[mark=|,size=.5](B,M,F M,F,B) + \tkzMarkSegments(B,E B,M B,F) + \end{tikzpicture} +\end{center} + \end{minipage} \begin{Verbatim} -\begin{tikzpicture} +\begin{tikzpicture}[scale =.4] \tkzGetNodes \tkzDrawPolygon(A,B,M) \tkzDrawCircle[purple](O,C) @@ -2501,9 +2578,9 @@ init_elements () See [\ref{ssub:method_c__ll__p}] for special cases. Please note that the arguments are not the same as for the \code{line} class. +We are looking for a circle tangent to two straight lines passing through a point + \vspace{6pt} -\begin{minipage}{.5\textwidth} - \begin{Verbatim} \directlua{ init_elements() z.A = point : new ( 0 , 0 ) @@ -2519,16 +2596,18 @@ init_elements() z.O2 = C2.center z.T2 = C2.through } -\begin{tikzpicture} + \begin{center} +\begin{tikzpicture}[scale =1] \tkzGetNodes - \tkzDrawLines[thick](A,B A,C B,C) + \tkzDrawPolygon[thick](A,B,C) \tkzDrawCircles[red](O1,T1 O2,T2) \tkzDrawPoints(A,B,C,P) \tkzLabelPoints(A,B,C,P) \end{tikzpicture} - \end{Verbatim} -\end{minipage} -\begin{minipage}{.5\textwidth} + \end{center} + + +\begin{Verbatim} \directlua{ init_elements() z.A = point : new ( 0 , 0 ) @@ -2544,7 +2623,6 @@ init_elements() z.O2 = C2.center z.T2 = C2.through } - \begin{center} \begin{tikzpicture} \tkzGetNodes \tkzDrawLines[thick](A,B A,C B,C) @@ -2552,11 +2630,386 @@ init_elements() \tkzDrawPoints(A,B,C,P) \tkzLabelPoints(A,B,C,P) \end{tikzpicture} + \end{Verbatim} + + + + + +% subsubsection method_c__ll__p (end) + +\subsubsection{Method \Imeth{triangle}{steiner\_line}} % (fold) +\label{ssub:method_imeth_triangle_steiner__line} + +Let $ABC$ be a triangle with orthocenter $H$. $M$ is a point on the circumcircle of the triangle $ABC$. + +Let $H_A, H_B,$ and $H_C$ be the reflections of $M$ in three lines $BC$, $AC$ and $AB$ respectively. + +$P_A, P_B, P_C,$ and $H$ are collinear. The line is known as the Steiner line of point $M$ with respect to the triangle $ABC$. + +Whatever the point $M$, the Steiner line associated with $M$ passes through the orthocenter $H$ of triangle $ABC$. + +$M$ lies on the circumscribed circle of the triangle if and only if $P$, $Q$ and $R$ are aligned. + +\begin{Verbatim} + \directlua{ + z.B = point: new (0,0) + z.C = point: new (4,0) + z.A = point : new (1,4) + T.ABC = triangle: new(z.A,z.B,z.C) + C.ABC = T.ABC : circum_circle () + z.O = T.ABC.circumcenter + z.H = T.ABC.orthocenter + z.M = C.ABC : point (.65) + z.H_P = T.ABC.ab : reflection (z.M) + z.H_Q = T.ABC.bc : reflection (z.M) + z.H_R = T.ABC.ca : reflection (z.M) + L.steiner = T.ABC : steiner_line (z.M) + z.P = T.ABC.ab : projection (z.M) + z.Q = T.ABC.bc : projection (z.M) + z.R = T.ABC.ca : projection (z.M) + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan,add= .5 and .5](A,C A,B B,C) + \tkzDrawLines[red,thick](H_P,H_Q) + \tkzDrawCircles(O,A) + \tkzDrawPoints(A,B,C,M,H_P,H_Q,H_R,O,H,P,Q,R) + \tkzLabelPoints(B,C,H_P,H_Q,H_R,R) + \tkzLabelPoints[above](O,H) + \tkzLabelPoints[above right](P,Q,A,M) + \tkzDrawSegments(M,H_P M,H_Q M,H_R) + \tkzMarkRightAngles(B,P,M M,R,A M,Q,B) + \end{tikzpicture} +\end{Verbatim} + + +\directlua{ + z.B = point: new (0,0) + z.C = point: new (4,0) + z.A = point : new (1,4) + T.ABC = triangle: new(z.A,z.B,z.C) + C.ABC = T.ABC : circum_circle () + z.O = T.ABC.circumcenter + z.H = T.ABC.orthocenter + z.M = C.ABC : point (.65) + z.H_P = T.ABC.ab : reflection (z.M) + z.H_Q = T.ABC.bc : reflection (z.M) + z.H_R = T.ABC.ca : reflection (z.M) + L.steiner = T.ABC : steiner_line (z.M) + z.P = T.ABC.ab : projection (z.M) + z.Q = T.ABC.bc : projection (z.M) + z.R = T.ABC.ca : projection (z.M) +} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan,add= .5 and .5](A,C A,B B,C) + \tkzDrawLines[red,thick](H_P,H_Q) + \tkzDrawCircles(O,A) + \tkzDrawPoints(A,B,C,M,H_P,H_Q,H_R,O,H,P,Q,R) + \tkzLabelPoints(B,C,H_P,H_Q,H_R,R) + \tkzLabelPoints[above](O,H) + \tkzLabelPoints[above right](P,Q,A,M) + \tkzDrawSegments(M,H_P M,H_Q M,H_R) + \tkzMarkRightAngles(B,P,M M,R,A M,Q,B) + \end{tikzpicture} +\end{center} + + +% subsubsection method_imeth_triangle_steiner__line (end) + +\subsubsection{Method \Imeth{triangle}{simson\_line}} % (fold) +\label{ssub:method_imeth_triangle_simson__line} + +The Simson line is the line containing the feet $P$, $Q$, and $R$ of the perpendiculars from an arbitrary point $M$ on the circumcircle of a triangle to the sides or their extensions of the triangle. + + +[\href{https://mathworld.wolfram.com/SimsonLine.html}{Jackson, Frank and Weisstein, Eric W. "Simson Line." From MathWorld--A Wolfram Web Resource.}] + + +\begin{Verbatim} + \directlua{ + z.B = point: new (0,0) + z.C = point: new (4,0) + z.A = point : new (1,4) + T.ABC = triangle: new(z.A,z.B,z.C) + C.ABC = T.ABC : circum_circle () + z.O = T.ABC.circumcenter + z.H = T.ABC.orthocenter + z.M = C.ABC : point (.65) + z.H_P = T.ABC.ab : reflection (z.M) + z.H_Q = T.ABC.bc : reflection (z.M) + z.H_R = T.ABC.ca : reflection (z.M) + L.steiner = T.ABC : steiner_line (z.M) + z.P = T.ABC.ab : projection (z.M) + z.Q = T.ABC.bc : projection (z.M) + z.R = T.ABC.ca : projection (z.M) + L.simson = T.ABC : simson_line (z.M) + z.sa,z.sb = get_points(L.simson) + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan,add= .5 and .5](A,C A,B B,C) + \tkzDrawLines[red,thick](H_P,H_Q) + \tkzDrawLines[blue,thick](sa,sb) + \tkzDrawCircles(O,A) + \tkzDrawPoints(A,B,C,M,H_P,H_Q,H_R,O,H,P,Q,R) + \tkzLabelPoints(B,C,H_P,H_Q,H_R,R) + \tkzLabelPoints[above](O,H) + \tkzLabelPoints[above right](P,Q,A,M) + \tkzDrawSegments(M,H_P M,H_Q M,H_R) + \tkzMarkRightAngles(B,P,M M,R,A M,Q,B) + \end{tikzpicture} +\end{Verbatim} + + + \directlua{ + z.B = point: new (0,0) + z.C = point: new (4,0) + z.A = point : new (1,4) + T.ABC = triangle: new(z.A,z.B,z.C) + C.ABC = T.ABC : circum_circle () + z.O = T.ABC.circumcenter + z.H = T.ABC.orthocenter + z.M = C.ABC : point (.65) + z.H_P = T.ABC.ab : reflection (z.M) + z.H_Q = T.ABC.bc : reflection (z.M) + z.H_R = T.ABC.ca : reflection (z.M) + L.steiner = T.ABC : steiner_line (z.M) + z.P = T.ABC.ab : projection (z.M) + z.Q = T.ABC.bc : projection (z.M) + z.R = T.ABC.ca : projection (z.M) + L.simson = T.ABC : simson_line (z.M) + z.sa,z.sb = get_points(L.simson) + } + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawLines[cyan,add= .5 and .5](A,C A,B B,C) + \tkzDrawLines[red,thick](H_P,H_Q) + \tkzDrawLines[blue,thick](sa,sb) + \tkzDrawCircles(O,A) + \tkzDrawPoints(A,B,C,M,H_P,H_Q,H_R,O,H,P,Q,R) + \tkzLabelPoints(B,C,H_P,H_Q,H_R,R) + \tkzLabelPoints[above](O,H) + \tkzLabelPoints[above right](P,Q,A,M) + \tkzDrawSegments(M,H_P M,H_Q M,H_R) + \tkzMarkRightAngles(B,P,M M,R,A M,Q,B) + \end{tikzpicture} \end{center} + + +% subsubsection method_imeth_triangle_simson__line (end) + +\subsubsection{Method \Imeth{triangle}{lemoine\_axis}} % (fold) +\label{ssub:method_imeth_triangle_lemoine__line} + +Tangents to the circumcircle at the vertex are antiparallel to the opposite side. When extended, +the intersections of the tangents and the opposite sides intersect in collinear points. This line +is called the Lemoine Axis. + +The Lemoine axis of the triangle is the polar of the Lemoine point with respect to the circumscribed circle of the triangle. On this line also lie the three centers of the Apollonius circles, corresponding to the triplets (A, B, CA/CB), (B, C, AB/AC), (C, A, BC/BA). + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} + \directlua{ + z.A = point: new (0,0) + z.B = point: new (5,1) + z.C = point: new (1,2) + T = triangle: new(z.A,z.B,z.C) + z.L = T : lemoine_point () + z.O = T.circumcenter + L.L = T : lemoine_axis () + z.la, + z.lb = get_points (L.L) + L.B = T : brocard_axis () + z.ba, + z.bb = get_points (L.B)} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygons[cyan](A,B,C) + \tkzDrawLines[purple,add = 1 and 1](la,lb) + \tkzDrawLines[red,add = 1 and 1](ba,bb) + \tkzDrawCircle(O,A) + \tkzDrawPoints(A,B,L,O,la,lb) + \tkzLabelPoints(A,B,L,O) + \tkzLabelPoints[above](C) + \tkzLabelLine[sloped,above,purple](la,lb){Lemoine\_axis} + \tkzLabelLine[sloped,above,red](ba,bb){Brocard\_line} + \end{tikzpicture} +\end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + z.A = point: new (0,0) + z.B = point: new (5,1) + z.C = point: new (1,2) + T = triangle: new(z.A,z.B,z.C) + z.L = T : lemoine_point () + z.O = T.circumcenter + L.L = T : lemoine_axis () + z.la, + z.lb = get_points (L.L) + L.B = T : brocard_axis () + z.ba, + z.bb = get_points (L.B)} + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygons[cyan](A,B,C) + \tkzDrawLines[purple,add = 1 and 1](la,lb) + \tkzDrawLines[red,add = 1 and 1](ba,bb) + \tkzDrawCircle(O,A) + \tkzDrawPoints(A,B,L,O,la,lb) + \tkzLabelPoints(A,B,L,O) + \tkzLabelPoints[above](C) + \tkzLabelLine[sloped,above,purple](la,lb){Lemoine\_axis} + \tkzLabelLine[sloped,above,red](ba,bb){Brocard\_line} + \end{tikzpicture} + \end{center} \end{minipage} -% subsubsection method_c__ll__p (end) +% subsubsection method_imeth_triangle_lemoine__line (end) + +\subsubsection{Method \Imeth{triangle}{brocard\_axis}} % (fold) +\label{ssub:method_imeth_triangle_brocard__axis} + + +The Brocard axis is the line KO passing through the symmedian point K and circumcenter O of a triangle, where the segment OK is the Brocard diameter (Kimberling 1998, p. 150). The Brocard axis is perpendicular to the Lemoine axis and is the isogonal conjugate of the Kiepert hyperbola. +[\href{https://mathworld.wolfram.com/BrocardAxis.html}{Weisstein, Eric W. "Brocard Axis." From MathWorld--A Wolfram Web Resource.}] + +Refer to [\ref{ssub:method_imeth_triangle_lemoine__line}] +% subsubsection method_imeth_triangle_brocard__axis (end) + +\subsubsection{Method \Imeth{triangle}{fermat\_axis}} % (fold) +\label{ssub:method_imeth_triangle_fermat__axis} + +The Fermat axis is the line connecting the first and second Fermat points. + +\begin{minipage}{.5\textwidth} +\begin{Verbatim} + \directlua{ + z.A = point : new (1,2) + z.B = point : new (5,1) + z.C = point : new (2.5,3) + T.ABC = triangle : new (z.A,z.B,z.C) + z.F1 = T.ABC : first_fermat_point () + z.F2 = T.ABC : second_fermat_point () + L.F = T.ABC : fermat_axis () + z.a, z.b = get_points(L.F) + z.L = T.ABC : lemoine_point ()} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawLine(a,b) + \tkzDrawPoints(A,B,C) + \tkzDrawPoints(F1,F2,L) + \tkzLabelPoints[right](B,F1,F2,L) + \tkzLabelPoints[above](C) + \tkzLabelPoints(A) + \end{tikzpicture} +\end{Verbatim} +\end{minipage} + \begin{minipage}{.5\textwidth} + \directlua{ + z.A = point : new (1,2) + z.B = point : new (5,1) + z.C = point : new (2.5,3) + T.ABC = triangle : new (z.A,z.B,z.C) + z.F1 = T.ABC : first_fermat_point () + z.F2 = T.ABC : second_fermat_point () + L.F = T.ABC : fermat_axis () + z.a, z.b = get_points(L.F) + z.L = T.ABC : lemoine_point ()} + \begin{center} + \begin{tikzpicture}[scale =1.5] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawLine(a,b) + \tkzDrawPoints(A,B,C) + \tkzDrawPoints(F1,F2,L) + \tkzLabelPoints[right](B,F1,F2,L) + \tkzLabelPoints[above](C) + \tkzLabelPoints(A) + \end{tikzpicture} + \end{center} + \end{minipage} +% subsubsection method_imeth_triangle_fermat__axis (end) + +\subsubsection{Method \Imeth{triangle}{taylor\_circle}} % (fold) +\label{ssub:method_imeth_triangle_taylor__circle} + +The six projections of the feet of the heights of a triangle onto the adjacent sides are cocylic. + +\directlua{ + init_elements () + z.A = point : new (0,0) + z.B = point : new (6,0) + z.C = point : new (2.8,4) + T.ABC = triangle: new (z.A,z.B,z.C) + T.DEF = T.ABC : orthic () + z.D,z.E,z.F = get_points (T.DEF) + z.D_1, + z.D_2, + z.E_1, + z.E_2, + z.F_1, + z.F_2 = T.ABC :taylor_points () + C.taylor = T.ABC :taylor_circle () + z.w,z.t = get_points (C.taylor ) +} + \begin{center} +\begin{tikzpicture}[scale = 1.25] + \tkzGetNodes + \tkzDrawPolygons(A,B,C D,E,F) + \tkzDrawPoints(A,B,...,F,D_1,D_2,E_1,E_2,F_1,F_2) + \tkzLabelPoints(A,B,F,E_1,D_2) + \tkzLabelPoints[above left](F_2,E,C,D_1) + \tkzLabelPoints[above right](E_2,D,F_1) + \tkzDrawSegments[orange](D,D_1 D,D_2) + \tkzDrawSegments[purple](E,E_1 E,E_2) + \tkzDrawSegments[red](F,F_1 F,F_2) + \tkzDrawCircles[blue](w,t) +\end{tikzpicture} + \end{center} + + +\begin{Verbatim} +\directlua{ + init_elements () + z.A = point : new (0,0) + z.B = point : new (6,0) + z.C = point : new (2.8,4) + T.ABC = triangle: new (z.A,z.B,z.C) + T.DEF = T.ABC : orthic () + z.D,z.E,z.F = get_points (T.DEF) + z.D_1, + z.D_2, + z.E_1, + z.E_2, + z.F_1, + z.F_2 = T.ABC :taylor_points () + C.taylor = T.ABC :taylor_circle () + z.w,z.t = get_points (C.taylor ) +} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygons(A,B,C D,E,F) + \tkzDrawPoints(A,B,...,F,D_1,D_2,E_1,E_2,F_1,F_2) + \tkzLabelPoints(A,B,F,E_1,D_2) + \tkzLabelPoints[above left](F_2,E,C,D_1) + \tkzLabelPoints[above right](E_2,D,F_1) + \tkzDrawSegments[orange](D,D_1 D,D_2) + \tkzDrawSegments[purple](E,E_1 E,E_2) + \tkzDrawSegments[red](F,F_1 F,F_2) + \tkzDrawCircles[blue](w,t) +\end{tikzpicture} +\end{Verbatim} + + +% subsubsection method_imeth_triangle_taylor__circle (end) % % subsection methods_of_the_class_triangle (end) % % section class_triangle (end) \endinput diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex index f5e1e3a4305..ae9415b6ac6 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex @@ -142,8 +142,7 @@ $\tkzDN{\tkzUseLua{math.deg(w.slope)}}^\circ$ \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () -scale = .75 + init_elements () z.O = point: new (0,0) z.A = point: new (0,1) z.B = point: new (3,4) @@ -161,7 +160,7 @@ scale = .75 V.OY = V.AX : at (z.O) z.Y = V.OY.head } -\begin{tikzpicture}[gridded] +\begin{tikzpicture}[gridded,scale = .75] \tkzGetNodes \tkzDrawSegments[>=stealth,->,red](A,B A,C A,D A,N A,R A,X O,Y) \tkzLabelPoints(A,B,C,D,O,N,R,X,Y) @@ -171,7 +170,6 @@ scale = .75 \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = .75 z.O = point: new (0,0) z.A = point: new (0,1) z.B = point: new (3,4) @@ -189,7 +187,7 @@ scale = .75 V.OY = V.AX : at (z.O) z.Y = V.OY.head } -\begin{tikzpicture}[gridded] +\begin{tikzpicture}[gridded,scale = .75] \tkzGetNodes \tkzDrawSegments[>=stealth,->,red](A,B A,C A,D A,N A,R A,X O,Y) \tkzLabelPoints(A,B,C,D,O,N,R,X,Y) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex index 3b7e1db188c..e34d51b5016 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex @@ -17,7 +17,7 @@ A class is essentially a user-defined data type. It describes the contents of th An Object is an instance of a class. Each object contains attributes and methods. Attributes are information or object characteristics of the object stored in the data table (called fields), while methods define the object's behavior. \vspace{1em} - All objects in the package are typed. The object types currently defined and used are: \tkzNameObj{point}, \tkzNameObj{line}, \tkzNameObj{circle}, \tkzNameObj{triangle}, \tkzNameObj{ellipse}, \tkzNameObj{quadrilateral}, \tkzNameObj{square}, \tkzNameObj{rectangle}, \tkzNameObj{parallelogram} and \tkzNameObj{regular\_polygon}. + All objects in the package are typed. The object types currently defined and used are: \tkzNameObj{point}, \tkzNameObj{line}, \tkzNameObj{circle}, \tkzNameObj{triangle}, \tkzNameObj{conic}, \tkzNameObj{quadrilateral}, \tkzNameObj{square}, \tkzNameObj{rectangle}, \tkzNameObj{parallelogram} and \tkzNameObj{regular\_polygon}. These objects can be created directly using the method \Imeth{obj}{new} by giving points, with the exception of the \Iclass{class}{point} class which requires a pair of reals, and \Iclass{class}{regular\_polygon} which needs two points and an integer. diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex index bc7b8f223f4..95e7c274204 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex @@ -7,6 +7,8 @@ \label{sub:miscellanous} \begin{itemize} + \item As with tkz-euclide, the chosen unit is the centimeter, and by default, points are located in an orthonormal Cartesian coordinate system. + \item Numerical variable: the writing conventions for real numbers are the same as for \pkg{Lua}. \item Complex numbers: Similar to real numbers, but to define them, you must write |za = point (1,2)|. Mathematically, this corresponds to 1+2i, which you can find with |tex.print(tostring(za))|.(Refer \ref{sub:complex_numbers}) \item Boolean: you can write |bool = true| or |bool = false| then with Lua you can use the code :\\ @@ -58,7 +60,7 @@ Here are some different ways of naming a point: \subsection{Assigning a Name to Other Objects} % (fold) \label{sub:assigning_a_name_to_other_objects} -You have the flexibility to assign names to objects other than points. However, it's advisable to adhere to certain conventions to enhance code readability. For my examples, I've chosen the following conventions: first of all, I store the objects in tables: |L| for lines and segments, |C| for circles, |T| for triangles, |E| for ellipses. +You have the flexibility to assign names to objects other than points. However, it's advisable to adhere to certain conventions to enhance code readability. For my examples, I've chosen the following conventions: first of all, I store the objects in tables: |L| for lines and segments, |C| for circles, |T| for triangles, |EL| for ellipses, |PA| for parabolas and |HY| for hyperbolas. \begin{itemize} \item @@ -70,7 +72,7 @@ You have the flexibility to assign names to objects other than points. However, \item Triangles are stored in table named |T|. For example, I name |T.ABC| the triangle whose vertices are $A$, $B$ and $C$. However, names like |T.feuerbach| are also acceptable. -\item Ellipses are stored in table named |E|. +\item Parabolas are stored in table named |PA|, it's |HY| for hyperbolas ans |EL| for ellipses. For ellipses, I name |E.ABC| the ellipse with center $A$ through vertex $B$ and covertex $C$. \end{itemize} diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex index 4672d6982e8..e3216359fcc 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex @@ -12,18 +12,17 @@ Use of |north and east| functions linked to points, to transfer lengths, Refer t \begin{Verbatim} \directlua{% init_elements () - scale = .75 - z.A = point : new ( 0 , 0 ) - z.B = point : new ( 3 , 0 ) - L.AB = line : new ( z.A , z.B ) - T.ABC = L.AB : sublime () - z.C = T.ABC.pc - z.D = z.B: north (length(z.B,z.C)) - z.E = z.B: east (L.AB.length) - z.M = L.AB.mid - z.F = z.E : north (length(z.C,z.M)) + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 3 , 0 ) + L.AB = line : new ( z.A , z.B ) + T.ABC = L.AB : sublime () + z.C = T.ABC.pc + z.D = z.B: north (length(z.B,z.C)) + z.E = z.B: east (L.AB.length) + z.M = L.AB.mid + z.F = z.E : north (length(z.C,z.M)) } -\begin{tikzpicture}[gridded] +\begin{tikzpicture}[gridded,scale=.75] \tkzGetNodes \tkzDrawPolygons(A,B,C) \tkzDrawSegments[gray,dashed](B,D B,E E,F C,M) @@ -36,7 +35,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 3 , 0 ) L.AB = line : new ( z.A , z.B ) @@ -49,7 +47,7 @@ init_elements () } \begin{center} - \begin{tikzpicture}[gridded] + \begin{tikzpicture}[gridded,scale=.75] \tkzGetNodes \tkzDrawPolygons(A,B,C) \tkzDrawSegments[gray,dashed](B,D B,E E,F C,M) @@ -62,6 +60,77 @@ init_elements () \end{minipage} % subsection report_de_distance (end) +\subsection{Apollonius circles of a triangle} % (fold) +\label{sub:apollonius_circles_of_a_triangle} + +\emph{The three Apollonius circles of a (non-equilateral) triangle meet at exactly two points. +} + +Proof: + +Let $ABC$ be a non-equilateral triangle, say with $AB \not =AC$. By definition, we have directly that if a point belongs to two of the circles, then it belongs to the third. Indeed, if + +$\dfrac{MB}{MC} = \dfrac{AB}{AC}$ and $\dfrac{MA}{MB} = \dfrac{CA}{CB}$ then $\dfrac{MA}{MC} = \dfrac{BA}{BC}$ + +However, the circles are neither tangent nor disjoint if $AB \not =AC$ . + +The three Apollonius circles are coaxal. +\vspace{12pt} + + +\begin{Verbatim} + \directlua{% + z.A = point : new (0,0) + z.B = point : new (5,0) + z.C = point : new (3.5,2) + T = triangle : new (z.A,z.B,z.C) + z.O = T.circumcenter + C.AB = T.ab : apollonius(T.b/T.a) + z.w1,z.t1 = get_points(C.AB) + C.BC = T.bc : apollonius(T.c/T.b) + z.w2,z.t2 = get_points(C.BC) + C.AC = T.ca : apollonius(T.a/T.c) + z.w3,z.t3 = get_points(C.AC) + } + \begin{tikzpicture}[scale=.5] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircle[purple](O,A) + \tkzDrawCircles[cyan](w1,t1 w2,t2 w3,t3) + \tkzDrawLine(w1,w2) + \tkzDrawPoints(A,B,C,w1,w2,w3) + \tkzLabelPoints(A,B,w1,w2,w3) + \tkzLabelPoints[above](C) + \end{tikzpicture} +\end{Verbatim} + +\directlua{% +z.A = point : new (0,0) +z.B = point : new (5,0) +z.C = point : new (3.5,2) +T = triangle : new (z.A,z.B,z.C) +z.O = T.circumcenter +C.AB = T.ab : apollonius(T.b/T.a) +z.w1,z.t1 = get_points(C.AB) +C.BC = T.bc : apollonius(T.c/T.b) +z.w2,z.t2 = get_points(C.BC) +C.AC = T.ca : apollonius(T.a/T.c) +z.w3,z.t3 = get_points(C.AC) +} +\begin{center} + \begin{tikzpicture}[scale=.5] + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircle[purple](O,A) + \tkzDrawCircles[cyan](w1,t1 w2,t2 w3,t3) + \tkzDrawLine(w1,w2) + \tkzDrawPoints(A,B,C,w1,w2,w3) + \tkzLabelPoints(A,B,w1,w2,w3) + \tkzLabelPoints[above](C) + \end{tikzpicture} +\end{center} + +% subsection apollonius_circles_of_a_triangle (end) \subsection{D'Alembert 1} % (fold) \label{sub:d_alembert_1} @@ -70,36 +139,35 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - z.A = point : new (0,0) - z.a = point : new (4,0) - z.B = point : new (7,-1) - z.b = point : new (5.5,-1) - z.C = point : new (5,-4) - z.c = point : new (4.25,-4) - C.Aa = circle : new (z.A,z.a) - C.Bb = circle : new (z.B,z.b) - C.Cc = circle : new (z.C,z.c) - z.I = C.Aa : external_similitude (C.Bb) - z.J = C.Aa : external_similitude (C.Cc) - z.K = C.Cc : external_similitude (C.Bb) - z.Ip = C.Aa : internal_similitude (C.Bb) - z.Jp = C.Aa : internal_similitude (C.Cc) - z.Kp = C.Cc : internal_similitude (C.Bb) + z.A = point : new (0,0) + z.a = point : new (4,0) + z.B = point : new (7,-1) + z.b = point : new (5.5,-1) + z.C = point : new (5,-4) + z.c = point : new (4.25,-4) + C.Aa = circle : new (z.A,z.a) + C.Bb = circle : new (z.B,z.b) + C.Cc = circle : new (z.C,z.c) + z.I = C.Aa : external_similitude (C.Bb) + z.J = C.Aa : external_similitude (C.Cc) + z.K = C.Cc : external_similitude (C.Bb) + z.Ip = C.Aa : internal_similitude (C.Bb) + z.Jp = C.Aa : internal_similitude (C.Cc) + z.Kp = C.Cc : internal_similitude (C.Bb) } \begin{tikzpicture}[rotate=-60] - \tkzGetNodes - \tkzDrawCircles(A,a B,b C,c) - \tkzDrawPoints(A,B,C,I,J,K,I',J',K') - \tkzDrawSegments[new](I,K A,I A,J B,I B,K C,J C,K) - \tkzDrawSegments[purple](I,J' I',J I',K) - \tkzLabelPoints(I,J,K,I',J',K') + \tkzGetNodes + \tkzDrawCircles(A,a B,b C,c) + \tkzDrawPoints(A,B,C,I,J,K,I',J',K') + \tkzDrawSegments[new](I,K A,I A,J B,I B,K C,J C,K) + \tkzDrawSegments[purple](I,J' I',J I',K) + \tkzLabelPoints(I,J,K,I',J',K') \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale = .5 z.A = point : new (0,0) z.a = point : new (4,0) z.B = point : new (7,-1) @@ -118,7 +186,7 @@ z.Kp = C.Cc : internal_similitude (C.Bb) } \begin{center} - \begin{tikzpicture}[rotate=30] + \begin{tikzpicture}[rotate=30,scale=.5] \tkzGetNodes \tkzDrawCircles(A,a B,b C,c) \tkzDrawPoints(A,B,C,I,J,K,I',J',K') @@ -137,22 +205,21 @@ z.Kp = C.Cc : internal_similitude (C.Bb) \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \begin{Verbatim} \directlua{% -init_elements () - scale = .75 - z.A = point : new (0,0) - z.a = point : new (5,0) - z.B = point : new (7,-1) - z.b = point : new (3,-1) - z.C = point : new (5,-4) - z.c = point : new (2,-4) - C.Aa = circle : new (z.A,z.a) - C.Bb = circle : new (z.B,z.b) - C.Cc = circle : new (z.C,z.c) - z.i,z.j = get_points (C.Aa : radical_axis (C.Bb)) - z.k,z.l = get_points (C.Aa : radical_axis (C.Cc)) - z.m,z.n = get_points (C.Bb : radical_axis (C.Cc)) + init_elements () + z.A = point : new (0,0) + z.a = point : new (5,0) + z.B = point : new (7,-1) + z.b = point : new (3,-1) + z.C = point : new (5,-4) + z.c = point : new (2,-4) + C.Aa = circle : new (z.A,z.a) + C.Bb = circle : new (z.B,z.b) + C.Cc = circle : new (z.C,z.c) + z.i,z.j = get_points (C.Aa : radical_axis (C.Bb)) + z.k,z.l = get_points (C.Aa : radical_axis (C.Cc)) + z.m,z.n = get_points (C.Bb : radical_axis (C.Cc)) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawCircles(A,a B,b C,c) \tkzDrawLines[new](i,j k,l m,n) @@ -161,8 +228,7 @@ init_elements () \end{minipage} \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% -init_elements () - scale = .5 + init_elements () z.A = point : new (0,0) z.a = point : new (5,0) z.B = point : new (7,-1) @@ -178,7 +244,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawCircles(A,a B,b C,c) \tkzDrawLines[new](i,j k,l m,n) @@ -194,54 +260,53 @@ init_elements () \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - z.P = point : new (0,0) - z.Q = point : new (5,0) - z.I = point : new (3,2) - C.QI = circle : new (z.Q,z.I) - C.PE = C.QI : orthogonal_from (z.P) - z.E = C.PE.through - C.QE = circle : new (z.Q,z.E) - _,z.F = intersection (C.PE,C.QE) - z.A = C.PE: point (1/9) - L.AE = line : new (z.A,z.E) - _,z.C = intersection (L.AE,C.QE) - L.AF = line : new (z.A,z.F) - L.CQ = line : new (z.C,z.Q) - z.D = intersection (L.AF,L.CQ) + init_elements () + z.P = point : new (0,0) + z.Q = point : new (5,0) + z.I = point : new (3,2) + C.QI = circle : new (z.Q,z.I) + C.PE = C.QI : orthogonal_from (z.P) + z.E = C.PE.through + C.QE = circle : new (z.Q,z.E) + _,z.F = intersection (C.PE,C.QE) + z.A = C.PE: point (1/9) + L.AE = line : new (z.A,z.E) + _,z.C = intersection (L.AE,C.QE) + L.AF = line : new (z.A,z.F) + L.CQ = line : new (z.C,z.Q) + z.D = intersection (L.AF,L.CQ) } \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles(P,E Q,E) - \tkzDrawLines[add=0 and 1](P,Q) - \tkzDrawLines[add=0 and 2](A,E) - \tkzDrawSegments(P,E E,F F,C A,F C,D) - \tkzDrawPoints(P,Q,E,F,A,C,D) - \tkzLabelPoints(P,Q,E,F,A,C,D) + \tkzGetNodes + \tkzDrawCircles(P,E Q,E) + \tkzDrawLines[add=0 and 1](P,Q) + \tkzDrawLines[add=0 and 2](A,E) + \tkzDrawSegments(P,E E,F F,C A,F C,D) + \tkzDrawPoints(P,Q,E,F,A,C,D) + \tkzLabelPoints(P,Q,E,F,A,C,D) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% +\directlua{% init_elements () - scale =.5 - z.P = point : new (0,0) - z.Q = point : new (5,0) - z.I = point : new (3,2) - C.QI = circle : new (z.Q,z.I) - C.PE = C.QI : orthogonal_from (z.P) - z.E = C.PE.through - C.QE = circle : new (z.Q,z.E) - _,z.F = intersection (C.PE,C.QE) - z.A = C.PE: point (1/9) - L.AE = line : new (z.A,z.E) - _,z.C = intersection (L.AE,C.QE) - L.AF = line : new (z.A,z.F) - L.CQ = line : new (z.C,z.Q) - z.D = intersection (L.AF,L.CQ) - } +z.P = point : new (0,0) +z.Q = point : new (5,0) +z.I = point : new (3,2) +C.QI = circle : new (z.Q,z.I) +C.PE = C.QI : orthogonal_from (z.P) +z.E = C.PE.through +C.QE = circle : new (z.Q,z.E) +_,z.F = intersection (C.PE,C.QE) +z.A = C.PE: point (1/9) +L.AE = line : new (z.A,z.E) +_,z.C = intersection (L.AE,C.QE) +L.AF = line : new (z.A,z.F) +L.CQ = line : new (z.C,z.Q) +z.D = intersection (L.AF,L.CQ) +} \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawCircles(P,E Q,E) \tkzDrawLines[add=0 and 1](P,Q) @@ -257,41 +322,39 @@ init_elements () \subsection{Lemoine} % (fold) \label{sub:lemoine} -\begin{minipage}{.5\textwidth} +\begin{minipage}{.4\textwidth} \begin{Verbatim} \directlua{% -init_elements () - scale = 1.25 - z.A = point: new (1,0) - z.B = point: new (5,2) - z.C = point: new (1.2,2) - T = triangle: new(z.A,z.B,z.C) - z.O = T.circumcenter - C.OA = circle: new (z.O,z.A) - L.tA = C.OA: tangent_at (z.A) - L.tB = C.OA: tangent_at (z.B) - L.tC = C.OA: tangent_at (z.C) - z.P = intersection (L.tA,T.bc) - z.Q = intersection (L.tB,T.ca) - z.R = intersection (L.tC,T.ab) + init_elements () + z.A = point: new (1,0) + z.B = point: new (5,2) + z.C = point: new (1.2,2) + T = triangle: new(z.A,z.B,z.C) + z.O = T.circumcenter + C.OA = circle: new (z.O,z.A) + L.tA = C.OA: tangent_at (z.A) + L.tB = C.OA: tangent_at (z.B) + L.tC = C.OA: tangent_at (z.C) + z.P = intersection (L.tA,T.bc) + z.Q = intersection (L.tB,T.ca) + z.R = intersection (L.tC,T.ab) } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon[teal](A,B,C) - \tkzDrawCircle(O,A) - \tkzDrawPoints(A,B,C,P,Q,R) - \tkzLabelPoints(A,B,C,P,Q,R) - \tkzDrawLine[blue](Q,R) - \tkzDrawLines[red](A,P B,Q R,C) - \tkzDrawSegments(A,R C,P C,Q) +\begin{tikzpicture}[scale = 1.25] + \tkzGetNodes + \tkzDrawPolygon[teal](A,B,C) + \tkzDrawCircle(O,A) + \tkzDrawPoints(A,B,C,P,Q,R) + \tkzLabelPoints(A,B,C,P,Q,R) + \tkzDrawLine[blue](Q,R) + \tkzDrawLines[red](A,P B,Q R,C) + \tkzDrawSegments(A,R C,P C,Q) \end{tikzpicture} \end{Verbatim} \end{minipage} -\begin{minipage}{.5\textwidth} +\begin{minipage}{.6\textwidth} \directlua{% init_elements () -scale = .75 z.A = point: new (1,0) z.B = point: new (5,2) z.C = point: new (1.2,2) @@ -307,15 +370,15 @@ z.Q = intersection (L.tB,T.ca) } \begin{center} - \begin{tikzpicture}[rotate=90] + \begin{tikzpicture}[rotate=90,scale = .75] \tkzGetNodes \tkzDrawPolygon[teal](A,B,C) \tkzDrawCircle(O,A) \tkzDrawPoints(A,B,C,P,Q,R) - \tkzLabelPoints(A,B,C,P,Q,R) \tkzDrawLine[blue](Q,R) \tkzDrawLines[red](A,P B,Q R,C) \tkzDrawSegments(A,R C,P C,Q) + \tkzLabelPoints(A,B,C,P,Q,R) \end{tikzpicture} \end{center} @@ -329,32 +392,31 @@ z.Q = intersection (L.tB,T.ca) \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \begin{Verbatim} \directlua{% -init_elements () - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.C = point: new (1 , 5) - T = triangle: new (z.A,z.B,z.C) - z.I = T.incenter - L.AI = line: new (z.A,z.I) - z.D = intersection (L.AI,T.bc) - L.LLC = T.ab: ll_from (z.C) - z.E = intersection (L.AI,L.LLC) + init_elements () + z.A = point: new (0 , 0) + z.B = point: new (6 , 0) + z.C = point: new (1 , 5) + T = triangle: new (z.A,z.B,z.C) + z.I = T.incenter + L.AI = line: new (z.A,z.I) + z.D = intersection (L.AI,T.bc) + L.LLC= T.ab: ll_from (z.C) + z.E = intersection (L.AI,L.LLC) } \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon(A,B,C) - \tkzDrawLine[purple](C,E) - \tkzDrawSegment[purple](A,E) - \tkzFillAngles[purple!30,opacity=.4](B,A,C C,E,D) - \tkzMarkAngles[mark=|](B,A,D D,A,C C,E,D) - \tkzDrawPoints(A,...,E) - \tkzLabelPoints(A,B) - \tkzLabelPoints[above](C,D,E) - \tkzMarkSegments(A,C C,E) + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawLine[purple](C,E) + \tkzDrawSegment[purple](A,E) + \tkzFillAngles[purple!30,opacity=.4](B,A,C C,E,D) + \tkzMarkAngles[mark=|](B,A,D D,A,C C,E,D) + \tkzDrawPoints(A,...,E) + \tkzLabelPoints(A,B) + \tkzLabelPoints[above](C,D,E) + \tkzMarkSegments(A,C C,E) \end{tikzpicture} \end{Verbatim} \end{minipage} - \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () @@ -369,7 +431,7 @@ L.LLC = T.ab: ll_from (z.C) z.E = intersection (L.AI,L.LLC) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawLine[purple](C,E) @@ -377,12 +439,11 @@ z.E = intersection (L.AI,L.LLC) \tkzFillAngles[purple!30,opacity=.4](B,A,C C,E,D) \tkzMarkAngles[mark=|](B,A,D D,A,C C,E,D) \tkzDrawPoints(A,...,E) - \tkzLabelPoints(A,B) \tkzLabelPoints[above](C,D,E) \tkzMarkSegments(A,C C,E) + \tkzLabelPoints(A,B) \end{tikzpicture} \end{center} - \end{minipage} % subsection alternate (end) @@ -390,61 +451,64 @@ z.E = intersection (L.AI,L.LLC) \label{sub:common_tangent_orthogonality} For two circles to be orthogonal, it is necessary and sufficient for a secant passing through one of their common points to be seen from the other common point at a right angle. +\begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - z.A = point : new ( 0 , 0 ) - z.B = point : new ( 4 , 2 ) - L.AB = line : new ( z.A , z.B ) - z.a = point : new ( 1 , 2 ) - C.Aa = circle : new (z.A,z.a) - C.BC = C.Aa : orthogonal_from (z.B) - z.C,z.D = intersection (C.Aa,C.BC) - C.AC = circle : new (z.A,z.C) - z.T,z.Tp = C.AC : common_tangent (C.BC) - L.TTp = line : new (z.T,z.Tp) - z.M = C.AC : point (0.45) - L.MC =line : new (z.M,z.C) - z.Mp = intersection (L.MC, C.BC) - L.mm = L.TTp : ll_from (z.C) - _,z.M = intersection (L.mm, C.AC) - z.Mp = intersection (L.mm, C.BC) -} - + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , 2 ) + L.AB = line : new ( z.A , z.B ) + z.a = point : new ( 1 , 2 ) + C.Aa = circle : new (z.A,z.a) + C.BC = C.Aa : orthogonal_from (z.B) + z.C, + z.D = intersection (C.Aa,C.BC) + C.AC = circle : new (z.A,z.C) + z.T, + z.Tp = C.AC : common_tangent (C.BC) + L.TTp = line : new (z.T,z.Tp) + z.M = C.AC : point (0.45) + L.MC =line : new (z.M,z.C) + z.Mp = intersection (L.MC, C.BC) + L.mm = L.TTp : ll_from (z.C) + _,z.M = intersection (L.mm, C.AC) + z.Mp = intersection (L.mm, C.BC) +} \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles(A,C B,C) - \tkzDrawSegments(M,M' A,C B,C A,B) - \tkzDrawSegments[gray](D,M D,M' T,T') - \tkzDrawPoints(A,B,C,D,M,M',T,T') - \tkzLabelPoints(A,B,D,M) - \tkzLabelPoints[above](C,M',T,T') - \tkzMarkRightAngles(M',D,M A,C,B) + \tkzGetNodes + \tkzDrawCircles(A,C B,C) + \tkzDrawSegments(M,M' A,C B,C A,B) + \tkzDrawSegments[gray](D,M D,M' T,T') + \tkzDrawPoints(A,B,C,D,M,M',T,T') + \tkzLabelPoints(A,B,D,M) + \tkzLabelPoints[above](C,M',T,T') + \tkzMarkRightAngles(M',D,M A,C,B) \end{tikzpicture} \end{Verbatim} - -\directlua{% -init_elements () -z.A = point : new ( 0 , 0 ) -z.B = point : new ( 4 , 2 ) -L.AB = line : new ( z.A , z.B ) -z.a = point : new ( 1 , 2 ) -C.Aa = circle : new (z.A,z.a) -C.BC = C.Aa : orthogonal_from (z.B) -z.C,z.D = intersection (C.Aa,C.BC) -C.AC = circle : new (z.A,z.C) -z.T,z.Tp = C.AC : common_tangent (C.BC) -L.TTp = line : new (z.T,z.Tp) -z.M = C.AC : point (0.45) -L.MC =line : new (z.M,z.C) -z.Mp = intersection (L.MC, C.BC) -L.mm = L.TTp : ll_from (z.C) -_,z.M = intersection (L.mm, C.AC) -z.Mp = intersection (L.mm, C.BC) -} - -\begin{center} - \begin{tikzpicture} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{% + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , 2 ) + L.AB = line : new ( z.A , z.B ) + z.a = point : new ( 1 , 2 ) + C.Aa = circle : new (z.A,z.a) + C.BC = C.Aa : orthogonal_from (z.B) + z.C,z.D = intersection (C.Aa,C.BC) + C.AC = circle : new (z.A,z.C) + z.T,z.Tp = C.AC : common_tangent (C.BC) + L.TTp = line : new (z.T,z.Tp) + z.M = C.AC : point (0.45) + L.MC =line : new (z.M,z.C) + z.Mp = intersection (L.MC, C.BC) + L.mm = L.TTp : ll_from (z.C) + _,z.M = intersection (L.mm, C.AC) + z.Mp = intersection (L.mm, C.BC) + } + + \begin{center} + \begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawCircles(A,C B,C) \tkzDrawSegments(M,M' A,C B,C A,B) @@ -454,7 +518,9 @@ z.Mp = intersection (L.mm, C.BC) \tkzLabelPoints[above](C,M',T,T') \tkzMarkRightAngles(M',D,M A,C,B) \end{tikzpicture} -\end{center} + \end{center} +\end{minipage} + % subsection common_tangent_orthogonality (end) @@ -463,26 +529,24 @@ z.Mp = intersection (L.mm, C.BC) \directlua{% init_elements () -scale=.75 - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.M = point: new (5 , 3) - T.MAB = triangle : new (z.M,z.A,z.B) - L.bis = T.MAB : bisector () - z.C = L.bis.pb - L.bisext = T.MAB : bisector_ext () - z.D = intersection (T.MAB.bc, L.bisext) - L.CD = line: new (z.C,z.D) - z.O = L.CD.mid - L.AM = T.MAB.ab - z.E = z.M : symmetry (z.A) +z.A = point: new (0 , 0) +z.B = point: new (6 , 0) +z.M = point: new (5 , 3) +T.MAB = triangle : new (z.M,z.A,z.B) +L.bis = T.MAB : bisector () +z.C = L.bis.pb +L.bisext = T.MAB : bisector_ext () +z.D = intersection (T.MAB.bc, L.bisext) +L.CD = line: new (z.C,z.D) +z.O = L.CD.mid +L.AM = T.MAB.ab +z.E = z.M : symmetry (z.A) } \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% init_elements () -scale=.75 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.M = point: new (5 , 3) @@ -500,29 +564,25 @@ scale=.75 \end{minipage} \begin{minipage}{.5\textwidth} - \begin{center} - \begin{tikzpicture}[scale=.8] - \tkzGetNodes - \tkzDrawSegment[add=0 and 1](A,M) - \tkzDrawSegments[purple](M,C M,D) - \tkzDrawCircle[purple](O,C) - \tkzDrawSegments(A,B B,M D,B) - \tkzDrawPoints(A,B,M,C,D) - \tkzLabelPoints[below right](A,B,C,D) - \tkzLabelPoints[above](M) - \tkzFillAngles[opacity=.4,cyan!20](A,M,B) - \tkzFillAngles[opacity=.4,purple!20](B,M,E) - \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D) - \tkzMarkAngles[mark=|](A,M,C C,M,B) - \tkzMarkAngles[mark=||](B,M,D D,M,E) - \end{tikzpicture} - \end{center} - - +\begin{center} + \begin{tikzpicture}[scale=.5] + \tkzGetNodes + \tkzDrawSegment[add=0 and 1](A,M) + \tkzDrawSegments[purple](M,C M,D) + \tkzDrawCircle[purple](O,C) + \tkzDrawSegments(A,B B,M D,B) + \tkzDrawPoints(A,B,M,C,D) + \tkzLabelPoints[below right](A,B,C,D) + \tkzLabelPoints[above](M) + \tkzFillAngles[opacity=.4,cyan!20](A,M,B) + \tkzFillAngles[opacity=.4,purple!20](B,M,E) + \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D) + \tkzMarkAngles[mark=|](A,M,C C,M,B) + \tkzMarkAngles[mark=||](B,M,D D,M,E) + \end{tikzpicture} +\end{center} \end{minipage} - - \begin{Verbatim} \begin{tikzpicture} \tkzGetNodes @@ -554,25 +614,24 @@ Remark : The circle can be obtained with: \begin{Verbatim} \directlua{% init_elements () - scale =.75 - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.M = point: new (5 , 4) - T.AMB = triangle: new (z.A,z.M,z.B) - L.AB = T.AMB.ca - z.I = T.AMB.incenter - L.MI = line: new (z.M,z.I) - z.C = intersection (L.AB , L.MI) - L.MJ = L.MI: ortho_from (z.M) - z.D = intersection (L.AB , L.MJ) - L.CD = line: new (z.C,z.D) - z.O = L.CD.mid - z.G = T.AMB.circumcenter - C.GA = circle: new (z.G,z.A) - C.OC = circle: new (z.O,z.C) - _,z.N = intersection (C.GA , C.OC) + z.A = point: new (0 , 0) + z.B = point: new (6 , 0) + z.M = point: new (5 , 4) + T.AMB = triangle: new (z.A,z.M,z.B) + L.AB = T.AMB.ca + z.I = T.AMB.incenter + L.MI = line: new (z.M,z.I) + z.C = intersection (L.AB , L.MI) + L.MJ = L.MI: ortho_from (z.M) + z.D = intersection (L.AB , L.MJ) + L.CD = line: new (z.C,z.D) + z.O = L.CD.mid + z.G = T.AMB.circumcenter + C.GA = circle: new (z.G,z.A) + C.OC = circle: new (z.O,z.C) + _,z.N = intersection (C.GA , C.OC) } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawPolygon(A,B,M) \tkzDrawCircles[purple](O,C G,A) @@ -589,7 +648,6 @@ init_elements () \directlua{% init_elements () - scale =.75 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.M = point: new (5 , 4) @@ -610,7 +668,7 @@ init_elements () \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale =.75] \tkzGetNodes \tkzDrawPolygon(A,B,M) \tkzDrawCircles[purple](O,C G,A) @@ -728,21 +786,20 @@ z.O3 = L.Bpt.mid Same result using the function |T.ABC.ab : apollonius (k) | \begin{Verbatim} - \directlua{% -init_elements () - scale = .75 - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.C = point: new (4.5 , 1) - T.ABC = triangle : new (z.A,z.B,z.C) - z.O = T.ABC.circumcenter - C.AB = T.ABC.ab : apollonius (length(z.C,z.A)/length(z.C,z.B)) - z.w1,z.t1 = get_points ( C.AB ) - C.AC = T.ABC.ca : apollonius (length(z.B,z.C)/length(z.B,z.A)) - z.w2,z.t2 = get_points ( C.AC ) - C.BC = T.ABC.bc : apollonius (length(z.A,z.B)/length(z.A,z.C)) - z.w3,z.t3 = get_points ( C.BC ) - } +\directlua{% + init_elements () +z.A = point: new (0 , 0) +z.B = point: new (6 , 0) +z.C = point: new (4.5 , 1) +T.ABC = triangle : new (z.A,z.B,z.C) +z.O = T.ABC.circumcenter +C.AB = T.ABC.ab : apollonius (length(z.C,z.A)/length(z.C,z.B)) +z.w1,z.t1 = get_points ( C.AB ) +C.AC = T.ABC.ca : apollonius (length(z.B,z.C)/length(z.B,z.A)) +z.w2,z.t2 = get_points ( C.AC ) +C.BC = T.ABC.bc : apollonius (length(z.A,z.B)/length(z.A,z.C)) +z.w3,z.t3 = get_points ( C.BC ) +} \end{Verbatim} % subsection apollonius_circles (end) @@ -754,18 +811,18 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - z.O_1 = point: new (0, 0) - z.O_2 = point: new (0, 1) - z.A = point: new (0, 3) - z.F = point: polar (3, math.pi/6) - L = line: new (z.F,z.O_1) - C = circle: new (z.O_1,z.A) - z.E = intersection (L,C) - T = triangle: new (z.F,z.E,z.O_2) - z.x = T: parallelogram () - L = line: new (z.x,z.O_2) - C = circle: new (z.O_2,z.A) - z.C,z.D = intersection (L ,C) +z.O_1 = point: new (0, 0) +z.O_2 = point: new (0, 1) +z.A = point: new (0, 3) +z.F = point: polar (3, math.pi/6) +L = line: new (z.F,z.O_1) +C = circle: new (z.O_1,z.A) +z.E = intersection (L,C) +T = triangle: new (z.F,z.E,z.O_2) +z.x = T: parallelogram () +L = line: new (z.x,z.O_2) +C = circle: new (z.O_2,z.A) +z.C,z.D = intersection (L ,C) } \begin{tikzpicture} \tkzGetNodes @@ -779,19 +836,19 @@ init_elements () \end{minipage} \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% -init_elements () - z.O_1 = point: new (0, 0) - z.O_2 = point: new (0, 1) - z.A = point: new (0, 3) - z.F = point: polar (3, math.pi/6) - L = line: new (z.F,z.O_1) - C = circle: new (z.O_1,z.A) - z.E = intersection (L,C) - T = triangle: new (z.F,z.E,z.O_2) - z.x = T: parallelogram () - L = line: new (z.x,z.O_2) - C = circle: new (z.O_2,z.A) - z.C,z.D = intersection (L ,C) + init_elements () + z.O_1 = point: new (0, 0) + z.O_2 = point: new (0, 1) + z.A = point: new (0, 3) + z.F = point: polar (3, math.pi/6) + L = line: new (z.F,z.O_1) + C = circle: new (z.O_1,z.A) + z.E = intersection (L,C) + T = triangle: new (z.F,z.E,z.O_2) + z.x = T: parallelogram () + L = line: new (z.x,z.O_2) + C = circle: new (z.O_2,z.A) + z.C,z.D = intersection (L ,C) } \begin{center} @@ -812,7 +869,7 @@ init_elements () \label{sub:bankoff_circle} \begin{Verbatim} \directlua{% -init_elements () + init_elements () z.A = point: new (0 , 0) z.B = point: new (10 , 0) L.AB = line : new (z.A,z.B) @@ -880,7 +937,6 @@ init_elements () \directlua{% init_elements () - scale = 1.25 z.A = point: new (0 , 0) z.B = point: new (10 , 0) L.AB = line : new (z.A,z.B) @@ -921,7 +977,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawSemiCircles[teal](O_0,B) \tkzDrawSemiCircles[teal,fill=teal!20,opacity=.5](O_1,C O_2,B) @@ -953,67 +1009,67 @@ $L$ is the symmedian point or lemoine point. $\dfrac{CL}{CLc} = \dfrac{a^2+b^2}{ \vspace{6pt} \begin{minipage}{.5\textwidth} - \begin{Verbatim} - \directlua{% -init_elements () - scale = 1.5 - z.A = point : new (1,2) - z.B = point : new (5,1) - z.C = point : new (3,5) - T.ABC = triangle : new (z.A,z.B,z.C) - T.SY = T.ABC : symmedian () - z.La,z.Lb,z.Lc = get_points (T.SY) - k = (T.ABC.a*T.ABC.a + - T.ABC.b*T.ABC.b)/(T.ABC.a*T.ABC.a + - T.ABC.b*T.ABC.b+T.ABC.c*T.ABC.c) - L.SY = line : new (z.C,z.Lc) - z.L = L.SY : point (k) - } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,C) - \tkzDrawPoints(A,B,C,L,Lc) - \tkzDrawPoints[red](L) - \tkzDrawSegments[cyan](C,Lc) - \tkzLabelPoints(A,B,Lc) - \tkzLabelPoints[above](C) - \tkzLabelPoints[left](L) - \tkzLabelSegment(B,C){$a$} - \tkzLabelSegment(A,C){$b$} - \tkzLabelSegment(A,B){$ca$} - \end{tikzpicture} - \end{Verbatim} +\begin{Verbatim} +\directlua{% + init_elements () + z.A = point : new (1,2) + z.B = point : new (5,1) + z.C = point : new (3,5) + T.ABC = triangle : new (z.A,z.B,z.C) + T.SY = T.ABC : symmedian () + z.La, + z.Lb, + z.Lc = get_points (T.SY) + k = (T.ABC.a*T.ABC.a + + T.ABC.b*T.ABC.b)/(T.ABC.a*T.ABC.a + + T.ABC.b*T.ABC.b+T.ABC.c*T.ABC.c) + L.SY = line : new (z.C,z.Lc) + z.L = L.SY : point (k) +} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygons(A,B,C) + \tkzDrawPoints(A,B,C,L,Lc) + \tkzDrawPoints[red](L) + \tkzDrawSegments[cyan](C,Lc) + \tkzLabelPoints(A,B,Lc) + \tkzLabelPoints[above](C) + \tkzLabelPoints[left](L) + \tkzLabelSegment(B,C){$a$} + \tkzLabelSegment(A,C){$b$} + \tkzLabelSegment(A,B){$ca$} +\end{tikzpicture} +\end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \directlua{% -init_elements () - scale = 1.5 - z.A = point : new (1,2) - z.B = point : new (5,1) - z.C = point : new (3,5) - T.ABC = triangle : new (z.A,z.B,z.C) - T.SY = T.ABC : symmedian () - z.La,z.Lb,z.Lc = get_points (T.SY) - k = (T.ABC.a*T.ABC.a + - T.ABC.b*T.ABC.b)/(T.ABC.a*T.ABC.a + - T.ABC.b*T.ABC.b+T.ABC.c*T.ABC.c) - L.SY = line : new (z.C,z.Lc) - z.L = L.SY : point (k) - } - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygons(A,B,C) - \tkzDrawPoints(A,B,C,L,Lc) - \tkzDrawPoints[red](L) - \tkzDrawSegments[cyan](C,Lc) - \tkzLabelPoints(A,B,Lc) - \tkzLabelPoints[above](C) - \tkzLabelPoints[left](L) - \tkzLabelSegment(B,C){$a$} - \tkzLabelSegment(A,C){$b$} - \tkzLabelSegment(A,B){$ca$} - \end{tikzpicture} +\directlua{% + init_elements () + z.A = point : new (1,2) + z.B = point : new (5,1) + z.C = point : new (3,5) + T.ABC = triangle : new (z.A,z.B,z.C) + T.SY = T.ABC : symmedian () + z.La,z.Lb,z.Lc = get_points (T.SY) + k = (T.ABC.a*T.ABC.a + + T.ABC.b*T.ABC.b)/(T.ABC.a*T.ABC.a + + T.ABC.b*T.ABC.b+T.ABC.c*T.ABC.c) + L.SY = line : new (z.C,z.Lc) + z.L = L.SY : point (k) +} +\begin{center} + \begin{tikzpicture}[scale = 1.5] + \tkzGetNodes + \tkzDrawPolygons(A,B,C) + \tkzDrawPoints(A,B,C,L,Lc) + \tkzDrawPoints[red](L) + \tkzDrawSegments[cyan](C,Lc) + \tkzLabelPoints(A,B,Lc) + \tkzLabelPoints[above](C) + \tkzLabelPoints[left](L) + \tkzLabelSegment(B,C){$a$} + \tkzLabelSegment(A,C){$b$} + \tkzLabelSegment(A,B){$ca$} + \end{tikzpicture} \end{center} \end{minipage} @@ -1025,19 +1081,20 @@ init_elements () \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - scale = 1.5 - z.a = point: new (1,2) - z.b = point: new (5,1) - z.c = point: new (3,5) - T = triangle: new (z.a,z.b,z.c) - z.i = T.orthocenter + init_elements () + z.a = point: new (1,2) + z.b = point: new (5,1) + z.c = point: new (3,5) + T = triangle: new (z.a,z.b,z.c) + z.i = T.orthocenter T.cevian = T : cevian (z.i) - z.ta,z.tb,z.tc = get_points (T.cevian) + z.ta, + z.tb, + z.tc = get_points (T.cevian) C.cev = T : cevian_circle (z.i) - z.w = C.cev.center + z.w = C.cev.center } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 1.5] \tkzGetNodes \tkzDrawPolygons(a,b,c ta,tb,tc) \tkzDrawSegments(a,ta b,tb c,tc) @@ -1050,7 +1107,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = 1.5 z.a = point: new (1,2) z.b = point: new (5,1) z.c = point: new (3,5) @@ -1062,7 +1118,7 @@ C.cev = T : cevian_circle (z.i) z.w = C.cev.center } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 1.5] \tkzGetNodes \tkzDrawPolygons(a,b,c ta,tb,tc) \tkzDrawSegments(a,ta b,tb c,tc) @@ -1080,20 +1136,23 @@ z.w = C.cev.center \begin{Verbatim} \directlua{% -init_elements () - scale = 0.7 - z.A = point: new (0,0) - z.B = point: new (6,0) - z.C = point: new (.8,4) - T = triangle: new ( z.A, z.B, z.C) - z.K = T.centroid - z.J_a,z.J_b,z.J_c = get_points (T: excentral()) - z.T_a,z.T_b,z.T_c = get_points (T: extouch()) - la = line: new ( z.A, z.T_a) - lb = line: new ( z.B, z.T_b) - z.G = intersection (la,lb) + init_elements () + z.A = point: new (0,0) + z.B = point: new (6,0) + z.C = point: new (.8,4) + T = triangle: new ( z.A, z.B, z.C) + z.K = T.centroid + z.J_a, + z.J_b, + z.J_c = get_points (T: excentral()) + z.T_a, + z.T_b, + z.T_c = get_points (T: extouch()) + la = line: new ( z.A, z.T_a) + lb = line: new ( z.B, z.T_b) + z.G = intersection (la,lb) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 0.7] \tkzGetNodes \tkzDrawPoints[new](J_a,J_b,J_c) \tkzClipBB @@ -1117,7 +1176,6 @@ init_elements () \directlua{% init_elements () - scale=0.7 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (.8,4) @@ -1132,7 +1190,7 @@ init_elements () \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale=0.7] \tkzGetNodes \tkzDrawPoints[new](J_a,J_b,J_c) \tkzClipBB @@ -1200,41 +1258,43 @@ z.L = intersection (L.AR,L.BG) \directlua{% init_elements () -z.A = point: new (0 , 0) -z.B = point: new (8 , 0) -L.AB = line: new (z.A,z.B) -z.C = L.AB: gold_ratio () -L.AC = line: new (z.A,z.C) -z.O_1 = L.AC.mid -_,_,z.G,z.H = get_points(L.AB: square ()) -_,_,z.E,z.F = get_points(L.AC: square ()) -L.CB = line: new (z.C,z.B) -z.O_2 = L.CB.mid -z.O_0 = L.AB.mid -L.BE = line: new (z.B,z.E) -L.GH = line: new (z.G,z.H) -z.K = intersection (L.BE,L.GH) -C0 = circle: new (z.O_0,z.B) -z.R,_ = intersection (L.BE,C0) -C2 = circle: new (z.O_2,z.B) -z.S,_ = intersection (L.BE,C2) -L.AR = line: new (z.A,z.R) -C1 = circle: new (z.O_1,z.C) -_,z.T = intersection (L.AR,C1) -L.BG = line: new (z.B,z.G) -z.L = intersection (L.AR,L.BG) + z.A = point: new (0 , 0) + z.B = point: new (8 , 0) + L.AB = line: new (z.A,z.B) + z.C = L.AB: gold_ratio () + L.AC = line: new (z.A,z.C) + z.O_1 = L.AC.mid + _,_,z.G, + z.H = get_points(L.AB: square ()) + _,_,z.E, + z.F = get_points(L.AC: square ()) + L.CB = line: new (z.C,z.B) + z.O_2 = L.CB.mid + z.O_0 = L.AB.mid + L.BE = line: new (z.B,z.E) + L.GH = line: new (z.G,z.H) + z.K = intersection (L.BE,L.GH) + C0 = circle: new (z.O_0,z.B) + z.R,_ = intersection (L.BE,C0) + C2 = circle: new (z.O_2,z.B) + z.S,_ = intersection (L.BE,C2) + L.AR = line: new (z.A,z.R) + C1 = circle: new (z.O_1,z.C) + _,z.T = intersection (L.AR,C1) + L.BG = line: new (z.B,z.G) + z.L = intersection (L.AR,L.BG) } \begin{center} - \begin{tikzpicture} +\begin{tikzpicture} \tkzGetNodes \tkzDrawPolygons(A,C,E,F A,B,G,H) \tkzDrawCircles(O_1,C O_2,B O_0,B) \tkzDrawSegments(H,C B,K A,L) \tkzDrawPoints(A,B,C,K,E,F,G,H,O_0,O_1,O_2,R,S,T,L) \tkzLabelPoints(A,B,C,K,E,F,G,H,O_0,O_1,O_2,R,S,T,L) - \end{tikzpicture} +\end{tikzpicture} \end{center} @@ -1243,80 +1303,69 @@ z.L = intersection (L.AR,L.BG) \subsection{Director circle} % (fold) \label{sub:director_circle} % modif C: point (0.25) instead of 2 -\begin{minipage}[t]{.5\textwidth}\vspace{0pt}% + \begin{Verbatim} \directlua{% -init_elements () - scale = .5 - z.O = point: new (0 , 0) - z.F1 = point: new (4 , 0) - z.F2 = point: new (-4 , 0) - z.H = point: new (4*math.sqrt(2) , 0) - E = ellipse: foci (z.F2,z.F1,z.H) - a,b = E.Rx, E.Ry - z.A = E.covertex - T = triangle: new (z.H,z.O,z.A) - z.P = T: parallelogram () - C = circle: new (z.O,z.P) - z.L = C: point (0.25) - L.J,L.K = E: tangent_from (z.L) - z.J = L.J.pb - z.K = L.K.pb + z.O = point: new (0 , 0) + z.F1 = point: new (4 , 0) + z.F2 = point: new (-4 , 0) + z.H = point: new (4*math.sqrt(2) , 0) + local a = length(z.O,z.H) + E = conic : new (EL_bifocal(z.F2,z.F1,a)) + curve = E : points(0,1,50) + z.A = E.covertex + T.HOA = triangle: new (z.H,z.O,z.A) + z.P = T.HOA: parallelogram () + C.OP = circle: new (z.O,z.P) + z.L = C.OP: point (0.25) + T.LJ ,T.LK = E: tangent_from (z.L) + z.J = T.LJ.pb + z.K = T.LK.pb } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawPoints(F1,F2,O) - \tkzDrawCircles[teal](O,P) - \tkzDrawPolygon(H,O,A,P) - \tkzDrawEllipse[red](O,\tkzUseLua{a},\tkzUseLua{b},0) - \tkzDrawSegments[orange](O,P O,L L,J L,K) - \tkzDrawPoints(F1,F2,O,H,A,P,L,J,K) - \tkzLabelPoints(F1,F2,O,H,A,P,L,J,K) - \tkzLabelPoints[above](L) - \tkzMarkRightAngles(A,P,H J,L,K) + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPoints(F1,F2,O) + \tkzDrawCircles[teal](O,P) + \tkzDrawPolygon(H,O,A,P) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawSegments[orange](O,P O,L L,J L,K) + \tkzDrawPoints(F1,F2,O,H,A,P,L,J,K) + \tkzLabelPoints(F1,F2,O,H,A,P,L,J,K) \end{tikzpicture} \end{Verbatim} -\end{minipage} -\begin{minipage}[t]{.5\textwidth}\vspace{0pt}% + \directlua{% -init_elements () -scale = .5 -z.O = point: new (0 , 0) -z.F1 = point: new (4 , 0) -z.F2 = point: new (-4 , 0) -z.H = point: new (4*math.sqrt(2) , 0) -E = ellipse: foci (z.F2,z.F1,z.H) -a,b = E.Rx, E.Ry -z.A = E.covertex -T = triangle: new (z.H,z.O,z.A) -z.P = T: parallelogram () -C = circle: new (z.O,z.P) -z.L = C: point (0.25) -L.J,L.K = E: tangent_from (z.L) -z.J = L.J.pb -z.K = L.K.pb + z.O = point: new (0 , 0) + z.F1 = point: new (4 , 0) + z.F2 = point: new (-4 , 0) + z.H = point: new (4*math.sqrt(2) , 0) + local a = length(z.O,z.H) + E = conic : new (EL_bifocal(z.F2,z.F1,a)) + curve = E : points(0,1,50) + z.A = E.covertex + T.HOA = triangle: new (z.H,z.O,z.A) + z.P = T.HOA: parallelogram () + C.OP = circle: new (z.O,z.P) + z.L = C.OP: point (0.25) + T.LJ ,T.LK = E: tangent_from (z.L) + z.J = T.LJ.pb + z.K = T.LK.pb } - - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPoints(F1,F2,O) - \tkzDrawCircles[teal](O,P) - \tkzDrawPolygon(H,O,A,P) - \tkzDrawEllipse[red](O,\tkzUseLua{a},\tkzUseLua{b},0) - \tkzDrawSegments[orange](O,P O,L L,J L,K) - \tkzDrawPoints(F1,F2,O,H,A,P,L,J,K) - \tkzLabelPoints(F1,F2,O,H,A,P,L,J,K) - \tkzLabelPoints[above](L) - \tkzMarkRightAngles(A,P,H J,L,K) - \end{tikzpicture} + \begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawPoints(F1,F2,O) + \tkzDrawCircles[teal](O,P) + \tkzDrawPolygon(H,O,A,P) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawSegments[orange](O,P O,L L,J L,K) + \tkzDrawPoints(F1,F2,O,H,A,P,L,J,K) + \tkzLabelPoints(F1,F2,O,H,A,P,L,J,K) +\end{tikzpicture} \end{center} -\end{minipage} % subsection director_circle (end) - \subsection{Gold division} % (fold) \label{sub:gold_division} @@ -1355,7 +1404,6 @@ z.O = C.AB: antipode (z.B) \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .75 z.A = point: new (0,0) z.B = point: new (2.5,0) L.AB = line: new (z.A,z.B) @@ -1373,9 +1421,8 @@ z.O = C.AB: antipode (z.B) z.O = C.AB: antipode (z.B) } - \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawArc[delta=5](O,B)(G) \tkzDrawCircles(A,B B,A) @@ -1388,8 +1435,6 @@ z.O = C.AB: antipode (z.B) \end{center} \end{minipage} - - % subsection gold_division (end) \subsection{Ellipse} % (fold) @@ -1404,43 +1449,44 @@ init_elements () z.b = L.CA.north_pa L = line : new (z.C,z.b) z.B = L : point (0.5) - E = ellipse: new (z.C,z.A,z.B) - a = E.Rx - b = E.Ry - slope = math.deg(E.slope) + E = conic : new (EL_points (z.C,z.A,z.B)) + curve_E = E : points(0,1,50) + z.F = E.Fa } + \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles[teal](C,A) - \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope}) - \tkzDrawPoints(C,A,B,b) - \tkzLabelPoints(C,A,B) +\tkzGetNodes +\tkzDrawCircles[teal](C,A) +\tkzDrawCoordinates[smooth,red,thick](curve_E) +\tkzLabelPoints(C,A) +\tkzLabelPoints[left](F) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} \directlua{% init_elements () -z.C = point: new (3 , 2) -z.A = point: new (5 , 1) -L.CA = line : new (z.C,z.A) -z.b = L.CA.north_pa -L = line : new (z.C,z.b) -z.B = L : point (0.5) -E = ellipse: new (z.C,z.A,z.B) -a = E.Rx -b = E.Ry -slope = math.deg(E.slope) + z.C = point: new (3 , 2) + z.A = point: new (5 , 1) + L.CA = line : new (z.C,z.A) + z.b = L.CA.north_pa + L = line : new (z.C,z.b) + z.B = L : point (0.5) + E = conic : new (EL_points(z.C,z.A,z.B)) + curve_E = E : points(0,1,50) + z.F = E.Fa } + \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles[teal](C,A) - \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope}) - \tkzDrawPoints(C,A,B,b) - \tkzLabelPoints(C,A,B) - \end{tikzpicture} +\begin{tikzpicture} +\tkzGetNodes +\tkzDrawCircles[teal](C,A) +\tkzDrawCoordinates[smooth,red,thick](curve_E) +\tkzDrawPoints(C,A,F) +\tkzLabelPoints(C,A) +\tkzLabelPoints[left](F) +\end{tikzpicture} \end{center} @@ -1449,47 +1495,56 @@ slope = math.deg(E.slope) \subsection{Ellipse with radii} % (fold) \label{sub:ellipse_with_radii} + +In this example, $K$ is the projection of the focus $F$ on the directrix. + \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% init_elements () -scale=.5 -z.C = point: new (0 , 4) -b = value(math.sqrt(8)) -a = value(math.sqrt(32)) -ang = math.deg(math.pi/4) -E = ellipse: radii (z.C,a,b,math.pi/4) -z.V = E : point (0) -z.CoV = E : point (math.pi/2) +z.C = point: new (0 , 4) +local b = math.sqrt(8) +local a = math.sqrt(32) +local c = math.sqrt(a^2 - b^2) +local e = c / a +z.F = z.C:rotation(math.pi/4,z.C+point(c 0)) +z.K = z.C:rotation(math.pi/4,z.C+point(a^2/c,0)) +z.Kp = (z.K-z.C) : orthogonal(1):at (z.K) +L.dir= line : new (z.K,z.Kp) +E = conic : new (z.F,L.dir,e) +curve= E : points (0,1,50) } -\begin{tikzpicture}[gridded] +\begin{tikzpicture}[scale=.5] \tkzGetNodes -\tkzDrawEllipse[blue](C,\tkzUseLua{a}, - \tkzUseLua{b},\tkzUseLua{ang}) -\tkzDrawPoints(C,V,CoV) +\tkzDrawPoints(C,F,K) +\tkzLabelPoints(C,F,K) +\tkzDrawCoordinates[smooth](curve) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale=.5 -z.C = point: new (0 , 4) -b = value(math.sqrt(8)) -a = value(math.sqrt(32)) -ang = math.deg(math.pi/4) -E = ellipse: radii (z.C,a,b,math.pi/4) -z.V = E : point (0) -z.CoV = E : point (math.pi/2) +z.C = point: new (0 , 4) +local b = math.sqrt(8) +local a = math.sqrt(32) +local c = math.sqrt(a^2 - b^2) +local e = c / a +z.F = z.C : rotation (math.pi / 4,z.C + point( c, 0 )) +z.K = z.C : rotation (math.pi / 4,z.C + point( a^2 / c, 0 )) +z.Kp = (z.K-z.C) : orthogonal (1) : at (z.K) +L.dir = line : new (z.K,z.Kp) +E = conic : new (z.F,L.dir,e) +curve = E : points (0,1,50) } - \begin{center} - \begin{tikzpicture}[gridded] - \tkzGetNodes - \tkzDrawEllipse[blue](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang}) - \tkzDrawPoints(C,V,CoV) - \end{tikzpicture} +\begin{tikzpicture}[scale=.5] +\tkzGetNodes +\tkzDrawPoints(C,F,K) +\tkzLabelPoints(C,F,K) +\tkzDrawCoordinates[smooth](curve) +\end{tikzpicture} \end{center} \end{minipage} @@ -1501,29 +1556,27 @@ z.CoV = E : point (math.pi/2) \begin{Verbatim} \directlua{% init_elements () - local e - e = .8 - z.A = point: new (2 , 3) - z.B = point: new (5 , 4) - z.K = point: new (6, 7) - L.AB = line: new (z.A,z.B) - z.C = L.AB.mid - c = point.abs(z.B-z.C) - a = c/e - b = math.sqrt (a^2-c^2) - z.V = z.C + a*(z.B-z.C)/point.abs(z.B-z.C) - E = ellipse: foci (z.A,z.B,z.V) - z.cV = E.covertex - ang = math.deg(E.slope) - L.ta,L.tb = E: tangent_from (z.K) - z.F = L.ta.pb - z.G = L.tb.pb + local e = .8 + z.A = point: new (2 , 3) + z.B = point: new (5 , 4) + z.K = point: new (6, 7) + L.AB = line: new (z.A,z.B) + z.C = L.AB.mid + local c = point.abs(z.B-z.C) + local a = c/e + EL = conic : new (EL_bifocal (z.A,z.B,a)) + curve = EL : points(0,1,50) + z.cV = EL.covertex + z.V = EL.vertex + L.ta,L.tb = EL: tangent_from (z.K) + z.F = L.ta.pb + z.G = L.tb.pb } \begin{tikzpicture} \tkzGetNodes \tkzDrawPoints(A,B,C,K,F,G,V,cV) \tkzLabelPoints(A,B,C,K,F,G,V,cV) - \tkzDrawEllipse[teal](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang}) + \tkzDrawCoordinates[smooth,cyan](curve) \tkzDrawLines(K,F K,G) \end{tikzpicture} \end{Verbatim} @@ -1531,47 +1584,199 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () -local e -e = .8 -z.A = point: new (2 , 3) -z.B = point: new (5 , 4) -z.K = point: new (6, 7) -L.AB = line: new (z.A,z.B) -z.C = L.AB.mid -c = point.abs(z.B-z.C) -a = c/e -b = math.sqrt (a^2-c^2) -z.V = z.C + a*(z.B-z.C)/point.abs(z.B-z.C) -E = ellipse: foci (z.A,z.B,z.V) -z.cV = E.covertex -ang = math.deg(E.slope) -L.ta,L.tb = E: tangent_from (z.K) -z.F = L.ta.pb -z.G = L.tb.pb + local e = .8 + z.A = point: new (2 , 3) + z.B = point: new (5 , 4) + z.K = point: new (6, 7) + L.AB = line: new (z.A,z.B) + z.C = L.AB.mid + local c = point.abs(z.B-z.C) + local a = c/e + EL = conic : new (EL_bifocal (z.A,z.B,a)) + curve = EL : points(0,1,50) + z.cV = EL.covertex + z.V = EL.vertex + L.ta,L.tb = EL: tangent_from (z.K) + z.F = L.ta.pb + z.G = L.tb.pb } +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPoints(A,B,C,K,F,G,V,cV) + \tkzLabelPoints(A,B,C,K,F,G,V,cV) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawLines(K,F K,G) + \end{tikzpicture} +\end{center} +\end{minipage} +% subsection ellipse_with_foci (end) + +\subsubsection{Kiepert hyperbola} % (fold) +\label{ssub:kiepert_hyperbola} + +In triangle geometry, the Kiepert conics are two special conics associated with the reference triangle. One of them is a hyperbola, called the Kiepert hyperbola and the other is a parabola, called the Kiepert parabola + +It has been proved that the Kiepert hyperbola is the hyperbola passing through the vertices, the centroid and the orthocenter of the reference triangle +[Wikipedia] +\begin{Verbatim} + \directlua{ + init_elements () + z.A = point: new(0,0) + z.B = point: new(5,0) + z.C = point: new(4,4) + T = triangle: new (z.A,z.B,z.C) + z.K = T : kimberling (115) + z.circumcenter = T.circumcenter + z.G = T.centroid + L.brocard = T : brocard_axis () + C.circum = circle : new (z.circumcenter,z.A) + z.M,z.N = intersection(L.brocard,C.circum) + L.asx = T : simson_line(z.M) + L.asy = T : simson_line(z.N) + z.ux,z.uy = get_points(L.asx) + z.vx,z.vy = get_points(L.asy) + HY = T : kiepert_hyperbola () + curve = HY : points(-3,3,50) + curveb = HY : points(-3,3,50,swap) + z.F_a,z.F_b = HY.Fa,HY.Fb + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygons(A,B,C) + \tkzDrawCoordinates[smooth](curve) + \tkzDrawCoordinates[smooth](curveb) + \tkzDrawLines(A,B A,C B,C F_a,F_b) + \tkzDrawLines[red,add = 8 and 5](K,vy) + \tkzDrawLines[red,add = 2 and 1](K,uy) + \tkzDrawPoints(A,B,C,K,G,F_a,F_b) + \tkzLabelPoints(A,B,C,G) + \tkzLabelPoints[right](F_a,F_b,K) + \end{tikzpicture} +\end{Verbatim} + + +\directlua{ + init_elements () + z.A = point: new(0,0) + z.B = point: new(5,0) + z.C = point: new(4,4) + T = triangle: new (z.A,z.B,z.C) + z.K = T : kimberling (115) + z.circumcenter = T.circumcenter + z.G = T.centroid + L.brocard = T : brocard_axis () + C.circum = circle : new (z.circumcenter,z.A) + z.M,z.N = intersection(L.brocard,C.circum) + L.asx = T : simson_line(z.M) + L.asy = T : simson_line(z.N) + z.ux,z.uy = get_points(L.asx) + z.vx,z.vy = get_points(L.asy) + HY = T : kiepert_hyperbola () + curve = HY : points(-3,3,50) + curveb = HY : points(-3,3,50,swap) + z.F_a,z.F_b = HY.Fa,HY.Fb +} \begin{center} \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPoints(A,B,C,K,F,G,V,cV) - \tkzLabelPoints(A,B,C,K,F,G,V,cV) - \tkzDrawEllipse[teal](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang}) - \tkzDrawLines(K,F K,G) + \tkzGetNodes + \tkzDrawPolygons(A,B,C) + \tkzDrawCoordinates[smooth](curve) + \tkzDrawCoordinates[smooth](curveb) + \tkzDrawLines(A,B A,C B,C F_a,F_b) + \tkzDrawLines[red,add = 8 and 5](K,vy) + \tkzDrawLines[red,add = 2 and 1](K,uy) + \tkzDrawPoints(A,B,C,K,G,F_a,F_b) + \tkzLabelPoints(A,B,C,G) + \tkzLabelPoints[right](F_a,F_b,K) \end{tikzpicture} \end{center} +% subsubsection kiepert_hyperbola (end) - \end{minipage} -% subsection ellipse_with_foci (end) +\subsubsection{Kierpert parabola} % (fold) +\label{ssub:kierpert_parabola} + +The Euler line of a triangle is the conic section directrix of the Kiepert parabola. In fact, the directrices of all parabolas inscribed in a triangle pass through the orthocenter. The triangle formed by the points of contact is called the Steiner triangle. +The Kiepert parabola is tangent to the sides of the triangle (or their extensions), the line at infinity, and the Lemoine axis. The focus of the parabola has is Kimberling center \code{X\_(110}). + +\begin{Verbatim} +\directlua{% + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 6, 0 ) + z.C = point : new ( 1.1, 4.5 ) + T = triangle : new (z.A, z.B, z.C) + z.H = T.orthocenter + z.O = T.circumcenter + kiepert = T :kiepert_parabola () + curve = kiepert : points (-5,7,50) + z.F = kiepert.Fa + z.S = kiepert.vertex + z.K = kiepert.K + z.a = intersection (kiepert,T.ab) + z.b = intersection (kiepert,T.bc) + z.c = intersection (kiepert,T.ca) + } + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon[cyan](A,B,C) + \tkzDrawPolygon[red](a,b,c) + \tkzDrawLines[purple,add = .5 and .5](O,H K,F) + \tkzDrawCoordinates[smooth,red](curve) + \tkzDrawPoints(A,B,C,F,O,H,K,a,b,c) + \tkzDrawSegments(C,c C,b) + \tkzLabelPoints(B,O,H,K,a,b) + \tkzLabelPoints[above](C) + \tkzLabelPoints[left](A) + \tkzLabelPoints[right](F,c) + \end{tikzpicture} +\end{Verbatim} + +\directlua{% + init_elements () + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 6, 0 ) + z.C = point : new ( 1.1, 4.5 ) + T = triangle : new (z.A, z.B, z.C) + z.H = T.orthocenter + z.O = T.circumcenter + kiepert = T :kiepert_parabola () + curve = kiepert : points (-5,7,50) + z.F = kiepert.Fa + z.S = kiepert.vertex + z.K = kiepert.K + z.a = intersection (kiepert,T.ab) + z.b = intersection (kiepert,T.bc) + z.c = intersection (kiepert,T.ca) + } + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon[cyan](A,B,C) + \tkzDrawPolygon[red](a,b,c) + \tkzDrawLines[purple,add = .5 and .5](O,H K,F) + \tkzDrawCoordinates[smooth,red](curve) + \tkzDrawPoints(A,B,C,F,O,H,K,a,b,c) + \tkzDrawSegments(C,c C,b) + \tkzLabelPoints(B,O,H,K,a,b) + \tkzLabelPoints[above](C) + \tkzLabelPoints[left](A) + \tkzLabelPoints[right](F,c) + \end{tikzpicture} + \end{center} + + +% subsubsection kierpert_parabola (end) \subsection{Euler relation} % (fold) \label{sub:euler_relation} \begin{Verbatim} \directlua{% init_elements () - scale = .75 z.A = point: new (0 , 0) z.B = point: new (5 , 0) z.C = point: new (-.4 , 4) @@ -1601,17 +1806,17 @@ init_elements () \directlua{% init_elements () -z.A = point: new (0 , 0) -z.B = point: new (5 , 0) - z.C = point: new (-.4 , 4) +z.A = point: new (0 , 0) +z.B = point: new (5 , 0) +z.C = point: new (-.4 , 4) T.ABC = triangle: new (z.A,z.B,z.C) z.J,z.K = get_points(T.ABC: ex_circle (2)) z.X ,z.Y,z.K = T.ABC : projection (z.J) z.I,z.H = get_points(T.ABC : in_circle()) -z.O = T.ABC.circumcenter +z.O = T.ABC.circumcenter C.OA = circle : new (z.O,z.A) T.IBA = triangle: new (z.I,z.B,z.A) -z.w = T.IBA.circumcenter +z.w = T.IBA.circumcenter L.Ow = line : new (z.O,z.w) _,z.E = intersection (L.Ow, C.OA) } @@ -1638,7 +1843,6 @@ _,z.E = intersection (L.Ow, C.OA) \begin{Verbatim} \directlua{% init_elements () - scale = .5 z.A = point: new (0 , 0) z.B = point: new (5 , 0) z.C = point: new (-2 , 4) @@ -1648,7 +1852,7 @@ init_elements () z.D = intersection (T.ext.ab,T.ABC.ab) z.E = z.C: symmetry (z.B) } -\begin{tikzpicture} +\begin{tikzpicture}[cale = .5] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawLine[purple,add=0 and .5](B,C) @@ -1665,7 +1869,6 @@ init_elements () \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale = .75 z.A = point: new (0 , 0) z.B = point: new (5 , 0) z.C = point: new (-2 , 4) @@ -1678,7 +1881,7 @@ z.E = z.C: symmetry (z.B) \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .6] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawLine[purple,add=0 and .5](B,C) @@ -1700,19 +1903,18 @@ z.E = z.C: symmetry (z.B) \begin{Verbatim} \directlua{% init_elements () - scale = .8 - z.A = point: new (0 , 0) - z.B = point: new (6 , 0) - z.C = point: new (1 , 5) - T = triangle: new (z.A,z.B,z.C) - z.I = T.incenter - L.AI = line: new (z.A,z.I) - z.D = intersection (L.AI, T.bc) - L.LL = T.ab: ll_from (z.C) - L.AD = line: new (z.A,z.D) - z.E = intersection (L.LL,L.AD) + z.A = point: new (0 , 0) + z.B = point: new (6 , 0) + z.C = point: new (1 , 5) + T = triangle: new (z.A,z.B,z.C) + z.I = T.incenter + L.AI = line: new (z.A,z.I) + z.D = intersection (L.AI, T.bc) + L.LL = T.ab: ll_from (z.C) + L.AD = line: new (z.A,z.D) +z.E = intersection (L.LL,L.AD) } -\begin{tikzpicture} +\begin{tikzpicture}[scale=.8] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawLine[purple](C,E) @@ -1729,7 +1931,6 @@ init_elements () \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale =.8 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.C = point: new (1 , 5) @@ -1743,7 +1944,7 @@ z.E = intersection (L.LL,L.AD) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .8] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawLine[purple](C,E) @@ -1767,7 +1968,6 @@ z.E = intersection (L.LL,L.AD) \begin{Verbatim} \directlua{% init_elements () -scale = .75 z.A = point: new (0 , 0) z.B = point: new (5 , -.5) z.C = point: new (-.5 , 3) @@ -1794,7 +1994,7 @@ scale = .75 z.F = intersection (L.LH,C.IH) % feuerbach } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .8] \tkzGetNodes \tkzDrawLine(L,F) \tkzDrawCircle[red](N,A') @@ -1809,7 +2009,6 @@ scale = .75 \directlua{% init_elements () -scale =1.25 z.A = point: new (0 , 0) z.B = point: new (5 , -.5) z.C = point: new (-.5 , 3) @@ -1835,7 +2034,7 @@ z.F = intersection (L.LH,C.IH) % feuerbach } \begin{center} - \begin{tikzpicture}[rotate=90] + \begin{tikzpicture}[scale =1.25,rotate=90] \tkzGetNodes \tkzDrawLine(L,F) \tkzDrawCircle[red](N,A') @@ -1856,34 +2055,35 @@ z.F = intersection (L.LH,C.IH) % feuerbach \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - z.A = point: new (0 , 0) - z.B = point: new (8 , 0) - L.AB = line: new (z.A,z.B) - _,_,z.X,z.Y = get_points(L.AB: square ()) - L.BX = line: new (z.B,z.X) - z.M = L.BX.mid - C.MA = circle: new (z.M,z.A) - _,z.K = intersection (L.BX,C.MA) - L.AK = line: new (z.Y,z.K) - z.C = intersection (L.AK,L.AB) + init_elements () + z.A = point: new (0 , 0) + z.B = point: new (6 , 0) + L.AB = line: new (z.A,z.B) + _,_, + z.X, + z.Y = get_points(L.AB: square ()) + L.BX = line: new (z.B,z.X) + z.M = L.BX.mid + C.MA = circle: new (z.M,z.A) + _,z.K = intersection (L.BX,C.MA) + L.AK = line: new (z.Y,z.K) + z.C = intersection (L.AK,L.AB) } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawLines(A,B X,K) - \tkzDrawLine[teal](Y,K) - \tkzDrawPoints(A,B,C,X,Y,M,K) - \tkzDrawArc[delta=20](M,A)(K) - \tkzLabelPoints(A,B,C) +\begin{tikzpicture}[scale = .5] + \tkzGetNodes + \tkzDrawLines(A,B X,K) + \tkzDrawLine[teal](Y,K) + \tkzDrawPoints(A,B,C,X,Y,M,K) + \tkzDrawArc[delta=20](M,A)(K) + \tkzLabelPoints(A,B,C) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = .5 z.A = point: new (0 , 0) -z.B = point: new (8 , 0) +z.B = point: new (6 , 0) L.AB = line: new (z.A,z.B) _,_,z.X,z.Y = get_points(L.AB: square ()) L.BX = line: new (z.B,z.X) @@ -1895,7 +2095,7 @@ z.C = intersection (L.AK,L.AB) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawLines(A,B X,K) \tkzDrawLine[teal](Y,K) @@ -1913,32 +2113,31 @@ z.C = intersection (L.AK,L.AB) \begin{minipage}{.5\textwidth} \begin{Verbatim} \directlua{% -init_elements () - scale = .6 - z.A = point: new (0 , 0) - z.C = point: new (6 , 0) - L.AC = line: new (z.A,z.C) - _,_,z.x,z.y = get_points(L.AC: square ()) - z.O_1 = L.AC . mid - C = circle: new (z.O_1,z.x) - z.B = intersection (L.AC,C) - L.CB = line: new (z.C,z.B) - z.O_2 = L.CB.mid - L.AB = line: new (z.A,z.B) - z.O_0 = L.AB.mid + init_elements () + z.A = point: new (0 , 0) + z.C = point: new (6 , 0) + L.AC = line: new (z.A,z.C) + _,_, + z.x,z.y = get_points(L.AC: square ()) + z.O_1 = L.AC . mid + C = circle: new (z.O_1,z.x) + z.B = intersection (L.AC,C) + L.CB = line: new (z.C,z.B) + z.O_2 = L.CB.mid + L.AB = line: new (z.A,z.B) + z.O_0 = L.AB.mid } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles(O_1,C O_2,B O_0,B) - \tkzDrawPoints(A,C,B,O_1,O_2,O_0) - \tkzLabelPoints(A,C,B) +\begin{tikzpicture}[ scale = .6] + \tkzGetNodes + \tkzDrawCircles(O_1,C O_2,B O_0,B) + \tkzDrawPoints(A,C,B,O_1,O_2,O_0) + \tkzLabelPoints(A,C,B) \end{tikzpicture} \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = .4 z.A = point: new (0 , 0) z.C = point: new (6 , 0) L.AC = line: new (z.A,z.C) @@ -1951,9 +2150,8 @@ z.O_2 = L.CB.mid L.AB = line: new (z.A,z.B) z.O_0 = L.AB.mid } - \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .4] \tkzGetNodes \tkzDrawCircles(O_1,C O_2,B O_0,B O_1,x) \tkzDrawPoints(A,C,B,O_1,O_2,O_0,x) @@ -1969,21 +2167,20 @@ z.O_0 = L.AB.mid \begin{minipage}[t]{.4\textwidth}\vspace{0pt}% \begin{Verbatim} \directlua{% -init_elements () - scale=.75 - z.A = point: new (0 , 0) - z.B = point: new (4 , 0) - z.G = point: new (2,2) - L.AG = line : new (z.A,z.G) - L.AB = line : new (z.A,z.B) - z.E = L.AG : colinear_at (z.B,.5) - L.GE = line : new (z.G,z.E) - z.D = intersection (L.GE,L.AB) - z.F = z.B : symmetry (z.E) - L.GF = line :new (z.G,z.F) - z.C = intersection (L.GF,L.AB) + init_elements () + z.A = point: new (0 , 0) + z.B = point: new (4 , 0) + z.G = point: new (2,2) + L.AG = line : new (z.A,z.G) + L.AB = line : new (z.A,z.B) + z.E = L.AG : colinear_at (z.B,.5) + L.GE = line : new (z.G,z.E) + z.D = intersection (L.GE,L.AB) + z.F = z.B : symmetry (z.E) + L.GF = line :new (z.G,z.F) + z.C = intersection (L.GF,L.AB) } -\begin{tikzpicture} +\begin{tikzpicture}[ scale =.75] \tkzGetNodes \tkzDrawLines(A,B A,G A,D A,G F,E G,F G,D) \tkzDrawPoints(A,B,G,E,F,C,D) @@ -1995,7 +2192,6 @@ init_elements () \begin{minipage}[t]{.6\textwidth}\vspace{0pt}% \directlua{% init_elements () - scale=.75 z.A = point: new (0 , 0) z.B = point: new (4 , 0) z.G = point: new (2,2) @@ -2010,7 +2206,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale=.75] \tkzGetNodes \tkzDrawLines(A,B A,G A,D A,G F,E G,F G,D) \tkzDrawPoints(A,B,G,E,F,C,D) @@ -2023,39 +2219,37 @@ init_elements () \subsection{Harmonic division v2} % (fold) \label{sub:harmonic_division_v2} -\begin{minipage}[t]{.5\textwidth}\vspace{0pt}% +\begin{minipage}[t]{.45\textwidth}\vspace{0pt}% \begin{Verbatim} \directlua{% -init_elements () -scale = .5 -z.A = point: new (0 , 0) -z.B = point: new (6 , 0) -z.D = point: new (12 , 0) -L.AB = line: new (z.A,z.B) -z.X = L.AB.north_pa -L.XB = line: new (z.X,z.B) -z.E = L.XB.mid -L.ED = line: new (z.E,z.D) -L.AX = line: new (z.A,z.X) -L.AE = line: new (z.A,z.E) -z.F = intersection (L.ED,L.AX) -L.BF = line: new (z.B,z.F) -z.G = intersection (L.AE,L.BF) -L.GX = line: new (z.G,z.X) -z.C = intersection (L.GX,L.AB) + init_elements () + z.A = point: new (0 , 0) + z.B = point: new (6 , 0) + z.D = point: new (12 , 0) + L.AB = line: new (z.A,z.B) + z.X = L.AB.north_pa + L.XB = line: new (z.X,z.B) + z.E = L.XB.mid + L.ED = line: new (z.E,z.D) + L.AX = line: new (z.A,z.X) + L.AE = line: new (z.A,z.E) + z.F = intersection (L.ED,L.AX) + L.BF = line: new (z.B,z.F) + z.G = intersection (L.AE,L.BF) + L.GX = line: new (z.G,z.X) + z.C = intersection (L.GX,L.AB) } -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawLines(A,D A,E B,F D,F X,A X,B X,C) - \tkzDrawPoints(A,...,G,X) - \tkzLabelPoints(A,...,G,X) +\begin{tikzpicture}[ scale = .5] + \tkzGetNodes + \tkzDrawLines(A,D A,E B,F D,F X,A X,B X,C) + \tkzDrawPoints(A,...,G,X) + \tkzLabelPoints(A,...,G,X) \end{tikzpicture} \end{Verbatim} \end{minipage} -\begin{minipage}[t]{.5\textwidth}\vspace{0pt}% +\begin{minipage}[t]{.55\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale = .5 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.D = point: new (12 , 0) @@ -2074,7 +2268,7 @@ z.C = intersection (L.GX,L.AB) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawLines(A,D A,E B,F D,F X,A X,B X,C) \tkzDrawPoints(A,...,G,X) @@ -2147,94 +2341,94 @@ z.R = intersection (L.BC,L.PX) \label{sub:hexagram} \directlua{% init_elements () - scale =1.3 -z.A = point: new (0 , 0) -z.B = point: new (5 , 1) -L.AB = line : new (z.A,z.B) -z.C = point: new (.8 , 3) -T.ABC = triangle: new (z.A,z.B,z.C) -z.N = T.ABC.eulercenter -z.G = T.ABC.centroid -z.O = T.ABC.circumcenter -z.H = T.ABC.orthocenter -z.Ma,z.Mb,z.Mc = get_points (T.ABC : medial ()) -z.Ha,z.Hb,z.Hc = get_points (T.ABC : orthic ()) -z.Ea,z.Eb,z.Ec = get_points (T.ABC: extouch()) -L.euler = T.ABC : euler_line () -C.circum = T.ABC : circum_circle () -C.euler = T.ABC : euler_circle () -z.I,z.J = intersection (L.euler,C.euler) -E = ellipse: foci (z.H,z.O,z.I) -a = E.Rx -b = E.Ry -ang = math.deg(E.slope) -L.AH = line: new (z.A,z.H) -L.BH = line: new (z.B,z.H) -L.CH = line: new (z.C,z.H) -z.X = intersection (L.AH,C.circum) -_,z.Y = intersection (L.BH,C.circum) -_,z.Z = intersection (L.CH,C.circum) -L.BC = line: new (z.B,z.C) -L.XO = line: new (z.X,z.O) -L.YO = line: new (z.Y,z.O) -L.ZO = line: new (z.Z,z.O) -z.x = intersection (L.BC,L.XO) -z.U = intersection (L.XO,E) -_,z.V = intersection (L.YO,E) -_,z.W = intersection (L.ZO,E) +z.A = point: new (2,3.8) +z.B = point: new (0 ,0) +z.C = point: new (6.2 ,0) +L.AB = line : new (z.A,z.B) +T.ABC = triangle: new (z.A,z.B,z.C) +z.N = T.ABC.eulercenter +z.G = T.ABC.centroid +z.O = T.ABC.circumcenter +z.H = T.ABC.orthocenter +z.Ma,z.Mb, +z.Mc = get_points (T.ABC : medial ()) +z.Ha,z.Hb, +z.Hc = get_points (T.ABC : orthic ()) +z.Ea,z.Eb, +z.Ec = get_points (T.ABC: extouch()) +L.euler = T.ABC : euler_line () +C.circum = T.ABC : circum_circle () +C.euler = T.ABC : euler_circle () +z.I,z.J = intersection (L.euler,C.euler) +local a = .5* length(z.I,z.J) +E = conic : new (EL_bifocal (z.O,z.H,a)) +curve = E : points (0,1,50) +L.AH = line: new (z.A,z.H) +L.BH = line: new (z.B,z.H) +L.CH = line: new (z.C,z.H) +z.X = intersection (L.AH,C.circum) +_,z.Y = intersection (L.BH,C.circum) +_,z.Z = intersection (L.CH,C.circum) +L.BC = line: new (z.B,z.C) +L.XO = line: new (z.X,z.O) +L.YO = line: new (z.Y,z.O) +L.ZO = line: new (z.Z,z.O) +z.x = intersection (L.BC,L.XO) +z.U = intersection (L.XO,E) +_,z.V = intersection (L.YO,E) +_,z.W = intersection (L.ZO,E) } \begin{minipage}{.4\textwidth} \begin{Verbatim} \directlua{% init_elements () - scale = 1.3 - z.A = point: new (0 , 0) - z.B = point: new (5 , 1) - L.AB = line : new (z.A,z.B) - z.C = point: new (.8 , 3) - T.ABC = triangle: new (z.A,z.B,z.C) - z.N = T.ABC.eulercenter - z.G = T.ABC.centroid - z.O = T.ABC.circumcenter - z.H = T.ABC.orthocenter - z.Ma,z.Mb, - z.Mc = get_points(T.ABC:medial ()) - z.Ha,z.Hb, - z.Hc = get_points(T.ABC:orthic ()) - z.Ea,z.Eb, - z.Ec = get_points(T.ABC:extouch()) - L.euler = T.ABC : euler_line () - C.circum = T.ABC : circum_circle () - C.euler = T.ABC : euler_circle () - z.I,z.J = intersection (L.euler,C.euler) - E = ellipse: foci (z.H,z.O,z.I) - a = E.Rx - b = E.Ry - ang = math.deg(E.slope) - L.AH = line: new (z.A,z.H) - L.BH = line: new (z.B,z.H) - L.CH = line: new (z.C,z.H) - z.X = intersection (L.AH,C.circum) - _,z.Y = intersection (L.BH,C.circum) - _,z.Z = intersection (L.CH,C.circum) - L.BC = line: new (z.B,z.C) - L.XO = line: new (z.X,z.O) - L.YO = line: new (z.Y,z.O) - L.ZO = line: new (z.Z,z.O) - z.x = intersection (L.BC,L.XO) - z.U = intersection (L.XO,E) - _,z.V = intersection (L.YO,E) - _,z.W = intersection (L.ZO,E) +z.A = point: new (2,3.8) +z.B = point: new (0 ,0) +z.C = point: new (6.2 ,0) +L.AB = line : new (z.A,z.B) +T.ABC = triangle: new (z.A,z.B,z.C) +z.N = T.ABC.eulercenter +z.G = T.ABC.centroid +z.O = T.ABC.circumcenter +z.H = T.ABC.orthocenter +z.Ma,z.Mb, +z.Mc = get_points (T.ABC : medial ()) +z.Ha,z.Hb, +z.Hc = get_points (T.ABC : orthic ()) +z.Ea,z.Eb, +z.Ec = get_points (T.ABC: extouch()) +L.euler = T.ABC : euler_line () +C.circum = T.ABC : circum_circle () +C.euler = T.ABC : euler_circle () +z.I,z.J = intersection (L.euler,C.euler) +local a = .5* length(z.I,z.J) +E = conic: new (EL_bifocal(z.O,z.H,a)) +curve = E : points (0,1,50) +L.AH = line: new (z.A,z.H) +L.BH = line: new (z.B,z.H) +L.CH = line: new (z.C,z.H) +z.X = intersection (L.AH,C.circum) +_,z.Y = intersection (L.BH,C.circum) +_,z.Z = intersection (L.CH,C.circum) +L.BC = line: new (z.B,z.C) +L.XO = line: new (z.X,z.O) +L.YO = line: new (z.Y,z.O) +L.ZO = line: new (z.Z,z.O) +z.x = intersection (L.BC,L.XO) +z.U = intersection (L.XO,E) +_,z.V = intersection (L.YO,E) +_,z.W = intersection (L.ZO,E) } \end{Verbatim} \end{minipage} \begin{minipage}{.6\textwidth} -\begin{center} - \begin{tikzpicture} +\hfill +\begin{tikzpicture} \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawCircles[red](N,Ma O,A) + \tkzDrawCoordinates[smooth,cyan](curve) \tkzDrawSegments(A,X B,Y C,Z B,Hb C,Hc X,O Y,O Z,O) \tkzDrawPolygon[red](U,V,W) \tkzLabelPoints[red](U,V,W) @@ -2243,26 +2437,26 @@ init_elements () \tkzLabelPoints[blue,right](O,N,G,H,I,J) \tkzDrawPoints(I,J,U,V,W) \tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc) - \tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang}) - \end{tikzpicture} -\end{center} +\end{tikzpicture} + \end{minipage} \begin{Verbatim} \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPolygon(A,B,C) - \tkzDrawCircles[red](N,Ma O,A) - \tkzDrawSegments(A,X B,Y C,Z B,Hb C,Hc X,O Y,O Z,O) - \tkzDrawPolygon[red](U,V,W) - \tkzLabelPoints[red](U,V,W) - \tkzLabelPoints(A,B,C,X,Y,Z) - \tkzDrawLine[blue](I,J) - \tkzLabelPoints[blue,right](O,N,G,H,I,J) - \tkzDrawPoints(I,J,U,V,W) - \tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc) - \tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang}) + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawCircles[red](N,Ma O,A) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawSegments(A,X B,Y C,Z B,Hb C,Hc X,O Y,O Z,O) + \tkzDrawPolygon[red](U,V,W) + \tkzLabelPoints[red](U,V,W) + \tkzLabelPoints(A,B,C,X,Y,Z) + \tkzDrawLine[blue](I,J) + \tkzLabelPoints[blue,right](O,N,G,H,I,J) + \tkzDrawPoints(I,J,U,V,W) + \tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc) \end{tikzpicture} + \end{Verbatim} % subsection hexagram (end) @@ -2272,7 +2466,6 @@ init_elements () \directlua{% init_elements () -scale = .7 z.A = point : new(0,0) z.B = point : new(10,0) z.C = gold_segment_ (z.A,z.B) @@ -2314,48 +2507,48 @@ z.O = C.DC : inversion (z.W) \begin{Verbatim} \directlua{% init_elements () - z.A = point : new(0,0) - z.B = point : new(10,0) - z.C = gold_segment_ (z.A,z.B) - L.AB = line:new (z.A,z.B) - z.O_1 = L.AB.mid - L.AC = line:new (z.A,z.C) - z.O_2 = L.AC.mid - L.CB = line:new (z.C,z.B) - z.O_3 = L.CB.mid - C1 = circle:new (z.O_1,z.B) - C2 = circle:new (z.O_2,z.C) - C3 = circle:new (z.O_3,z.B) - z.Q = C2.north - z.P = C3.north - L1 = line:new (z.O_2,z.O_3) - z.M_0 = L1:harmonic_ext (z.C) - L2 = line:new (z.O_1,z.O_2) - z.M_1 = L2:harmonic_int (z.A) - L3 = line:new (z.O_1,z.O_3) - z.M_2 = L3:harmonic_int (z.B) - Lbq = line:new (z.B,z.Q) - Lap = line:new (z.A,z.P) - z.S = intersection (Lbq,Lap) - z.x = z.C: north () - L = line : new (z.C,z.x) - z.D,_ = intersection (L,C1) - L.CD = line :new (z.C,z.D) - z.O_7 = L.CD.mid - C.DC = circle: new (z.D,z.C) - z.U,z.V = intersection (C.DC,C1) - L.UV = line :new (z.U,z.V) - z.R ,z.S = L.UV : projection (z.O_2,z.O_3) - L.O1D = line : new (z.O_1,z.D) - z.W = intersection (L.UV,L.O1D) - z.O = C.DC : inversion (z.W) + z.A = point : new(0,0) + z.B = point : new(10,0) + z.C = gold_segment_ (z.A,z.B) + L.AB = line:new (z.A,z.B) + z.O_1 = L.AB.mid + L.AC = line:new (z.A,z.C) + z.O_2 = L.AC.mid + L.CB = line:new (z.C,z.B) + z.O_3 = L.CB.mid + C1 = circle:new (z.O_1,z.B) + C2 = circle:new (z.O_2,z.C) + C3 = circle:new (z.O_3,z.B) + z.Q = C2.north + z.P = C3.north + L1 = line:new (z.O_2,z.O_3) + z.M_0 = L1:harmonic_ext (z.C) + L2 = line:new (z.O_1,z.O_2) + z.M_1 = L2:harmonic_int (z.A) + L3 = line:new (z.O_1,z.O_3) + z.M_2 = L3:harmonic_int (z.B) + Lbq = line:new (z.B,z.Q) + Lap = line:new (z.A,z.P) + z.S = intersection (Lbq,Lap) + z.x = z.C: north () + L = line : new (z.C,z.x) + z.D,_ = intersection (L,C1) + L.CD = line :new (z.C,z.D) + z.O_7 = L.CD.mid + C.DC = circle: new (z.D,z.C) + z.U,z.V = intersection (C.DC,C1) + L.UV = line :new (z.U,z.V) + z.R,z.S = L.UV : projection (z.O_2,z.O_3) + L.O1D = line : new (z.O_1,z.D) + z.W = intersection (L.UV,L.O1D) + z.O = C.DC : inversion (z.W) } \end{Verbatim} \end{minipage} \begin{minipage}{.6\textwidth} \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .7] \tkzGetNodes \tkzDrawCircles[teal](O_1,B) \tkzDrawSemiCircles[thin,teal](O_2,C O_3,B) @@ -2425,7 +2618,6 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = .7 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (0.8,4) @@ -2442,7 +2634,7 @@ init_elements () z.O = C.apo.center z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec) } -\begin{tikzpicture} +\begin{tikzpicture}[scale= .7] \tkzGetNodes \tkzDrawCircles[red](O,xa N,Ea) \tkzFillCircles[green!30!black,opacity=.3](O,xa) @@ -2463,7 +2655,6 @@ init_elements () \directlua{% init_elements () - scale = .5 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (0.8,4) @@ -2482,7 +2673,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale= .5] \tkzGetNodes \tkzDrawCircles[red](O,xa N,Ea) \tkzFillCircles[green!30!black,opacity=.3](O,xa) @@ -2509,7 +2700,6 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = .5 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (0.8,4) @@ -2536,7 +2726,7 @@ init_elements () z.t = intersection (L.ox,L.MaS) % through } -\begin{tikzpicture} +\begin{tikzpicture}[scale= .5] \tkzGetNodes \tkzDrawLines[add=1 and 1](A,B A,C B,C) \tkzDrawCircles(Ja,Xa Jb,Xb Jc,Xc o,t N,Ma) % @@ -2551,7 +2741,6 @@ init_elements () \directlua{% init_elements () -scale =.5 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (0.8,4) @@ -2579,7 +2768,7 @@ z.t = intersection (L.ox,L.MaS) % through } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale =.5] \tkzGetNodes \tkzDrawLines[add=1 and 1](A,B A,C B,C) \tkzDrawCircles(Ja,Xa Jb,Xb Jc,Xc o,t N,Ma) @@ -2602,7 +2791,6 @@ z.t = intersection (L.ox,L.MaS) % through \begin{Verbatim} \directlua{% init_elements () - scale = .5 z.O = point: new (2,2) z.Op = point: new (-4,1) z.P = point: polar (4,0) @@ -2617,7 +2805,7 @@ z.t = intersection (L.ox,L.MaS) % through L.OOp = line : new (z.O,z.Op) z.M = L.OOp.mid } - \begin{tikzpicture} + \begin{tikzpicture}[ scale = .5] \tkzGetNodes \tkzDrawCircle[red](O,P) \tkzDrawCircle[purple](O',z1) @@ -2638,7 +2826,6 @@ z.t = intersection (L.ox,L.MaS) % through \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .5 z.O = point: new (2,2) z.Op = point: new (-4,1) z.P = point: polar (4,0) @@ -2655,7 +2842,7 @@ z.t = intersection (L.ox,L.MaS) % through } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale = .5] \tkzGetNodes \tkzDrawCircle[red](O,P) \tkzDrawCircle[purple](O',z1) @@ -2685,7 +2872,6 @@ z.t = intersection (L.ox,L.MaS) % through \begin{Verbatim} \directlua{% init_elements () -scale =.75 z.O = point : new (-1,0) z.B = point : new (0,2) z.Op = point : new (4,-1) @@ -2702,7 +2888,7 @@ scale =.75 z.Tp = L.Tp.pb z.Kp = L.Kp.pb } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawCircles(O,B O',D) \tkzDrawLine[cyan](E,F) @@ -2717,7 +2903,6 @@ scale =.75 \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .75 z.O = point : new (-1,0) z.B = point : new (0,2) z.Op = point : new (4,-1) @@ -2735,7 +2920,7 @@ z.Tp = L.Tp.pb z.Kp = L.Kp.pb } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircles(O,B O',D) \tkzDrawLine[cyan](E,F) @@ -2924,7 +3109,6 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = .75 z.A = point : new (0,2) z.B = point : new (0,-2) z.C_0 = point : new (-3,0) @@ -2943,7 +3127,6 @@ init_elements () \directlua{% init_elements () -scale=.75 z.A = point : new (0,2) z.B = point : new (0,-2) z.C_0 = point : new (-3,0) @@ -2960,7 +3143,7 @@ z.O = L.BA.mid } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawCircles(C_0,A C_1,A C_3,A C_5,A) \tkzDrawCircles[thick,color=red](M_0,x M_1,x') @@ -2973,7 +3156,7 @@ z.O = L.BA.mid \end{center} \begin{Verbatim} - \begin{tikzpicture} + \begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawCircles(C_0,A C_1,A C_3,A C_5,A) \tkzDrawCircles[thick,color=red](M_0,x M_1,x') @@ -2992,7 +3175,6 @@ z.O = L.BA.mid \begin{Verbatim} \directlua{% init_elements () - scale=.75 z.A = point : new (0,0) z.B = point : new (1,0) z.C_0 = point : new (-2,0) @@ -3014,7 +3196,6 @@ init_elements () \directlua{% init_elements () - scale=.75 z.A = point : new (0,0) z.B = point : new (1,0) z.C_0 = point : new (-2,0) @@ -3034,7 +3215,7 @@ init_elements () } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawCircles(C_0,A C_1,B) \tkzDrawCircles[thick,color=red](M_0,u M_1,v M_2,t) @@ -3046,7 +3227,7 @@ init_elements () \end{center} \begin{Verbatim} -\begin{tikzpicture} +\begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawCircles(C_0,A C_1,B) \tkzDrawCircles[thick,color=red](M_0,u M_1,v M_2,t) @@ -3101,7 +3282,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .5 z.A = point: new (0,0) z.E = point: new (-2,2) C.AE = circle : new (z.A,z.E) @@ -3118,7 +3298,7 @@ init_elements () z.O = intersection (L.EC,L.FD) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawCircles(A,E B,H) \tkzDrawSegments(E,D C,F) @@ -3146,7 +3326,6 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () - scale = .4 z.A = point: new (0,0) z.B = point: new (10,0) z.C = point: new (4,0) @@ -3164,7 +3343,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .25 z.A = point: new (0,0) z.B = point: new (10,0) z.C = point: new (4,0) @@ -3177,25 +3355,24 @@ init_elements () z.m,z.mp = get_points (C.AC: tangent_at (z.M)) z.n,z.np = get_points (C.BC: tangent_at (z.N)) } - - \begin{center} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircles(A,C B,C) - \tkzDrawLines[new,add=1 and 1](M,m N,n C,c) - \tkzDrawSegment(M,N) - \tkzDrawPoints(A,B,C,M,N) - \tkzLabelPoints[below right](A,B,C,M,N) - \tkzFillAngles[blue!30,opacity=.3](m',M,C N,C,c' M,C,c n',N,C) - \tkzLabelCircle[below=4pt,font=\scriptsize](A,C)(90){$(\alpha)$} - \tkzLabelCircle[left=4pt,font=\scriptsize](B,C)(-90){$(\beta)$} - \end{tikzpicture} - \end{center} + +\begin{center} + \begin{tikzpicture}[scale = .25] + \tkzGetNodes + \tkzDrawCircles(A,C B,C) + \tkzDrawLines[new,add=1 and 1](M,m N,n C,c) + \tkzDrawSegment(M,N) + \tkzDrawPoints(A,B,C,M,N) + \tkzLabelPoints[below right](A,B,C,M,N) + \tkzFillAngles[blue!30,opacity=.3](m',M,C N,C,c' M,C,c n',N,C) + \tkzLabelCircle[below=4pt,font=\scriptsize](A,C)(90){$(\alpha)$} + \tkzLabelCircle[left=4pt,font=\scriptsize](B,C)(-90){$(\beta)$} + \end{tikzpicture} +\end{center} \end{minipage} - \begin{Verbatim} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .25] \tkzGetNodes \tkzDrawCircles(A,C B,C) \tkzDrawLines[new,add=1 and 1](M,m N,n C,c) @@ -3214,50 +3391,49 @@ init_elements () \label{sub:reim_v3} \begin{minipage}{.5\textwidth} - \begin{Verbatim} - \directlua{% - init_elements () - z.A = point: new (0,0) - z.B = point: new (8,0) - z.C = point: new (2,6) - L.AB = line : new (z.A,z.B) - L.AC = line : new (z.A,z.C) - L.BC = line : new (z.B,z.C) - z.I = L.BC : point (0.75) - z.J = L.AC : point (0.4) - z.K = L.AB : point (0.5) - T.AKJ = triangle : new (z.A,z.K,z.J) - T.BIK = triangle : new (z.B,z.I,z.K) - T.CIJ = triangle : new (z.C,z.I,z.J) - z.x = T.AKJ.circumcenter - z.y = T.BIK.circumcenter - z.z = T.CIJ.circumcenter - C.xK = circle: new (z.x,z.K) - C.yK = circle: new (z.y,z.K) - z.O,_ = intersection (C.xK,C.yK) - C.zO = circle: new (z.z,z.O) - L.KO = line: new (z.K,z.O) - z.D = intersection (L.KO,C.zO) - } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawSegments(K,D D,C) - \tkzDrawPolygon[teal](A,B,C) - \tkzDrawCircles[orange](x,A y,B z,C) - \tkzDrawPoints[fill=white](A,B,C,I,J,K,D) - \tkzLabelPoints[below](A,B,J,K,O) - \tkzLabelPoints[above](C,D,I) - \tkzDrawPoints[fill=black](O) - \tkzLabelCircle[below=4pt,font=\scriptsize](x,A)(20){$(\alpha)$} - \tkzLabelCircle[left=4pt,font=\scriptsize](y,B)(60){$(\beta)$} - \tkzLabelCircle[below=4pt,font=\scriptsize](z,C)(60){$(\gamma)$} - \end{tikzpicture} - \end{Verbatim} +\begin{Verbatim} +\directlua{% +init_elements () + z.A = point: new (0,0) + z.B = point: new (8,0) + z.C = point: new (2,6) + L.AB = line : new (z.A,z.B) + L.AC = line : new (z.A,z.C) + L.BC = line : new (z.B,z.C) + z.I = L.BC : point (0.75) + z.J = L.AC : point (0.4) + z.K = L.AB : point (0.5) + T.AKJ = triangle : new (z.A,z.K,z.J) + T.BIK = triangle : new (z.B,z.I,z.K) + T.CIJ = triangle : new (z.C,z.I,z.J) + z.x = T.AKJ.circumcenter + z.y = T.BIK.circumcenter + z.z = T.CIJ.circumcenter + C.xK = circle: new (z.x,z.K) + C.yK = circle: new (z.y,z.K) + z.O,_ = intersection (C.xK,C.yK) + C.zO = circle: new (z.z,z.O) + L.KO = line: new (z.K,z.O) + z.D = intersection (L.KO,C.zO) +} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawSegments(K,D D,C) + \tkzDrawPolygon[teal](A,B,C) + \tkzDrawCircles[orange](x,A y,B z,C) + \tkzDrawPoints[fill=white](A,B,C,I,J,K,D) + \tkzLabelPoints[below](A,B,J,K,O) + \tkzLabelPoints[above](C,D,I) + \tkzDrawPoints[fill=black](O) + \tkzLabelCircle[below=4pt,font=\scriptsize](x,A)(20){$(\alpha)$} + \tkzLabelCircle[left=4pt,font=\scriptsize](y,B)(60){$(\beta)$} + \tkzLabelCircle[below=4pt,font=\scriptsize](z,C)(60){$(\gamma)$} +\end{tikzpicture} +\end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} \directlua{% init_elements () - scale = .75 z.A = point: new (0,0) z.B = point: new (8,0) z.C = point: new (2,6) @@ -3281,7 +3457,7 @@ init_elements () z.D = intersection (L.KO,C.zO) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawSegments(K,D D,C) \tkzDrawPolygon[teal](A,B,C) @@ -3305,7 +3481,6 @@ init_elements () \begin{Verbatim} \directlua{% init_elements () -scale = .75 z.A = point: new (1,0) z.B = point: new (2,2) z.E = point: new (5,-4) @@ -3318,7 +3493,7 @@ scale = .75 z.j = L.Tj.pb z.k,z.l = get_points (C.AB: tangent_at (z.B)) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircles(A,B M,A) \tkzDrawPoints(A,B,E,i,j,M,S) @@ -3330,7 +3505,6 @@ scale = .75 \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = .75 z.A = point: new (1,0) z.B = point: new (2,2) z.E = point: new (5,-4) @@ -3345,7 +3519,7 @@ z.k,z.l = get_points (C.AB: tangent_at (z.B)) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawCircles(A,B M,A) \tkzDrawPoints(A,B,E,i,j,M,S) @@ -3363,7 +3537,6 @@ z.k,z.l = get_points (C.AB: tangent_at (z.B)) \begin{Verbatim} \directlua{% init_elements () -scale = .5 z.A = point: new (0,0) z.B = point: new (1,2) z.E = point: new (-3,2) @@ -3381,14 +3554,13 @@ scale = .5 \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = .5 z.A = point: new (0,0) z.B = point: new (1,2) z.E = point: new (-3,2) z.C,z.D = z.E : homothety(2,z.A,z.B) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPoints(A,B,C,E,D) \tkzLabelPoints(A,B,C,E) @@ -3406,7 +3578,6 @@ z.C,z.D = z.E : homothety(2,z.A,z.B) \begin{Verbatim} \directlua{% init_elements () - scale = .75 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.C = point: new (1 , 5) @@ -3420,7 +3591,7 @@ init_elements () z.b1,z.b2 = get_points(C.OA: tangent_at(z.B)) z.H = L.AB: projection (z.O) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 0.75] \tkzGetNodes \tkzDrawCircle(O,A) \tkzDrawPolygon(A,B,C) @@ -3436,7 +3607,6 @@ init_elements () \begin{minipage}{.5\textwidth} \directlua{% init_elements () -scale = 0.75 z.A = point: new (0 , 0) z.B = point: new (6 , 0) z.C = point: new (1 , 5) @@ -3451,7 +3621,7 @@ z.b1,z.b2 = get_points (C.OA: tangent_at (z.B)) z.H = L.AB: projection (z.O) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 0.75] \tkzGetNodes \tkzDrawCircle(O,A) \tkzDrawPolygon(A,B,C) @@ -3580,7 +3750,6 @@ z.Cp,_ = intersection (L.GD,C.xD) \end{tikzpicture} \end{Verbatim} - % subsection three_chords (end) \subsection{Three tangents} % (fold) @@ -3623,7 +3792,6 @@ init_elements () \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale = .75 z.A = point: new (-1 , 0) z.C = point: new (4 , -1.5) z.E = point: new (1 , -1) @@ -3643,7 +3811,7 @@ z.I = intersection (L.TA,L.TC) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawCircles(w,E) \tkzDrawCircles[cyan](x,E) @@ -3682,7 +3850,6 @@ init_elements () \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale = .5 z.A = point: new (-1,0) z.B = point: new (2,4) C.AB = circle: new (z.A,z.B) @@ -3691,7 +3858,7 @@ z.D = C.AB: midarc (z.B,z.C) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPoints(A,B,C) \tkzDrawCircles(A,B) @@ -3709,7 +3876,6 @@ z.D = C.AB: midarc (z.B,z.C) \begin{Verbatim} \directlua{% init_elements () - scale = 1.6 z.A = point: new (1,0) z.B = point: new (5,2) z.C = point: new (1.2,2) @@ -3729,7 +3895,7 @@ init_elements () z.Q = intersection (L.tB,L.AC) z.R = intersection (L.tC,L.AB) } -\begin{tikzpicture} +\begin{tikzpicture}[scale= 1.6] \tkzGetNodes \tkzDrawPolygon[teal](A,B,C) \tkzDrawCircle(O,A) @@ -3744,7 +3910,6 @@ init_elements () \begin{minipage}[t]{.5\textwidth}\vspace{0pt}% \directlua{% init_elements () -scale = 0.75 z.A = point: new (1,0) z.B = point: new (5,2) z.C = point: new (1.2,2) @@ -3766,7 +3931,7 @@ z.R = intersection (L.tC,L.AB) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = 0.75] \tkzGetNodes \tkzDrawPolygon[teal](A,B,C) \tkzDrawCircle(O,A) @@ -3855,30 +4020,29 @@ Draw antiparallels through the symmedian point $L$. The points where these lines \begin{Verbatim} \directlua{% init_elements () - scale = 2 - z.a = point: new (0,0) - z.b = point: new (5,0) - z.c = point: new (2,3) - T = triangle: new (z.a,z.b,z.c) - z.O = T.circumcenter - z.o,z.p = get_points (T : first_lemoine_circle ()) - L.ab = line : new (z.a,z.b) - L.ca = line : new (z.c,z.a) - L.bc = line : new (z.b,z.c) - z.L,z.x = get_points (T : second_lemoine_circle ()) - C.first_lemoine = circle : new (z.o,z.p) - z.y1,z.y2 = intersection (L.ab,C.first_lemoine) - z.y5,z.y6 = intersection (L.bc,C.first_lemoine) - z.y3,z.y4 = intersection (L.ca,C.first_lemoine) - C.second_lemoine = circle : new (z.L,z.x) - z.x1,z.x2 = intersection (L.ab,C.second_lemoine) - z.x3,z.x4 = intersection (L.bc,C.second_lemoine) - z.x5,z.x6 = intersection (L.ca,C.second_lemoine) - L.y1y6 = line : new (z.y1,z.y6) - L.y4y5 = line : new (z.y4,z.y5) - L.y2y3 = line : new (z.y2,z.y3) + z.a = point: new (0,0) + z.b = point: new (5,0) + z.c = point: new (2,3) + T = triangle: new (z.a,z.b,z.c) + z.O = T.circumcenter + z.o,z.p = get_points (T : first_lemoine_circle ()) + L.ab = line : new (z.a,z.b) + L.ca = line : new (z.c,z.a) + L.bc = line : new (z.b,z.c) + z.L,z.x = get_points (T : second_lemoine_circle ()) + C.first_lemoine = circle : new (z.o,z.p) + z.y1,z.y2 = intersection (L.ab,C.first_lemoine) + z.y5,z.y6 = intersection (L.bc,C.first_lemoine) + z.y3,z.y4 = intersection (L.ca,C.first_lemoine) + C.second_lemoine= circle : new (z.L,z.x) + z.x1,z.x2 = intersection (L.ab,C.second_lemoine) + z.x3,z.x4 = intersection (L.bc,C.second_lemoine) + z.x5,z.x6 = intersection (L.ca,C.second_lemoine) + L.y1y6 = line : new (z.y1,z.y6) + L.y4y5 = line : new (z.y4,z.y5) + L.y2y3 = line : new (z.y2,z.y3) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 1.5] \tkzGetNodes \tkzDrawPolygons(a,b,c y1,y2,y3,y4,y5,y6) \tkzDrawPoints(x1,x2,x3,x4,x5,x6,L) @@ -3893,7 +4057,6 @@ init_elements () \directlua{% init_elements () -scale = 2 z.a = point: new (0,0) z.b = point: new (5,0) z.c = point: new (2,3) @@ -3917,9 +4080,8 @@ L.y4y5 = line : new (z.y4,z.y5) L.y2y3 = line : new (z.y2,z.y3) } - \begin{center} - \begin{tikzpicture}[scale = .75] + \begin{tikzpicture}[scale = 1.5] \tkzGetNodes \tkzDrawPolygons(a,b,c y1,y2,y3,y4,y5,y6) \tkzDrawPoints(x1,x2,x3,x4,x5,x6,L) @@ -3940,7 +4102,6 @@ L.y2y3 = line : new (z.y2,z.y3) \directlua{% init_elements () -scale = .75 z.A = point: new (-1,0) z.B = point: new (2,2) z.C = point: new (2,4) @@ -3977,7 +4138,7 @@ init_elements () z.Cp = C.AC: inversion ( z.B, z.E, z.C ) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .5] \tkzGetNodes \tkzDrawPoints(A,B,C) \tkzDrawCircles(A,C A,B) @@ -3989,7 +4150,7 @@ init_elements () \end{Verbatim} \end{minipage} \begin{minipage}{.5\textwidth} - \begin{tikzpicture}[scale=.75] + \begin{tikzpicture}[scale=.6] \tkzGetNodes \tkzDrawPoints(A,B,C) \tkzDrawCircles(A,C A,B) @@ -4070,32 +4231,31 @@ z.z_0,z.z_1 = get_points (L.anti) \directlua{% init_elements () - scale =.75 - xC,nc = 10,16 - xB = xC/tkzphi - xD = (xC*xC)/xB - xJ = (xC+xD)/2 - r = xD-xJ - z.A = point : new ( 0 , 0 ) - z.B = point : new ( xB , 0) - z.C = point : new ( xC , 0) - L.AC = line : new (z.A,z.C) - z.i = L.AC.mid - L.AB = line:new (z.A,z.B) - z.j = L.AB.mid - z.D = point : new ( xD , 0) - C.AC = circle: new (z.A,z.C) - for i = -nc,nc do - z["J"..i] = point: new (xJ,2*r*i) - z["H"..i] = point: new (xJ,2*r*i-r) - z["J"..i.."p"], z["H"..i.."p"] = C.AC : inversion (z["J"..i],z["H"..i]) - L.AJ = line : new (z.A,z["J"..i]) - C.JH = circle: new ( z["J"..i] , z["H"..i]) - z["S"..i], z["T"..i] = intersection (L.AJ,C.JH) - z["S"..i.."p"], z["T"..i.."p"] = C.AC : inversion (z["S"..i],z["T"..i]) - L.SpTp = line:new ( z["S"..i.."p"], z["T"..i.."p"]) - z["I"..i] = L.SpTp.mid - end + xC,nc = 10,16 + xB = xC/tkzphi + xD = (xC*xC)/xB + xJ = (xC+xD)/2 + r = xD-xJ + z.A = point : new ( 0 , 0 ) + z.B = point : new ( xB , 0) + z.C = point : new ( xC , 0) + L.AC = line : new (z.A,z.C) + z.i = L.AC.mid + L.AB = line:new (z.A,z.B) + z.j = L.AB.mid + z.D = point : new ( xD , 0) + C.AC = circle: new (z.A,z.C) + for i = -nc,nc do + z["J"..i] = point: new (xJ,2*r*i) + z["H"..i] = point: new (xJ,2*r*i-r) + z["J"..i.."p"], z["H"..i.."p"] = C.AC : inversion (z["J"..i],z["H"..i]) + L.AJ = line : new (z.A,z["J"..i]) + C.JH = circle: new ( z["J"..i] , z["H"..i]) + z["S"..i], z["T"..i] = intersection (L.AJ,C.JH) + z["S"..i.."p"], z["T"..i.."p"] = C.AC : inversion (z["S"..i],z["T"..i]) + L.SpTp = line:new ( z["S"..i.."p"], z["T"..i.."p"]) + z["I"..i] = L.SpTp.mid + end } \begin{Verbatim} @@ -4145,7 +4305,7 @@ init_elements () \begin{minipage}{.5\textwidth} \def\nc{\tkzUseLua{nc}} - \begin{tikzpicture}[ultra thin] + \begin{tikzpicture}[ultra thin,scale =.75] \tkzGetNodes \tkzDrawCircle[fill=teal!20](i,C) \tkzDrawCircle[fill=PineGreen!60](j,B) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex index e40f88e4318..6b70ee90cf0 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex @@ -245,42 +245,44 @@ This is obtained from the library by writing Then |z.B = z.A * za| describes a rotation of point A by an angle |a|. -\begin{minipage}{.6\textwidth} - \begin{Verbatim} - \directlua{% -init_elements () - z.O = point : new (0,0) - z.A = point : new (1,2) - a = math.pi/6 - za = point(math.cos(a),math.sin(a)) - z.B = z.A * za - } - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawPoints(O,A,B) - \tkzDrawArc[->,delta=0](O,A)(B) - \tkzDrawSegments[dashed](O,A O,B) - \tkzLabelAngle(A,O,B){$\pi/6$} - \end{tikzpicture} - \end{Verbatim} +\begin{minipage}{.45\textwidth} +\begin{Verbatim} +\directlua{% + init_elements () + z.O = point : new (0,0) + z.A = point : new (1,2) + a = math.pi/6 + za = point(math.cos(a),math.sin(a)) + z.B = z.A * za + } +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawPoints(O,A,B) + \tkzDrawArc[->,delta=0](O,A)(B) + \tkzDrawSegments[dashed](O,A O,B) + \tkzLabelAngle(A,O,B){$\pi/6$} +\end{tikzpicture} + \end{Verbatim} \end{minipage} -\begin{minipage}{.6\textwidth} +\begin{minipage}{.55\textwidth} \directlua{% -init_elements () - scale=2 + init_elements () z.O = point : new (0,0) z.A = point : new (1,2) a = math.pi/6 za = point(math.cos(a),math.sin(a)) z.B = z.A * za } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPoints(O,A,B) -\tkzDrawArc[->,delta=0,thick](O,A)(B) -\tkzDrawSegments[dashed](O,A O,B) -\tkzLabelAngle(A,O,B){$\pi/6$} -\end{tikzpicture} +\begin{center} + \begin{tikzpicture}[scale=2] + \tkzGetNodes + \tkzDrawPoints(O,A,B) + \tkzDrawArc[->,delta=0,thick](O,A)(B) + \tkzDrawSegments[dashed](O,A O,B) + \tkzLabelAngle(A,O,B){$\pi/6$} + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection example_of_complex_use (end) @@ -304,8 +306,7 @@ init_elements () z.g = z.b* point(math.cos(math.pi/2), math.sin(math.pi/2)) } - -\hspace*{\fill} + \begin{tikzpicture} \tkzGetNodes \tkzInit[xmin=-2,xmax=3,ymin=-2,ymax=3] @@ -332,17 +333,19 @@ init_elements () % = z.a : conj () z.g = z.b* point(math.cos(math.pi/2),math.sin(math.pi/2)) } - -\hspace*{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzInit[xmin=-2,xmax=3,ymin=-2,ymax=3] - \tkzGrid - \tkzDrawSegments(o,a o,b o,c o,e o,b' o,f o,g) - \tkzDrawSegments[red](a,c b,c b',d a,d) - \tkzDrawPoints(a,...,g,o,a',b') - \tkzLabelPoints(o,a,b,c,d,e,f,g,a',b') -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzInit[xmin=-2,xmax=3,ymin=-2,ymax=3] + \tkzGrid + \tkzDrawSegments(o,a o,b o,c o,e o,b' o,f o,g) + \tkzDrawSegments[red](a,c b,c b',d a,d) + \tkzDrawPoints(a,...,g,o,a',b') + \tkzLabelPoints(o,a,b,c,d,e,f,g,a',b') + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection point_operations_complex (end) % subsection complex_numbers (end) @@ -400,12 +403,15 @@ init_elements () z.C = point: new (2,5) z.G = barycenter ({z.A,3},{z.B,1},{z.C,1}) } - \hspace{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C) -\tkzDrawPoints(A,B,C,G) -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawPoints(A,B,C,G) + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection using_the_barycentre (end) @@ -435,14 +441,14 @@ The problem encountered in this example stems from the notation of the point nam \begin{Verbatim} \directlua{% init_elements () - local r = 3 - z.O = point : new (0,0) - max = 100 - for i = 1,max +local r = 3 +z.O = point : new (0,0) +max = 100 +for i = 1,max do - z["A_"..i] = point : polar(r,2*i*math.pi/max) + z["A_"..i] = point : polar(r,2*i*math.pi/max) end - a = math.deg(get_angle (z.O,z.A_1,z.A_2)) +a = math.deg(get_angle (z.O,z.A_1,z.A_2)) } \end{Verbatim} \end{minipage} @@ -458,18 +464,21 @@ init_elements () end a = math.deg(get_angle (z.O,z.A_1,z.A_2)) } -\hspace{\fill} -\begin{tikzpicture} -\pgfkeys{/pgf/number format/.cd,use comma} -\let\pmpn\pgfmathprintnumber -\tkzGetNodes -\tkzDrawPolygon[cyan](A_1,A_...,A_\tkzUseLua{max}) -\tkzDrawCircle[red](O,A_1) -\tkzDrawPoints[color=black](A_1,A_...,A_\tkzUseLua{max},O) -\tkzDrawSegments(O,A_1 O,A_2) -\tkzMarkAngle[size=2](A_1,O,A_2) -\tkzLabelAngle[pos=3.4](A_1,O,A_2){$\pmpn{\tkzUseLua{a}}^\circ$} -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture}[scale =.8] + \pgfkeys{/pgf/number format/.cd,use comma} + \let\pmpn\pgfmathprintnumber + \tkzGetNodes + \tkzDrawPolygon[cyan](A_1,A_...,A_\tkzUseLua{max}) + \tkzDrawCircle[red](O,A_1) + \tkzDrawPoints[color=black](A_1,A_...,A_\tkzUseLua{max},O) + \tkzDrawSegments(O,A_1 O,A_2) + \tkzMarkAngle[size=2](A_1,O,A_2) + \tkzLabelAngle[pos=3.4](A_1,O,A_2){$\pmpn{\tkzUseLua{a}}^\circ$} + \end{tikzpicture} +\end{center} + \end{minipage} \begin{Verbatim} @@ -493,109 +502,71 @@ init_elements () \subsection{Use of tables} % (fold) \label{sub:use_of_tables} -\subsubsection{Working with tables} % (fold) -\label{ssub:working_with_tables} -In this example, we search for circles that are tangent to both a given circle and a line, demonstrating that their centers lie on a parabola. +\subsubsection{Classic parabola} % (fold) +\label{ssub:classic_parabola} -The \code{points} table contains the coordinates of the centers of the identified circles. \TIKZ only requires a list of coordinate pairs enclosed in brackets. -The table that defines the circles is slightly more complex. It contains the centers and the tangency points between the circles and the given elements. These are sequences of four coordinates, stored in the table. Finally, the sequences are concatenated into a string using a comma (",") as the separator. Coordinates are read with the \tkzcname{foreach} macro, utilizing the |expand list| option. +This example moves away from the concept of Euclidean geometry, but the method used can be reused. +Here we want to draw a parabola whose axis of symmetry is parallel to the y-axis. +Knowing three of its points, we can determine the eqaation. +\begin{minipage}{.5\textwidth} \begin{Verbatim} -\makeatletter -\def\tkzPlotCoordinates{\pgfutil@ifnextchar[{\tkz@PlotCoordinates}{\tkz@PlotCoordinates[]}} -\def\tkz@PlotCoordinates[#1]#2{% -\draw[#1] plot coordinates {\directlua{tex.print(#2)}};} -\makeatother - - \directlua{ -scale =.5 -z.O = point : new (0,0) -z.P = point : new (0,6) -z.M = point : new (0,3) -z.I = point : new (1,0) -C.PM = circle : new (z.P,z.M) -list = {} -points = {} - for t = -0.24, 0.24, 0.004 do - if (t> - 0.002 and t< 0.002) then else - z.A = C.PM : point (t) - L.OI = line : new (z.O,z.I) - L.PA = line : new (z.P,z.A) - z.C = intersection (L.OI,L.PA) - L.tgt = C.PM : tangent_at (z.A) - z.X = intersection (L.tgt,L.OI) - z.o = bisector (z.X,z.A,z.C).pb - table.insert (points, "("..z.o.re..","..z.o.im..")") - table.insert (list,z.o.re.."/"..z.o.im.."/"..z.A.re.."/"..z.A.im) - end - end - list = table.concat(list,",") - } - -\begin{tikzpicture} -\tkzGetNodes -\tkzPlotCoordinates[smooth,blue]{points} - \foreach[expand list] \r/\s/\u/\v in {\tkzUseLua{list}} -{ - \tkzDefPoint(\u,\v){A} - \tkzDefPoint(\r,\s){o} - \tkzDrawCircle(o,A) - \tkzDrawPoints[red,size=.2pt](o,A) + z.a = point: new (1,0) + z.b = point: new (3,2) + z.c = point: new (0,2) + local A,B,C = parabola (z.a,z.b,z.c) + + function f(t0, t1, n) + local tbl = {} + for t = t0,t1,(t1-t0)/n do + y = A*t^2+B*t +C + table.insert (tbl, "("..t..","..y..")") + end + return tbl +end } -\tkzDrawCircles(P,M) -\tkzDrawPoints(P,M) +\begin{tikzpicture} + \tkzGetNodes + \tkzInit[xmin = -2,xmax=4,ymin =-1,ymax=6] + \tkzDrawX\tkzDrawY + \tkzDrawPoints[red,size=4pt](a,b,c) + \draw[smooth] plot coordinates {% + \directlua{tex.print(f(-1,3,100))}}; \end{tikzpicture} \end{Verbatim} +\end{minipage} +\begin{minipage}{.5\textwidth} + \directlua{ + z.a = point: new (1,0) + z.b = point: new (3,2) + z.c = point: new (0,2) + local A,B,C = parabola (z.a,z.b,z.c) + + function f(t0, t1, n) + local tbl = {} + for t = t0,t1,(t1-t0)/n do + y = A*t^2+B*t +C + table.insert (tbl, "("..t..","..y..")") + end + return tbl + end + } + \begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzInit[xmin = -2,xmax=4,ymin =-1,ymax=6] + \tkzDrawX\tkzDrawY + \tkzDrawPoints[red,size=4pt](a,b,c) + \draw[smooth] plot coordinates {% + \directlua{tex.print(f(-1,3,100))}}; + \end{tikzpicture} + \end{center} +\end{minipage} -\makeatletter -\def\tkzPlotCoordinates{\pgfutil@ifnextchar[{\tkz@PlotCoordinates}{\tkz@PlotCoordinates[]}} -\def\tkz@PlotCoordinates[#1]#2{% -\draw[#1] plot coordinates {\directlua{tex.print(#2)}};} -\makeatother - - -\directlua{ -scale =.5 -z.O = point : new (0,0) -z.P = point : new (0,6) -z.M = point : new (0,3) -z.I = point : new (1,0) -C.PM = circle : new (z.P,z.M) -list = {} -points = {} - for t = -0.24, 0.24, 0.004 do - if (t> - 0.002 and t< 0.002) then else - z.A = C.PM : point (t) - L.OI = line : new (z.O,z.I) - L.PA = line : new (z.P,z.A) - z.C = intersection (L.OI,L.PA) - L.tgt = C.PM : tangent_at (z.A) - z.X = intersection (L.tgt,L.OI) - z.o = bisector (z.X,z.A,z.C).pb - table.insert (points, "("..z.o.re..","..z.o.im..")") - table.insert (list,z.o.re.."/"..z.o.im.."/"..z.A.re.."/"..z.A.im) - end - end - list = table.concat(list,",") - } - -\begin{tikzpicture} -\tkzGetNodes -\tkzPlotCoordinates[smooth,blue]{points} - \foreach[expand list] \r/\s/\u/\v in {\tkzUseLua{list}} -{ - \tkzDefPoint(\u,\v){A} - \tkzDefPoint(\r,\s){o} - \tkzDrawCircle(o,A) - \tkzDrawPoints[red,size=.2pt](o,A) -} -\tkzDrawCircles(P,M) -\tkzDrawPoints(P,M) -\end{tikzpicture} -% subsubsection working_with_tables (end) +% subsubsection classic_parabola (end) \subsubsection{Plotting a curve} % (fold) @@ -617,83 +588,76 @@ function checknumber(x) end } -\def\val#1{% +\def\tkzval#1{% \directlua{% - local expr = [[\tkzfct]] + local expr = [[\tkzfct]] local f = load ((" return function (x) return (\percentchar s) end"):format (expr), nil, 't', math) () -tex.print(f(#1)) +tex.print(f(#1)) % Calcule la valeur pour l'entrée donnée }} -\def\calcval(#1,#2,#3,#4){% +\def\tkzcalcval(#1,#2,#3,#4,#5){% \directlua{ -local min, max, nb = #2, #3, #4 +local min, max, nb = #2, #3, #4 % Bornes et divisions local expr = [[#1]] -local points = {} - +#5 = {} local f = load (("return function (x) return (\percentchar s) end"):format (expr), nil, 't', math) () - for t = min,max,(max-min)/nb do local x = checknumber(t) local y = checknumber(f(t)) - table.insert (points, "("..x..","..y..")") - end - tex.print(points) - } -} + if (y==math.huge or y==-math.huge ) then tex.print("problem") end + table.insert (#5, "("..x..","..y..")") + end}} \def\tkzfct{x*exp(-x^2)+1} \begin{tikzpicture}[scale = 2] \tkzInit[xmin=-3,xmax=3,ymin=-2,ymax=2] \tkzDrawX\tkzDrawY - \draw[smooth] plot coordinates {\calcval(\tkzfct,-3,2,100)}; - \tkzDrawPoint(-3,\val{-3}) - \tkzDrawPoint(1,\val{1}) - \tkzDrawPoint(2,\val{2}) + \tkzcalcval(\tkzfct,-3,2,100,curve) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawPoint(-3,\tkzval{-3}) + \tkzDrawPoint(1,\tkzval{1}) + \tkzDrawPoint(2,\tkzval{2}) \end{tikzpicture} \begin{Verbatim} \makeatletter\let\percentchar\@percentchar\makeatother \directlua{ -function checknumber(x) - if string.find(x, "e") then - return string.format("\percentchar.12f",x) - else - return x - end -end} -\def\val#1{\directlua{% + +\def\tkzval#1{% +\directlua{% local expr = [[\tkzfct]] - local f = load (("return function (x) - return (\percentchar s) end"):format (expr), nil, 't', math) () -tex.print(f(#1)) + local f = load ((" + return function (x) + return (\percentchar s) + end"):format (expr), nil, 't', math) () +tex.print(f(#1)) % Calcule la valeur pour l'entrée donnée }} -\def\calcval(#1,#2,#3,#4){% -\directlua{% - local min, max, nb = #2, #3, #4 - local expr = [[#1]] - local points = {} - local f = load (("return function (x) - return (\percentchar s) end"):format (expr), nil, 't', math) () +\def\tkzcalcval(#1,#2,#3,#4,#5){% +\directlua{ +local min, max, nb = #2, #3, #4 % Bornes et divisions +local expr = [[#1]] +#5 = {} +local f = load (("return function (x) return (\percentchar s) end") + :format (expr), nil, 't', math) () for t = min,max,(max-min)/nb do - local x = checknumber(t) - local y = checknumber(f(t)) +local x = checknumber(t) +local y = checknumber(f(t)) if (y==math.huge or y==-math.huge ) then tex.print("problem") end - table.insert (points, "("..x..","..y..")") - end - tex.print(points) -}} + table.insert (#5, "("..x..","..y..")") + end}} \def\tkzfct{x*exp(-x^2)+1} \begin{tikzpicture} \tkzInit[xmin=-3,xmax=3,ymin=-2,ymax=2] \tkzDrawX\tkzDrawY - \draw[smooth] plot coordinates {\calcval(\tkzfct,-3,2,100)}; - \tkzDrawPoint(-3,\val{-3}) - \tkzDrawPoint(1,\val{1}) - \tkzDrawPoint(2,\val{2}) + \tkzcalcval(\tkzfct,-3,2,100,curve) + \tkzDrawCoordinates[smooth,cyan](curve) + \tkzDrawPoint(-3,\tkzval{-3}) + \tkzDrawPoint(1,\tkzval{1}) + \tkzDrawPoint(2,\tkzval{2}) \end{tikzpicture} \end{Verbatim} @@ -709,7 +673,7 @@ This function can be used for the following objects \item line \item circle \item triangle - \item ellipse + \item conic (parabola, hyperbola, ellipse) \end{itemize} The disk object doesn't exist, so with |in\_out\_disk| it's possible to determine whether a point is in a disk. @@ -782,19 +746,22 @@ if L.AB : in_out (z.X) end inline_bis = L.AB : in_out (z.Y) } -\hspace{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPoints(A,B,X,Y) -\tkzLabelPoints(A,B,X) -\tkzLabelPoints[left](Y) -\ifthenelse{\equal{\tkzUseLua{inline}}{true}}{ - \tkzDrawSegment[red](A,B) - \tkzLabelSegment(A,B){AX/AB = $\tkzUseLua{k}$}}{% - \tkzDrawSegment[blue](A,B)} -\ifthenelse{\equal{\tkzUseLua{inline_bis}}{false}}{ -\tkzDrawSegment[green](B,Y)}{} -\end{tikzpicture} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPoints(A,B,X,Y) + \tkzLabelPoints(A,B,X) + \tkzLabelPoints[left](Y) + \ifthenelse{\equal{\tkzUseLua{inline}}{true}}{ + \tkzDrawSegment[red](A,B) + \tkzLabelSegment(A,B){AX/AB = $\tkzUseLua{k}$}}{% + \tkzDrawSegment[blue](A,B)} + \ifthenelse{\equal{\tkzUseLua{inline_bis}}{false}}{ + \tkzDrawSegment[green](B,Y)}{} + \end{tikzpicture} +\end{center} + \end{minipage} % subsubsection in_out_for_a_line (end) % subsection in_out_method (end) @@ -893,7 +860,7 @@ The point method is a method for many objects: \begin{itemize} \item line , \item circle, - \item ellipse, + \item conic (parabola, hyperbola, ellipse), \item triangle. \end{itemize} @@ -925,8 +892,7 @@ init_elements () \hspace{\fill} \begin{minipage}{.5\textwidth} \directlua{% -init_elements () - scale =.75 + init_elements () z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 2 ) z.C = point : new ( 1 , 3 ) @@ -937,7 +903,7 @@ init_elements () z.J = C.AB : point (0.5) z.K = T.ABC : point (0.5) } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.75] \tkzGetNodes \tkzDrawLine(A,B) \tkzDrawCircle(A,B) @@ -982,4 +948,5 @@ The difference is that programming is more direct with primary functions and a l % subsection behind_the_objects (end) -% section in_depth_study (end)
\ No newline at end of file +% section in_depth_study (end) +\endinput
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex index acf50a22a1b..ef30d48d61c 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex @@ -2,7 +2,9 @@ \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. +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-conic. +Note that circles form a separate class from conics, which represent parabolas, hyperbolas and ellipses. +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) @@ -55,7 +57,7 @@ z.I = x end } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 2] \tkzGetNodes \tkzDrawSegments(A,B C,D) \tkzDrawPoints(A,B,C,D,I) @@ -99,7 +101,6 @@ init_elements () \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) @@ -112,7 +113,7 @@ z.I,_ = intersection (L.AB,C.OD) _,z.K = intersection (C.OD,L.AE) } -\begin{tikzpicture} +\begin{tikzpicture}[ scale = 2] \tkzGetNodes \tkzDrawLines[add=.1 and .1](A,B A,E) \tkzDrawCircle(O,D) @@ -179,8 +180,8 @@ Other examples: \ref{sub:altshiller}, \ref{sub:the_figure_pappus_circle} % subsection circle_circle (end) \newpage -\subsection{Line-ellipse} % (fold) -\label{sub:line_ellipse} +\subsection{Line-conic} % (fold) +\label{sub:line_conic} 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} @@ -188,69 +189,149 @@ The designation of intersection points is a little more complicated than the pre \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) + init_elements () + z.a = point: new (5 , 2) + z.b = point: new (-4 , 0) + L.ab = line : new (z.a,z.b) + z.c = L.ab.mid + z.v = L.ab: point (-.2) + local a = length (z.c,z.v) + local c = .5 * length(z.a, z.b) + local e = c / a + z.K = L.ab : report (a^2 / c, z.c) + z.Kp = (z.K-z.a) : orthogonal(2): at (z.K) + L.dir = line : new (z.K,z.Kp) + EL = conic: new (z.b,L.dir,e) + curve = EL : points (0,1,50) + z.m = point: new (2 , 4) + z.n = point: new (4 , 4) + L.mn = line : new (z.m,z.n) + z.r,z.s = intersection (EL,L.mn) } -\begin{tikzpicture} +\begin{tikzpicture}[scale =.5] \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) + \tkzDrawLines[red](a,b r,s) + \tkzDrawSegments(c,r c,s) + \tkzDrawPoints(a,b,c,r,s) + \tkzLabelPoints(a,b,c,r,s) + \tkzDrawCoordinates[smooth,red](curve) + \tkzFillAngles[green!30,opacity=.4](v,c,s) + \tkzFillAngles[green!80,opacity=.4](v,c,r) \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) + init_elements () + z.a = point: new (5 , 2) + z.b = point: new (-4 , 0) + L.ab = line : new (z.a,z.b) + z.c = L.ab.mid + z.v = L.ab: point (-.2) + local a = length (z.c,z.v) + local c = .5 * length(z.a, z.b) + local e = c / a + z.K = L.ab : report (a^2 / c, z.c) + z.Kp = (z.K-z.a) : orthogonal(2): at (z.K) + L.dir = line : new (z.K,z.Kp) + EL = conic: new (z.b,L.dir,e) + curve = EL : points (0,1,50) + z.m = point: new (2 , 4) + z.n = point: new (4 , 4) + L.mn = line : new (z.m,z.n) + z.r,z.s = intersection (EL,L.mn) } -\hspace*{\fill} -\begin{tikzpicture} + + +\begin{center} +\begin{tikzpicture}[scale =.5] \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) + \tkzDrawLines[red](a,b r,s) + \tkzDrawSegments(c,r c,s) + \tkzDrawPoints(a,b,c,r,s) + \tkzLabelPoints(a,b,c,r,s) + \tkzDrawCoordinates[smooth,red](curve) + \tkzFillAngles[green!30,opacity=.4](v,c,s) + \tkzFillAngles[green!80,opacity=.4](v,c,r) \end{tikzpicture} -\hspace*{\fill} +\end{center} \end{minipage} -Other examples: \ref{ssub:function_tkzname_ellipse__foci}, \ref{sub:hexagram} +Other examples: \ref{sub:hexagram} + +\subsubsection{Intersection all subtypes of conics} % (fold) +\label{ssub:intersection_all_subtypes_of_conics} + +\begin{Verbatim} +\directlua{ + z.A = point : new ( 0 , 0 ) + z.B = point : new ( 4 , -2 ) + L.dir = line : new (z.A,z.B) + z.F = point : new ( 2 , 2) + CO1 = conic : new(z.F,L.dir,.8) + CO2 = conic : new(z.F,L.dir, 1) + CO3 = conic : new(z.F,L.dir, 1.2) + curve1 = CO1 : points ( 0,1,50) + curve2 = CO2 : points (-5,5,50) + curve3 = CO3 : points (-5,5,50) + z.K = CO1.K + z.u,z.v = get_points(CO1.major_axis) + z.x = L.dir : report (-4,z.K) + z.y = L.dir : report ( 4,z.K) + z.r = point : new ( 0 , 4 ) + z.s = point : new ( 4 , 1 ) + L.rs = line : new (z.r,z.s) + z.u_1,z.u_2 = intersection (L.rs,CO1) + z.v_1,z.v_2 = intersection (L.rs,CO2) + z.w_1,z.w_2 = intersection (L.rs,CO3) +} +\begin{tikzpicture} + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add =.5 and .5](r,s u,v) + \tkzDrawLines(x,y) + \tkzDrawPoints[red](u_1,u_2,v_2,v_1,w_1,w_2) +\end{tikzpicture} +\end{Verbatim} +\directlua{ +z.A = point : new ( 0 , 0 ) +z.B = point : new ( 4 , -2 ) +L.dir = line : new (z.A,z.B) +z.F = point : new ( 2 , 2) +CO1 = conic : new(z.F,L.dir,.8) +CO2 = conic : new(z.F,L.dir, 1) +CO3 = conic : new(z.F,L.dir, 1.2) +curve1 = CO1 : points ( 0,1,50) +curve2 = CO2 : points (-5,5,50) +curve3 = CO3 : points (-5,5,50) +z.K = CO1.K +z.u,z.v = get_points(CO1.major_axis) +z.x = L.dir : report (-4,z.K) +z.y = L.dir : report ( 4,z.K) +z.r = point : new ( 0 , 4 ) +z.s = point : new ( 4 , 1 ) +L.rs = line : new (z.r,z.s) +z.u_1,z.u_2 = intersection (L.rs,CO1) +z.v_1,z.v_2 = intersection (L.rs,CO2) +z.w_1,z.w_2 = intersection (L.rs,CO3) +} + +\begin{center} + \begin{tikzpicture}[scale =.75] + \tkzGetNodes + \tkzDrawCoordinates[smooth](curve1) + \tkzDrawCoordinates[smooth](curve2) + \tkzDrawCoordinates[smooth](curve3) + \tkzDrawLines[add =.5 and .5](r,s u,v) + \tkzDrawLines(x,y) + \tkzDrawPoints[red](u_1,u_2,v_2,v_1,w_1,w_2) + \end{tikzpicture} +\end{center} + + +% subsubsection intersection_all_subtypes_of_conics (end) -% subsection line_ellipse (end) +% subsection line_conic (end) % section intersections (end)
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex index b520f6d058a..8423a6ee7ee 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex @@ -21,10 +21,10 @@ headings = small ]{tkz-doc} \gdef\tkznameofpack{tkz-elements} -\gdef\tkzversionofpack{3.10c} +\gdef\tkzversionofpack{3.30c} \gdef\tkzdateofpack{\today} \gdef\tkznameofdoc{tkz-elements.pdf} -\gdef\tkzversionofdoc{3.10c} +\gdef\tkzversionofdoc{3.30c} \gdef\tkzdateofdoc{\today} \gdef\tkzauthorofpack{Alain Matthes} \gdef\tkzadressofauthor{} @@ -63,36 +63,6 @@ pdftitle={\tkznameofpack}, pdfcreator={\tkzengine} } - -\usepackage{fontspec} -\setmainfont{texgyrepagella}[ - UprightFont = texgyrepagella-regular.otf, - SmallCapsFeatures={FakeSmallCaps}, - Extension = .otf, - UprightFont = *-regular , - ItalicFont = *-italic , - BoldFont = *-bold , - BoldItalicFont = *-bolditalic -] -\setsansfont{texgyreheros}[ - Extension = .otf, - UprightFont = *-regular , - ItalicFont = *-italic , - BoldFont = *-bold , - BoldItalicFont = *-bolditalic , - BoldItalicFeatures = {RawFeature=-smcp} % Désactiver smcp - ] - -\setmonofont{lmmono10-regular.otf}[ - Numbers={Lining,SlashedZero}, - ItalicFont=lmmonoslant10-regular.otf, - BoldFont=lmmonolt10-bold.otf, - BoldItalicFont=lmmonolt10-boldoblique.otf, -] -\newfontfamily\ttcondensed{lmmonoltcond10-regular.otf} -%% (La)TeX font-related declarations: -\linespread{1.05} % Pagella needs more space between lines -%\usepackage[math-style=literal,bold-style=literal]{unicode-math} \usepackage{unicode-math} \usepackage{fourier-otf} \setmathfont{Concrete-Math.otf} @@ -172,7 +142,6 @@ sharp corners % printnumber \let\pmpn\pgfmathprintnumber - \AtBeginDocument{\MakeShortVerb{\|}} % link to shortvrb \begin{document} @@ -182,10 +151,10 @@ sharp corners \clearpage -\defoffile{\lefthand\ \\ +\defoffile{ This document compiles some notes about \tkzname{\tkznameofpack}, the initial version of a \code{Lua} library designed to perform all the necessary calculations for defining objects in Euclidean geometry figures. Your document must be compiled using Lua\LaTeX.\\ With \pkg{tkz-elements}, definitions and calculations are exclusively conducted using \pkg{Lua}. \\ - The primary programming approach offered is oriented towards object programming, utilizing object classes such as point, line, triangle, circle, and ellipse. Currently, after the calculations are completed, \pkg{tkz-euclide} is used for drawing purposes. (but you can use \TIKZ)\\ + The main programming approach provided is object-oriented, utilizing object classes such as point, line, triangle, and conic. Currently, after the calculations are completed, \pkg{tkz-euclide} is used for drawing purposes. (but you can also use \TIKZ)\\ I discovered Lua and object-oriented programming while developing this package, so it's highly likely that I've made a few mistakes. If you'd like to contribute to the development of this package or provide advice on how to proceed, please contact me via email. } @@ -229,7 +198,8 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch \input{TKZdoc-elements-classes-line.tex} \input{TKZdoc-elements-classes-circle.tex} \input{TKZdoc-elements-classes-triangle.tex} -\input{TKZdoc-elements-classes-ellipse.tex} +\input{TKZdoc-elements-classes-conic.tex} +\input{TKZdoc-elements-classes-occs.tex} \input{TKZdoc-elements-classes-quadrilateral.tex} \input{TKZdoc-elements-classes-square.tex} \input{TKZdoc-elements-classes-rectangle.tex} @@ -241,7 +211,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch \input{TKZdoc-elements-intersection.tex} \input{TKZdoc-elements-indepthstudy.tex} \input{TKZdoc-elements-theorems.tex} -\input{TKZdoc-elements-examples.tex} + \input{TKZdoc-elements-examples.tex} \clearpage\newpage \small\printindex @@ -278,30 +248,30 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |norm -> d| \\ |arg -> d| \\ |get -> r,r| \\ -|sqrt -> p| \\ -|north(d) -> p| \\ -|south(d) -> p| \\ -|east(d) -> p| \\ -|west(d) -> p| \\ -|normalize(p) -> p| \\ +|sqrt -> p| \\ +|north(d) -> p| \\ +|south(d) -> p| \\ +|east(d) -> p| \\ +|west(d) -> p| \\ +|normalize(p) -> p| \\ |symmetry (...) -> O| \\ |rotation (an , ...) -> O| \\ |homothety (r , ...) -> O| \\ -|orthogonal(d) -> p| \\ -|at() -> p| \\ +|orthogonal(d) -> p| \\ +|at() -> p| \\ |print() -> s| \\ \\ \fbox{\textbf{line}} \\ \textbf{Attributes} table(\ref{line:att}) \\ -|pa,pb -> p| \\ +|pa,pb -> p| \\ |type -> s| \\ -|mid -> p| \\ -|north_pa -> p| \\ -|north_pb -> p| \\ -|south_pa -> p| \\ -|south_pb -> p| \\ -|east -> p| \\ -|west -> p| \\ +|mid -> p| \\ +|north_pa -> p| \\ +|north_pb -> p| \\ +|south_pa -> p| \\ +|south_pb -> p| \\ +|east -> p| \\ +|west -> p| \\ |slope -> r| \\ |length -> d| \\ |vec -> V| \\ @@ -314,25 +284,28 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |is_parallel (l) -> b| \\ |is_orthogonal (l) -> b| \\ |is_equidistant (p) -> b| \\ -|barycenter (r,r) -> p| \\ -|point (t) -> p| \\ -|midpoint () -> p| \\ -|harmonic_int (p) -> p| \\ -|harmonic_ext (p) -> p| \\ -|harmonic_both (d) -> p| \\ -|gold_ratio() -> p| \\ -|normalize () -> p| \\ -|normalize_inv () -> p| \\ -|_north_pa (d) -> p| \\ -|_north_pb (d) -> p| \\ -|_south_pa (d) -> p| \\ -|_south_pb (d) -> p| \\ -|_east (d) -> p| \\ -|_west (d) -> p| \\ -|report (r,p) -> p| \\ -|colinear_at (p,k) -> p| \\ +|barycenter (r,r) -> p| \\ +|point (t) -> p| \\ +|midpoint () -> p| \\ +|harmonic_int (p) -> p| \\ +|harmonic_ext (p) -> p| \\ +|harmonic_both (d) -> p| \\ +|gold_ratio() -> p| \\ +|normalize () -> p| \\ +|normalize_inv () -> p| \\ +|_north_pa (d) -> p| \\ +|_north_pb (d) -> p| \\ +|_south_pa (d) -> p| \\ +|_south_pb (d) -> p| \\ +|_east (d) -> p| \\ +|_west (d) -> p| \\ +|report (r,p) -> p| \\ +|colinear_at (p,k) -> p| \\ +|affinity (p) -> P| \\ +|affinity (pts) -> pts| \\ +|projection (pts) -> pts| \\ +|projection_ll (pts) -> pts| \\ |translation (...) -> O| \\ -|projection (...) -> O| \\ |reflection (...) -> O| \\ |ll_from ( p ) -> L| \\ |ortho_from ( p ) -> L| \\ @@ -362,7 +335,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |square (<swap>) -> T| \\ \\ \fbox{\textbf{triangle}} \\ -\textbf{Attributes} table(\ref{triangle:att}) \\ +\textbf{Attributes} table(\ref{triangle:att}) \\ |pa,pb,pc -> p| \\ |circumcenter -> p| \\ |centroid -> p| \\ @@ -370,18 +343,25 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |eulercenter -> p| \\ |orthocenter -> p| \\ |spiekercenter -> p| \\ -|type -> s| \\ -|a -> d| \\ -|b -> d| \\ -|c -> d| \\ -|ab -> L| \\ -|bc -> L| \\ -|ca -> L| \\ -|alpha -> r| \\ -|beta -> r| \\ -|gamma -> r| \\ +|type -> s| \\ +|a -> d| \\ +|b -> d| \\ +|c -> d| \\ +|ab -> L| \\ +|bc -> L| \\ +|ca -> L| \\ +|alpha -> r| \\ +|beta -> r| \\ +|area -> r| \\ +|semiperimeter -> r| \\ +|inradius -> r| \\ +|circumradius -> r| \\ \textbf{Methods} table(\ref{triangle:met}) \\ -|new (p,p,p) -> p| \\ +|new (p,p,p) -> T| \\ +|check_equilateral () -> b| \\ +|in_out (p) -> b| \\ +|area () -> d| \\ +|parallelogram () -> p| \\ |trilinear (r,r,r) -> p| \\ |barycentric (r,r,r) -> p| \\ |bevan_point () -> p| \\ @@ -398,13 +378,21 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |nine_points () -> p| \\ |point (t) -> p| \\ |soddy_center () -> p| \\ +|isogonal (p) -> p| \\ |conway_points () -> pts| \\ +|projection (p) -> p,p,p| \\ |euler_line () -> L| \\ |symmedian_line (n) -> L| \\ |altitude (n) -> L| \\ |bisector (n) -> L| \\ |bisector_ext(n) -> L| \\ |antiparallel(p,n) -> L| \\ +|brocard_axis () -> L| \\ +|simson_line (p) -> L| \\ +|steiner_line (p) -> L| \\ +|euler_line () -> L| \\ +|fermat_axis (p) -> L| \\ +|lemoine_axis () -> L| \\ |euler_circle () -> C| \\ |circum_circle() -> C| \\ |in_circle () -> C| \\ @@ -431,14 +419,8 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |symmedian () -> T| \\ |euler () -> T| \\ |pedal (p) -> T| \\ -|projection (p) -> p,p,p| \\ -|parallelogram () -> p| \\ -|area () -> d| \\ -|barycentric_coordinates(p)| \\ +|barycentric_coordinates(p)| \\ |-> r,r,r| \\ -|in_out (p) -> p| \\ -|check_equilateral () -> b| \\ - \\ \fbox{\textbf{circle}} \\ \textbf{Attributes} table(\ref{circle:att}) \\ |center -> p| \\ @@ -461,13 +443,13 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |in_out_disk (p) -> b| \\ |circles_position (C) -> s| \\ |power (p) -> r| \\ -|antipode (p) -> p| \\ -|midarc (p,p) -> p| \\ -|point (r) -> p| \\ -|random_pt (lower, upper) -> p| \\ -|internal_similitude (C) -> p| \\ -|external_similitude (C) -> p| \\ -|radical_center(C,<C>) -> p| \\ +|antipode (p) -> p| \\ +|midarc (p,p) -> p| \\ +|point (r) -> p| \\ +|random_pt (lower, upper) -> p| \\ +|internal_similitude (C) -> p| \\ +|external_similitude (C) -> p| \\ +|radical_center(C,<C>) -> p| \\ |tangent_at (p) -> L| \\ |radical_axis (C) -> L| \\ |radical_circle(C,<C>) -> C| \\ @@ -483,40 +465,54 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |tangent_from (p) -> L,L| \\ |inversion (...) -> O | \\ \\ -\fbox{\textbf{ellipse}} \\ -\textbf{Attributes} table(\ref{ellipse:met}) \\ +\fbox{\textbf{conic}} \\ +\textbf{Attributes} table(\ref{conic:att}) \\ |center -> p| \\ |vertex -> p| \\ |covertex -> p| \\ |Fa -> p| \\ |Fb -> p| \\ -|north -> p| \\ -|south -> p| \\ -|east -> p| \\ -|west -> p| \\ -|Rx -> d| \\ -|Ry -> d| \\ -|slope -> r| \\ -|type -> s| \\ -\textbf{Methods} table(\ref{ellipse:met}) \\ -|new (p,p,p) -> E| \\ -|foci (p,p,p) -> E| \\ -|radii (p,r,r,an) -> E| \\ +|center -> p| \\ +|K -> p| \\ +|e -> r| \\ +|a -> r| \\ +|b -> r| \\ +|c -> r| \\ +|h -> r| \\ +|p -> r| \\ +|Rx -> d| \\ +|Ry -> d| \\ +|slope -> r| \\ +|type -> s| \\ +|subtype -> s| \\ +|major_axis -> L| \\ +|minor_axis -> L| \\ +\textbf{Methods} table(\ref{conic:met}) \\ +|new (p,L,r) -> E| \\ +|points (r,r,n,< swap >) -> E| \\ +|point (r,< swap >) -> E| \\ |in_out (p) -> b| \\ |tangent_at (p) -> L| \\ |tangent_from (p) -> L| \\ -|point (r) -> p| \\ - \\ -\fbox{\textbf{square}} \\ +|asymptotes (r)) -> L| \\ +|orthoptic () -> L,Co| \\ +|antipode (p) -> p| \\ +\textbf{Functions} \\ +|EL_points (p,p,p) -> p,L,r| \\ +|EL_bifocal(p,p,r or p)-> p,L,r| \\ +|HY_bifocal(p,p,r or p)-> p,L,r| \\ +|PA_dir(p,p,p) -> p,L,r| \\ +|PA_focus(L,p,p) -> p,L,r| \\ +\fbox{\textbf{square} } \\ \textbf{Attributes} table(\ref{square:att}) \\ -|pa,pb,pc,pd -> p| \\ +|pa,pb,pc,pd -> p| \\ |type -> s| \\ |side -> d| \\ -|center -> p| \\ +|center -> p| \\ |circumradius -> d| \\ |inradius -> d| \\ |diagonal -> d| \\ -|proj -> p| \\ +|proj -> p| \\ |ab bc cd da -> L| \\ |ac bd -> L| \\ \textbf{Methods} table(\ref{square:met}) \\ @@ -546,37 +542,37 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch \fbox{\textbf{quadrilateral} } \\ \textbf{Attributes} table(\ref{quadrilateral:att}) \\ |pa,pb,pc,pd -> p| \\ -|ab bc cd da -> L | \\ -|ac bd -> L | \\ -|type -> s | \\ +|ab bc cd da -> L| \\ +|ac bd -> L| \\ +|type -> s| \\ |i -> p| \\ |g -> p| \\ -|a b c d -> r| \\ +|a b c d -> r| \\ \textbf{Methods} table(\ref{quadrilateral:met}) \\ |new (p,p,p,p) -> Q| \\ |iscyclic () -> b| \\ \\ \fbox{\textbf{parallelogram}} \\ \textbf{Attributes} table(\ref{parallelogram:att}) \\ -|pa,pb,pc,pd -> p| \\ +|pa,pb,pc,pd -> p| \\ |ab bc cd da -> L | \\ |ac bd -> L | \\ |type -> s | \\ -|center -> p| \\ +|center -> p| \\ \textbf{Methods} table(\ref{parallelogram:met}) \\ |new (p,p,p,p) ->| \\ |fourth (p,p,p) ->| \\ \\ \fbox{\textbf{Regular\_polygon}} \\ \textbf{Attributes} table(\ref{regular:att}) \\ -|center -> p| \\ -|through -> p | \\ +|center -> p| \\ +|through -> p | \\ |circle -> C | \\ |type -> s | \\ |side -> d| \\ |circumradius -> d| \\ |inradius -> d| \\ -|proj -> p| \\ +|proj -> p| \\ |nb -> i| \\ |angle -> an| \\ \textbf{Methods} table(\ref{regular:met}) \\ @@ -592,7 +588,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch |mtx -> M| \\ \textbf{Methods} table(\ref{vector:met}) \\ |new (p,p) -> V| \\ -|+ - * -> p| \\ +|+ - * -> p| \\ |normalize (V) -> V| \\ |orthogonal (d) -> V| \\ |scale (r) -> V| \\ @@ -651,6 +647,6 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch \\ \fbox{\textbf{Macros}} \\ |\tkzDN[n]{r} -> r| \\ -|\tkzDrawLuaEllipse((p,p,p))| \\ +|\tkzDrawLuaEllipse(p,p,p)| \\ \end{multicols} \end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex index c84a94b397a..3af96ed8ea5 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex @@ -1,11 +1,17 @@ \section{News} % (fold) \label{sec:news} -The documentation you are reading corresponds to the latest version (3.10c) of \tkzNamePack{tkz-elements}. +The documentation you are reading corresponds to the latest version (3.20c) of \tkzNamePack{tkz-elements}. One significant feature introduced in version 3.0 was the use of the \Iprimitive{directlua} macro, replacing the \tkzNameEnv{tkzelements} environment. -In this new version , most functions have been optimized and quelques méthodes apparaissent. In particular, methods for determining a circle tangent to different objects. (see \ref{ssub:c_l_pp}; \ref{ssub:method_c__ll__p}; \ref{ssub:method_c__c__pp}; \ref{ssub:method_c_cc_p}; \ref{ssub:method_c_lc_p}; and \ref{ssub:tr_method_c__ll__p}) +In version 3.10c, most functions have been optimized and quelques méthodes apparaissent. In particular, methods for determining a circle tangent to different objects. (see \ref{ssub:c_l_pp}; \ref{ssub:method_c__ll__p}; \ref{ssub:method_c__c__pp}; \ref{ssub:method_c_cc_p}; \ref{ssub:method_c_lc_p}; and \ref{ssub:tr_method_c__ll__p}) +In this version 3.20c, the main new feature is the introduction of the \code{conic} class, which allows you to define parabolas, hyperbolas, and ellipses. The previous \code{ellipse} class is still available but is now obsolete. This new definition is based on a focus, a directrix, and an eccentricity. Curve points are no longer entirely generated using \TIKZ{}. Instead, they are computed through a geometric construction and stored in a table, which is then passed to \TIKZ{} to draw the curve. This class also includes various methods, such as tangent computation and intersection with a line. +Use the \Imeth{conic}{tkzDrawCoordinates} macro to draw the curve and the \Imeth{conic}{tkzDrawPointOnCurve} macro to place a point on the curve. + +Other important additions in this version include projection parallel to a line, and the affinity transformation. + +A small change has been made to the \code{regular\_polygon} class. The \code{table} attribute has been replaced by the more explicit \code{vertices} attribute. % section news (end) \endinput diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex index 480b9d834d6..c654520fd41 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex @@ -28,10 +28,9 @@ A third advantage is that the code can be reused. \begin{document} \directlua{ - scale = 1.25 dofile ("sangaku.lua") } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 1.25] \tkzGetNodes \tkzDrawCircle(I,F) \tkzFillPolygon[color = purple](A,C,D)% @@ -44,12 +43,11 @@ A third advantage is that the code can be reused. \begin{minipage}{.5\textwidth} \directlua{ init_elements () - scale = .75 dofile ("sangaku.lua") } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[ scale = .75] \tkzGetNodes \tkzDrawCircle(I,F) \tkzFillPolygon[color = purple](A,C,D)% @@ -83,28 +81,10 @@ And here is the code for the \code{Lua} part: the file |ex_sangaku.lua| \subsection{Scale problem} % (fold) \label{sub:scale_problem} -If necessary, it's better to perform scaling in the \code{Lua} section. This approach tends to be more accurate. However, there is a caveat to be aware of. I've made it a point to avoid using numerical values in my codes whenever possible. Generally, these values only appear in the definition of fixed points. - If the \code{scale} option is used, scaling is applied when points are created. Let's imagine you want to organize your code as follows: - -\begin{mybox}{} - \begin{verbatim} - scale = 1.5 - xB = 8 - z.B = point : new ( xB,0 ) - \end{verbatim} -\end{mybox} - - -Scaling would then be ineffective, as the numerical values are not modified, only the point coordinates. To account for scaling, use the function \Igfct{math}{value (v) }. - -\begin{mybox}{} -\begin{verbatim} - scale = 1.5 - xB = value (8) - z.B = point : new ( xB,0 ) -\end{verbatim} -\end{mybox} +With the next version, I had previously suggested that it was preferable to perform scaling in the \code{Lua} part. However, from now on, the opposite will be true. Since all calculations are carried out in Lua, scaling with \TIKZ{} is not a problem after all. Moreover, the recent addition of functions for conics has caused several difficulties due to the handling of numerous distances (i.e., real numbers). This led me to review some functions, and I fixed a few bugs related to the use of scaling in the Lua part. +From now on, scaling should be reserved for the \TIKZ{} part. +The following documentation uses only scaling in the \tkzNameEnv{tikzpicture}. \subsection{Code presentation} % (fold) \label{sub:code_presentation} diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex index 3a6a66bf512..4cb443dd6f4 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex @@ -17,7 +17,7 @@ The primary function of tkz-elements is to calculate dimensions and define point On the right, you can see the minimum template. -The code is divided into two parts, represented by lua code, argument to the primitive |\directlua| and the environment \tkzNameEnv{tikzpicture}. In the first part, you place your Lua code, while in the second, you use tkz-euclide commands. +The code is divided into two parts, represented by lua code, argument to the primitive |\directlua| and the environment \tkzNameEnv{tikzpicture}. In the first part, you place your Lua code, while in the second, you use tkz-euclide commands. The \code{mini} option for \code{tkz-euclide} is used to load only the macros required for drawing. \vspace*{4.1 cm}% \end{minipage}\hspace*{\fill} @@ -27,13 +27,12 @@ The code is divided into two parts, represented by lua code, argument to the pri % !TEX TS-program = lualatex % Created by Alain Matthes \documentclass{standalone} -\usepackage{tkz-euclide} +\usepackage[mini]{tkz-euclide} % or simply TikZ \usepackage{tkz-elements} begin{document} \directlua{ - scale = 1 % definition of some points z.A = point : new ( , ) z.B = point : new ( , ) @@ -77,7 +76,6 @@ After obtaining all the necessary points for the drawing, they must be transform \subsubsection{The figure} \directlua{ - scale = 1.2 z.A = point: new (0 , 0) z.B = point: new (10 , 0) L.AB = line: new ( z.A, z.B) @@ -102,19 +100,22 @@ After obtaining all the necessary points for the drawing, they must be transform _,z.P_2 = intersection (C.QA,C.CB) z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter } -\hspace*{\fill} - \begin{tikzpicture} - \tkzGetNodes - \tkzDrawCircle[black,fill=yellow!20,opacity=.4](O_0,B) - \tkzDrawCircles[teal,fill=teal!40,opacity=.6](O_1,C O_2,B) - \tkzDrawCircle[purple,fill=purple!20,opacity=.4](O_3,P_0) - \tkzDrawArc[cyan,delta=10](Q,A)(P_0) - \tkzDrawArc[cyan,delta=10](P,P_0)(B) - \tkzDrawArc[cyan,delta=10](O,B)(A) - \tkzDrawPoints(A,B,C,O_0,O_1,O_2,P,Q,P_0,P_0,P_1,P_2,O) - \tkzLabelPoints(A,B,C,O_0,O_1,O_2,P,Q,P_0,P_0,P_1,P_2,O) - \end{tikzpicture} -\hspace*{\fill} + +\begin{center} +\begin{tikzpicture}[scale = .75] + \tkzGetNodes + \tkzDrawCircle[black,fill=yellow!20,opacity=.4](O_0,B) + \tkzDrawCircles[teal,fill=teal!40,opacity=.6](O_1,C O_2,B) + \tkzDrawCircle[purple,fill=purple!20,opacity=.4](O_3,P_0) + \tkzDrawArc[cyan,delta=10](Q,A)(P_0) + \tkzDrawArc[cyan,delta=10](P,P_0)(B) + \tkzDrawArc[cyan,delta=10](O,B)(A) + \tkzDrawPoints(A,B,C,O_0,O_1,O_2,P,Q,P_0,P_0,P_1,P_2,O) + \tkzLabelPoints(A,B,C,O_0,O_1,O_2,P,Q,P_0,P_0,P_1,P_2,O) +\end{tikzpicture} +\end{center} + + % subsection the_figure_pappus_circle (end) \subsubsection{The code} % (fold) @@ -176,7 +177,8 @@ Here's another example with comments \begin{Verbatim} % !TEX TS-program = lualatex \documentclass{standalone} -\usepackage{tkz-euclide,tkz-elements} +\usepackage[mini]{tkz-euclide} +\usepackage{tkz-elements} \begin{document} \directlua{ z.A = point: new (2 , 4) @@ -197,7 +199,6 @@ Here's another example with comments \end{Verbatim} \directlua{ init_elements () - scale = 1.2 z.A = point: new (2 , 4) z.B = point: new (0 , 0) z.C = point: new (8 , 0) @@ -213,21 +214,24 @@ Here's another example with comments z.I_A = intersection (L.AO,L.BC) } -\hspace*{\fill} -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawCircles(W,A I,T) -\tkzDrawArc(O,C)(B) -\tkzDrawPolygon(A,B,C) -\tkzDrawSegments[new](A,O B,O C,O) -\tkzDrawLine(B,I) -\tkzDrawPoints(A,B,C,I,I_A,W,O) -\tkzFillAngles[green!20,opacity=.3](A,O,B A,C,B) -\tkzFillAngles[teal!20,opacity=.3](O,B,C B,C,O B,A,O O,A,C) -\tkzLabelPoints(I,I_A,W,B,C,O) -\tkzLabelPoints[above](A) -\end{tikzpicture} -\hspace*{\fill} + +\begin{center} + \begin{tikzpicture}[ scale= 1.2] + \tkzGetNodes + \tkzDrawCircles(W,A I,T) + \tkzDrawArc(O,C)(B) + \tkzDrawPolygon(A,B,C) + \tkzDrawSegments[new](A,O B,O C,O) + \tkzDrawLine(B,I) + \tkzDrawPoints(A,B,C,I,I_A,W,O) + \tkzFillAngles[green!20,opacity=.3](A,O,B A,C,B) + \tkzFillAngles[teal!20,opacity=.3](O,B,C B,C,O B,A,O O,A,C) + \tkzLabelPoints(I,I_A,W,B,C,O) + \tkzLabelPoints[above](A) + \end{tikzpicture} +\end{center} + + \vspace{12pt} Here's the tikzpicture environment to obtain the drawing: diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex index 510b43df370..748af1f207e 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex @@ -35,7 +35,7 @@ clockwise from=27] { child[L2] { node[concept,circular drop shadow] {|Line|} } child[L2] { node[concept,circular drop shadow] {|Circle|} } child[L2] { node[concept,circular drop shadow] {|Triangle|} } - child[L2] { node[concept,circular drop shadow] {|Ellipse|} } + child[L2] { node[concept,circular drop shadow] {|Conic|} } child[L2] { node[concept,circular drop shadow] {|Square|} } }; \end{scope} @@ -43,7 +43,7 @@ clockwise from=27] { The current classes are : - \Iclass{point} (z) ; \Iclass{line} (L) ; \Iclass{circle} (C) ; \Iclass{triangle} (T) ; \Iclass{ellipse} (E) ; \Iclass{quadrilateral} (Q) ; \Iclass{square} (S) ; \Iclass{rectangle} (R) ; \Iclass{parallelogram} (P) ; \Iclass{regular\_polygon} (RP); \Iclass{vector} (V) and \Iclass{matrix} (M). + \Iclass{point} (z) ; \Iclass{line} (L) ; \Iclass{circle} (C) ; \Iclass{triangle} (T) ; \Iclass{conic} (E) ; \Iclass{quadrilateral} (Q) ; \Iclass{square} (S) ; \Iclass{rectangle} (R) ; \Iclass{parallelogram} (P) ; \Iclass{regular\_polygon} (RP); \Iclass{vector} (V) and \Iclass{matrix} (M). diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex index 681bae53921..701aa23534d 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex @@ -146,7 +146,7 @@ L.AI = line:new(z.A,z.I) L.BG = line:new(z.B,z.G) z.K = intersection(L.AI,L.BG) } -\begin{tikzpicture} +\begin{tikzpicture}[scale=.75] \tkzGetNodes \tkzDrawPolygons(A,B,C) \tkzDrawPoints(A,...,I,P,K) @@ -169,7 +169,6 @@ Given any triangle ABC, and any point M on BC, construct the incircle and circum \begin{Verbatim} \directlua{ init_elements() -scale = .75 z.A = point : new(0, 0) z.B = point : new(8, 0) z.C = point : new(1, 6) @@ -194,7 +193,7 @@ L.pR = L.CM:ortho_from(z.R) z.J = intersection(L.pS,L.CMA) z.K = intersection(L.pR,L.BMC) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawSegments(C,M) @@ -208,7 +207,6 @@ z.K = intersection(L.pR,L.BMC) \begin{minipage}{0.5\textwidth} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 8 , 0 ) z.C = point : new (1 , 6 ) @@ -233,7 +231,7 @@ L.pR = L.CM:ortho_from(z.R) z.J = intersection(L.pS,L.CMA) z.K = intersection(L.pR,L.BMC) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C) \tkzDrawSegments(C,M) @@ -256,7 +254,6 @@ Given a square, construct equilateral triangles on two adjacent edges, either bo \begin{Verbatim} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 8 , 0 ) L.AB = line:new (z.A,z.B) @@ -266,7 +263,7 @@ z.D = S.ABCD.pd z.E = S.ABCD.ab:equilateral().pc z.F = S.ABCD.bc:equilateral().pc } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPolygons[cyan](A,B,E B,C,F) @@ -278,7 +275,6 @@ z.F = S.ABCD.bc:equilateral().pc \begin{minipage}{0.5\textwidth} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 8 , 0 ) L.AB = line:new (z.A,z.B) @@ -288,7 +284,7 @@ z.D = S.ABCD.pd z.E = S.ABCD.ab:equilateral().pc z.F = S.ABCD.bc:equilateral().pc } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPolygons[cyan](A,B,E B,C,F) @@ -309,7 +305,6 @@ In Euclidean geometry, Varignon's theorem holds that the midpoints of the sides \begin{Verbatim} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 0 , 8 ) z.C = point : new ( 5 , 3 ) @@ -317,7 +312,7 @@ z.D = point : new ( -1 , 6 ) Q.ABCD = quadrilateral:new(z.A, z.B, z.C, z.D) z.E,z.F,z.G,z.H = midpoints(z.A,z.B,z.C,z.D) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPolygon[red](E,F,G,H) @@ -333,7 +328,6 @@ z.E,z.F,z.G,z.H = midpoints(z.A,z.B,z.C,z.D) \begin{minipage}{0.5\textwidth} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 0 , 8 ) z.C = point : new ( 5 , 3 ) @@ -342,7 +336,7 @@ Q.ABCD = quadrilateral:new(z.A, z.B, z.C, z.D) z.E,z.F,z.G,z.H = midpoints(z.A,z.B,z.C,z.D) } \begin{center} - \begin{tikzpicture} + \begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPolygon[red](E,F,G,H) @@ -372,7 +366,6 @@ Divide the sides of a quadrilateral into three equal parts. The figure formed by \begin{Verbatim} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) z.C = point : new ( 5 , 3 ) @@ -395,7 +388,7 @@ z.L = intersection(L.P23,L.P45) z.M = intersection(L.P45,L.P67) z.N = intersection(L.P67,L.P18) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPolygon[red](K,L,M,N) @@ -407,7 +400,6 @@ z.N = intersection(L.P67,L.P18) \begin{minipage}{0.5\textwidth} \directlua{ init_elements() -scale = .75 z.A = point : new ( 0 , 0 ) z.B = point : new ( 4 , 0 ) z.C = point : new ( 5 , 3 ) @@ -431,7 +423,7 @@ z.M = intersection(L.P45,L.P67) z.N = intersection(L.P67,L.P18) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzDrawPolygon(A,B,C,D) \tkzDrawPolygon[red](K,L,M,N) @@ -537,16 +529,19 @@ z.s = C.soddy_ext.through z.Xip,z.Yip,z.Zip = C.ins : inversion (z.Xi,z.Yi,z.Zi) } -\begin{tikzpicture} -\tkzGetNodes -\tkzDrawPolygon(A,B,C) -\tkzDrawPoints(A,B,C,E,F,G,Ha,Hb,Hc,X,Y,Z,X',Y',Z',Xi,Yi,Zi,I) -\tkzDrawPoints(Xi',Yi',Zi',S) -\tkzLabelPoints(A,B,C,E,F,G,X,Y,Z,X',Y',Z') -\tkzDrawCircles(A,G B,E C,F I,E S,Xi w,s) -\tkzDrawLines(X',Ha Y',Hb Z',Hc) -\tkzDrawLines(X',E Y',F Z',G) -\end{tikzpicture} +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzDrawPolygon(A,B,C) + \tkzDrawPoints(A,B,C,E,F,G,Ha,Hb,Hc,X,Y,Z,X',Y',Z',Xi,Yi,Zi,I) + \tkzDrawPoints(Xi',Yi',Zi',S) + \tkzLabelPoints(A,B,C,E,F,G,X,Y,Z,X',Y',Z') + \tkzDrawCircles(A,G B,E C,F I,E S,Xi w,s) + \tkzDrawLines(X',Ha Y',Hb Z',Hc) + \tkzDrawLines(X',E Y',F Z',G) + \end{tikzpicture} +\end{center} + % subsubsection soddy (end) \subsubsection{Soddy circle with function} % (fold) @@ -573,8 +568,8 @@ z.Xip,z.Yip,z.Zip = C.ins : inversion (z.xi,z.yi,z.zi) \begin{minipage}{.5\textwidth} \begin{Verbatim} - \directlua{% -init_elements () +\directlua{% + init_elements () z.A = point : new ( 0 , 0 ) z.B = point : new ( 5 , 0 ) z.C = point : new (4 , 4 ) @@ -722,7 +717,6 @@ When the first circle is the incircle then you get only 4 circles. \end{minipage} \begin{minipage}{.5\textwidth} \directlua{ -scale =1.5 init_elements () z.A = point : new ( 0 , 0 ) z.B = point : new ( 8 , 0 ) @@ -731,7 +725,7 @@ T.ABC = triangle : new (z.A,z.B,z.C) R = T.ABC.inradius/math.sin((T.ABC.alpha)/2) loadfile ("search_circle.lua")(R) } -\begin{tikzpicture} +\begin{tikzpicture}[scale = .75] \tkzGetNodes \tkzFillPolygon[lightgray!30](A,B,C) \foreach \n/\c in {1/red,2/orange,3/yellow,4/green,5/blue,6/violet} diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex index 1459bdfb42e..8a57ceab8f5 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex @@ -41,14 +41,13 @@ Point names can contain the underscore |_| and the macro \tkzcname{tkzGetNodes} \begin{Verbatim} \directlua{ init_elements () - scale = 1.5 z.o = point: new (0,0) z.a_1 = point: new (2,1) z.a_2 = point: new (1,2) z.ap = z.a_1 + z.a_2 z.app = z.a_1 - z.a_2 } -\begin{tikzpicture} +\begin{tikzpicture}[ scale = 1.5] \tkzGetNodes \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'') \tkzDrawSegments[red](a_1,a' a_2,a') @@ -61,23 +60,25 @@ Point names can contain the underscore |_| and the macro \tkzcname{tkzGetNodes} \begin{minipage}{0.5\textwidth} \directlua{ init_elements () - scale = 1.5 z.o = point: new (0,0) z.a_1 = point: new (2,1) z.a_2 = point: new (1,2) z.ap = z.a_1 + z.a_2 z.app = z.a_1 - z.a_2 } -\hspace{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'') - \tkzDrawSegments[red](a_1,a' a_2,a') - \tkzDrawSegments[blue](a_1,a'' a_2,a'') - \tkzDrawPoints(a_1,a_2,a',o,a'') - \tkzLabelPoints(o,a_1,a_2,a',a'') -\end{tikzpicture} -\hspace{\fill} + +\begin{center} + \begin{tikzpicture}[ scale = 1.5] + \tkzGetNodes + \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'') + \tkzDrawSegments[red](a_1,a' a_2,a') + \tkzDrawSegments[blue](a_1,a'' a_2,a'') + \tkzDrawPoints(a_1,a_2,a',o,a'') + \tkzLabelPoints(o,a_1,a_2,a',a'') + \end{tikzpicture} +\end{center} + + \end{minipage}% \newpage @@ -144,18 +145,21 @@ The intersection of the two lines lies at \end{Verbatim} \end{minipage} \begin{minipage}{0.5\textwidth} -\hspace{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzInit[xmin =0,ymin=0,xmax=5,ymax=3] - \tkzGrid\tkzAxeX\tkzAxeY - \tkzDrawPoints(a,...,d) - \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{ - \tkzDrawSegments[red](a,b c,d)}{% - \tkzDrawSegments[blue](a,b c,d)} - \tkzLabelPoints(a,...,d) -\end{tikzpicture} - \hspace{\fill} + +\begin{center} + \begin{tikzpicture} + \tkzGetNodes + \tkzInit[xmin =0,ymin=0,xmax=5,ymax=3] + \tkzGrid\tkzAxeX\tkzAxeY + \tkzDrawPoints(a,...,d) + \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{ + \tkzDrawSegments[red](a,b c,d)}{% + \tkzDrawSegments[blue](a,b c,d)} + \tkzLabelPoints(a,...,d) + \end{tikzpicture} +\end{center} + + \end{minipage} % subsubsection other_transfers (end) @@ -217,14 +221,16 @@ tex.print(list(f,#2,#3,#4))} tex.print(list(f,#2,#3,#4))} } -\begin{tikzpicture} -\tkzInit[xmin=1,xmax=3,ymin=0,ymax=2] -\tkzGrid -\tkzDrawX[right=3pt,label={$x$}] -\tkzDrawY[above=3pt,label={$f(x) = \dfrac{1-\mathrm{e}^{-x^2}}{1+\mathrm{e}^{-x^2}}$}] -\draw[cyan,thick] plot coordinates {\plotcoords{(1-exp(-x^2))/(exp(-x^2)+1)}{-3}{3}{100}}; +\begin{center} + \begin{tikzpicture} + \tkzInit[xmin=1,xmax=3,ymin=0,ymax=2] + \tkzGrid + \tkzDrawX[right=3pt,label={$x$}] + \tkzDrawY[above=3pt,label={$f(x) = \dfrac{1-\mathrm{e}^{-x^2}}{1+\mathrm{e}^{-x^2}}$}] + \draw[cyan,thick] plot coordinates {\plotcoords{(1-exp(-x^2))/(exp(-x^2)+1)}{-3}{3}{100}}; + \end{tikzpicture} +\end{center} -\end{tikzpicture} % subsubsection example_1 (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex index 4b288263919..b85fdc758b9 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex @@ -77,7 +77,6 @@ This version utilizes the simplest construction method made possible by Lua. \begin{mybox} \begin{Verbatim} \directlua{ - scale = .4 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (0.8,4) @@ -161,7 +160,6 @@ The subsequent section exclusively deals with drawings, and is managed by \pkg{t \vspace{1em} \directlua{ - scale = .4 z.A = point: new (0,0) z.B = point: new (6,0) z.C = point: new (0.8,4) @@ -181,23 +179,26 @@ The subsequent section exclusively deals with drawings, and is managed by \pkg{t z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec) } \begin{minipage}{\textwidth} -\hspace*{\fill} -\begin{tikzpicture} - \tkzGetNodes - \tkzFillCircles[green!30](O,xa) - \tkzFillCircles[teal!30](Ja,Ea Jb,Eb Jc,Ec) - \tkzFillCircles[lightgray](S,a) - \tkzFillCircles[green!30](N,Ea) - \tkzDrawPoints(xa,xb,xc) - \tkzDrawCircles(Ja,Ea Jb,Eb Jc,Ec S,a O,xa N,Ea) - \tkzClipCircle(O,xa) - \tkzDrawLines[add=3 and 3](A,B A,C B,C) - \tkzDrawPoints(O,A,B,C,S,Ea,Eb,Ec,N) - \tkzDrawSegments[dashed](S,xa S,xb S,xc) - \tkzLabelPoints(O,N,A,B) - \tkzLabelPoints[right](S,C) -\end{tikzpicture} -\hspace*{\fill} + +\begin{center} + \begin{tikzpicture}[ scale = .4] + \tkzGetNodes + \tkzFillCircles[green!30](O,xa) + \tkzFillCircles[teal!30](Ja,Ea Jb,Eb Jc,Ec) + \tkzFillCircles[lightgray](S,a) + \tkzFillCircles[green!30](N,Ea) + \tkzDrawPoints(xa,xb,xc) + \tkzDrawCircles(Ja,Ea Jb,Eb Jc,Ec S,a O,xa N,Ea) + \tkzClipCircle(O,xa) + \tkzDrawLines[add=3 and 3](A,B A,C B,C) + \tkzDrawPoints(O,A,B,C,S,Ea,Eb,Ec,N) + \tkzDrawSegments[dashed](S,xa S,xb S,xc) + \tkzLabelPoints(O,N,A,B) + \tkzLabelPoints[right](S,C) + \end{tikzpicture} +\end{center} + + \end{minipage} % subsubsection example_apollonius_circle (end) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.pdf b/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.pdf Binary files differindex 7762c969a3f..ef5719e09e3 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.pdf +++ b/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.pdf diff --git a/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex b/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex index 0e9fe3de977..c2d2cc74df7 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex +++ b/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex @@ -6,7 +6,6 @@ \begin{document} \directlua{ - scale = 2 z.A = point: new (0 , 0) z.B = point: new (5 , 1) L.AB = line : new (z.A,z.B) @@ -23,10 +22,8 @@ C.circum = T.ABC : circum_circle () C.euler = T.ABC : euler_circle () z.I,z.J = intersection (L.euler,C.euler) - E = ellipse: foci (z.H,z.O,z.I) - a = E.Rx - b = E.Ry - ang = math.deg(E.slope) + E = conic : new (EL_bifocal(z.H,z.O,z.I)) + curve = E :points (0,1,50) L.AH = line: new (z.A,z.H) L.BH = line: new (z.B,z.H) L.CH = line: new (z.C,z.H) @@ -41,19 +38,18 @@ z.U = intersection (L.XO,E) _,z.V = intersection (L.YO,E) _,z.W = intersection (L.ZO,E) - set_lua_to_tex {'a','b','ang'} } -\begin{tikzpicture} +\begin{tikzpicture}[scale = 2] \tkzGetNodes \tkzDrawPolygon(A,B,C) + \tkzDrawCoordinates[smooth,cyan](curve) \tkzDrawCircles[red](N,Ma O,A) \tkzDrawSegments(A,X B,Y C,Z B,Hb C,Hc X,O Y,O Z,O) \tkzDrawPolygon[red](U,V,W) \tkzDrawLine[blue](I,J) \tkzDrawPoints(I,J,U,V,W) \tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc) - \tkzDrawEllipse[blue](N,\a,\b,\ang) \tkzLabelPoints[blue,right](O,N,G,H,I,J) \tkzLabelPoints[red](U,V,W) \tkzLabelPoints(A,B,Z) diff --git a/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf b/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf Binary files differindex 940aba4ce35..41d875c619d 100644 --- a/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf +++ b/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty b/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty index f0b32574e1f..1d0e3a71a03 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty @@ -11,7 +11,7 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\ProvidesPackage{tkz-elements}[2025/01/06 version 3.10 Graphic Object Library] +\ProvidesPackage{tkz-elements}[2025/02/14 version 3.30 Graphic Object Library] %\RequirePackage{luacode} \directlua{ @@ -20,6 +20,7 @@ tkz_dc = 2 indirect = true inside = true + swap = true init_elements()}% \newenvironment{tkzelements} @@ -35,7 +36,8 @@ RP= {} S = {} T = {} - V = {}} + V = {} + CO={}} \luacode} {\endluacode}% @@ -54,6 +56,7 @@ end}} \def\tkzUseLua#1{\directlua{tex.print(#1)}} + \makeatletter \def\tkzDrawLuaEllipse{\pgfutil@ifnextchar[{\tkz@DrawLuaEllipse}{\tkz@DrawLuaEllipse[]}} \def\tkz@DrawLuaEllipse[#1](#2,#3,#4){% @@ -61,6 +64,21 @@ end}} \draw[#1](#2) ellipse [x radius=\tkzUseLua{length(z.#3,z.#2)}, y radius = \tkzUseLua{length(z.#4,z.#2)},rotate=\tkzUseLua{math.deg(slope_ (z.#3,z.#2))}]; \endgroup } + +\def\tkzDrawCoordinates{\pgfutil@ifnextchar[{\tkz@DrawCoordinates}{\tkz@DrawCoordinates[]}} +\def\tkz@DrawCoordinates[#1](#2){% +\begingroup +\draw[#1] plot coordinates {\directlua{tex.print(#2)}}; +\endgroup +} + +\def\tkzDrawPointOnCurve{\pgfutil@ifnextchar[{\tkz@DrawPointOnCurve}{\tkz@DrawPointOnCurve[]}} +\def\tkz@DrawPointOnCurve[#1](#2){% +\begingroup + \draw[#1] plot coordinates {(#2)}; +\endgroup +} + \def\tkzDN{\pgfutil@ifnextchar[{\tkz@DN}{\tkz@DN[2]}}% \def\tkz@DN[#1]#2{% \begingroup @@ -68,6 +86,7 @@ end}} \pgfmathprintnumber{#2} \endgroup } + \let\percentchar\@percentchar \makeatother diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua index 7ed5e1839f9..6760f09292b 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua @@ -1,6 +1,6 @@ -- tkz_elements-circles.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -26,7 +26,7 @@ function circle: new (c, t) -- c --> center t --> through local west = c - point (radius,0) local perimeter = 2*math.pi*radius local area = 4*math.pi*radius*radius - local o = { center = c, + local cir = { center = c, through = t, ct = ct, opp = opp, @@ -38,9 +38,9 @@ function circle: new (c, t) -- c --> center t --> through type = type, perimeter = perimeter, area = area} - setmetatable(o, self) + setmetatable(cir, self) self.__index = self - return o + return cir end -- other definition @@ -49,8 +49,7 @@ function circle: radius (center, radius) -- c --> center r --> radius end function circle: diameter (za, zb) - local c = midpoint_(za,zb) - return circle : new (c, zb ) + return circle : new (midpoint_(za,zb), zb ) end ----------------------- -- boolean -- @@ -96,7 +95,7 @@ end function circle: set_inversion (...) local tp = table.pack(...) local i - local t = {} + local t = {} for i=1,tp.n do table.insert( t , inversion_ ( self.center,self.through, tp[i] ) ) end @@ -109,14 +108,13 @@ function circle: midarc (z1,z2) end function circle: point (t) - local phi = 2*t* math.pi + local phi = 2 * t * math.pi return rotation_ (self.center,phi,self.through) end function circle: random_pt (lower, upper) -local t math.randomseed( tonumber(tostring(os.time()):reverse():sub(1,6)) ) - phi = lower + math.random() * (upper - lower) + local phi = lower + math.random() * (upper - lower) return point (self.center.re+self.radius*math.cos(phi),self.center.im+self.radius*math.sin(phi) ) end @@ -133,7 +131,7 @@ end ----------------------- function circle:tangent_at(pt) return line:new( - rotation_(pt, math.pi / 2, self.center), + rotation_(pt, math.pi / 2, self.center), rotation_(pt, -math.pi / 2, self.center) ) end @@ -154,6 +152,12 @@ end return line:new(t1, t2) end + function circle : polar (p) + local q = self : inversion (p) + local qa = (p-q) : orthogonal (1): at (q) + local qb = (q-p) : orthogonal (1): at (q) + return line : new (qa,qb) + end function circle:radical_center(C1, C2) if C2 == nil then @@ -217,8 +221,7 @@ end -- circles -- ----------------------- function circle: orthogonal_from (pt) - local t1,t2 - t1,t2 = tangent_from_ (self.center,self.through,pt) + local t1,t2 = tangent_from_ (self.center,self.through,pt) return circle : new (pt,t1) end @@ -237,19 +240,19 @@ function circle: orthogonal_through (pta,ptb) end function circle:inversion_C(C) - local p, q, x, y, X, Y - if C:in_out(self.center) then - p = C:antipode(self.center) - q = inversion_(self.center, self.through, p) - x = ortho_from_(q, self.center, p) - y = ortho_from_(q, p, self.center) - return line:new(x, y) - else - x, y = intersection_lc_(self.center, C.center, C.center, C.through) - X = inversion_(self.center, self.through, x) - Y = inversion_(self.center, self.through, y) - return circle:new(midpoint_(X, Y), X) - end + local p, q, x, y, X, Y + if C:in_out(self.center) then + p = C:antipode(self.center) + q = inversion_(self.center, self.through, p) + x = ortho_from_(q, self.center, p) + y = ortho_from_(q, p, self.center) + return line:new(x, y) + else + x, y = intersection_lc_(self.center, C.center, C.center, C.through) + X = inversion_(self.center, self.through, x) + Y = inversion_(self.center, self.through, y) + return circle:new(midpoint_(X, Y), X) + end end function circle:inversion(...) @@ -274,11 +277,10 @@ function circle: orthogonal_through (pta,ptb) end function circle: draw () - local x,y - x, y = self.center: get () - local r = self.radius - local frmt = '\\draw (%0.3f,%0.3f) circle [radius=%0.3f];' - tex.sprint(string.format(frmt, x,y,r)) + local x, y = self.center: get () + local r = self.radius + local frmt = '\\draw (%0.3f,%0.3f) circle [radius=%0.3f];' + tex.sprint(string.format(frmt, x,y,r)) end function circle: midcircle(C) diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua index 3469a89c418..3d7f7141ef0 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua @@ -1,6 +1,6 @@ -- tkz_elements_class.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- from class.lua (Simple Lua Classes from Lua-users wiki) -- Compatible with Lua 5.1 (not 5.0). -- http://lua-users.org/wiki/SimpleLuaClasses DavidManura diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua new file mode 100644 index 00000000000..7ab893b0661 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua @@ -0,0 +1,241 @@ +-- tkz_elements-ellipses.lua +-- date 2025/02/14 +-- version 3.30 +-- Copyright 2024 Alain Matthes +-- This work may be distributed and/or modified under the +-- conditions of the LaTeX Project Public License, either version 1.3 +-- of this license or (at your option) any later version. +-- The latest version of this license is in +-- http://www.latex-project.org/lppl.txt +-- and version 1.3 or later is part of all distributions of LaTeX +-- version 2005/12/01 or later. +-- This work has the LPPL maintenance status “maintained”. +-- The Current Maintainer of this work is Alain Matthes. + +--------------------------------------------------------------------------- +-- circles +--------------------------------------------------------------------------- +-- warning : parabola no center,no second focus, no covertex +conic = {} +function conic: new (Fa,Di,ecc) -- focus, directrix, eccentricity + local type = 'conic' + local e = ecc + local subtype = get_subtype(e) + local K = projection_(Di.pa,Di.pb,Fa) + local h = length(K,Fa) + local a = get_a(h, e) + local b = get_b(h, e) -- only hy and el + local c = get_c(h, e) + local p = e * h -- demi latus rectum if hy and el b^2/a + local slope = slope_(K, Fa) + local major_axis = line : new (K, Fa) + local directrix = Di + local vertex = get_vertex(Fa, K, e, h) + -- pb No center, no covertex, no Fb with parabola + local center = conic_center(Fa, K, e, h ) + local Fb = next_focus(Fa, K, e, h) + local covertex = get_covertex(Fa, K ,e, h) + local minor_axis = get_minor_axis(Fa, K ,e, h) + local o = { type = type, + subtype = subtype, + K = K, + e = e, + h = h , + a = a, + b = b, + c = c, + p = p, + Rx = a, + Ry = b, + Fa = Fa, + Fb = Fb, + center = center, + vertex = vertex, + covertex = covertex, + major_axis = major_axis, + minor_axis = minor_axis, + directrix = directrix, + slope = slope + } + setmetatable(o, self) + self.__index = self + return o +end + + + +function conic: points(ta, tb, nb,swap) + if not swap then + return get_points_conic_(self, ta, tb, nb) + else + return get_points_sym_conic_(self, ta, tb, nb) + end +end + + +-- function conic : points_sym (ta,tb,nb) +-- return get_points_sym_conic_ (self,ta,tb,nb) +-- end + +function conic : point (t,swap) + if not swap then + return get_one_point_conic_ (self,t) + else + return get_one_point_hyperbola_ii (self,t) + end +end + +function conic: antipode (pt) + if self.e ~= 1 then + return 2 * self.center - pt +else + -- traitement erreur +end +end + +function conic:tangent_at(pt) -- actually only parabola + local u, v + + if self.e == 1 then -- Parabola + local h = self.directrix:projection(pt) + u = self.vertex:identity(pt) and ll_from_(pt, self.directrix.pa, self.directrix.pb) or in_center_(pt, h, self.Fa) + + elseif self.e > 1 then -- Hyperbola + u = self.vertex:identity(pt) and ll_from_(pt, self.directrix.pa, self.directrix.pb) or in_center_(pt, self.Fb, self.Fa) + + elseif self.e < 1 then -- Ellipse + local zi = in_center_(self.Fa, pt, self.Fb) + u = pt + (zi - pt) * point(0, 1) + end + + u = normalize_(pt, u) + v = pt:symmetry(u) + + return line:new(u, v) +end + + +-- intersection line parabola +function conic : inter_Pa_line (pa,pb) + local sys = occs : new (self.directrix ,self.vertex) + local Xa,Ya = sys : coordinates (pa) + local Xb,Yb = sys : coordinates (pb) + local r1,r2 = solve_para_line (self.h,param_line (Xa,Ya,Xb,Yb)) + if r1 ==false then + local s1= false + local s2 =false + return s1,s2 + else + local s1,s2 = self : point(r1) , self : point(r2) + if length(pa,s1) < length(pa,s2) then return s1,s2 else return s2,s1 end + end +end + +function conic:tangent_from(pt) + if self.e == 1 then -- Parabola + local sys = occs : new (self.directrix ,self.vertex) + local Xb,Yb = sys : coordinates (pt) + local p1, p2 = solve_quadratic(self.h, -2 * Xb, 2 * Yb) + local s1 = self:point(self.h * p1) + local s2 = self:point(self.h * p2) + return line:new(pt, s1), line:new(pt, s2) + + elseif self.e > 1 then -- Hyperbola + local C = circle:radius(self.Fb, 2 * self.a) + local m, n = intersection_cc_(pt, self.Fa, self.Fb, C.through) + local u, v = mediator_(m, self.Fa) + local x, y = mediator_(n, self.Fa) + local T1, T2 = line:new(u, v), line:new(x, y) + local d1, d2 = T1:distance(self.Fa), T2:distance(self.Fa) + if d2 < d1 then T2, T1 = T1, T2 end + local Fbsym = symmetry_axial_(T1.pa, T1.pb, self.Fb) + local t1 = intersection_ll_(Fbsym, self.Fa, T1.pa, T1.pb) + local Fasym = symmetry_axial_(T2.pa, T2.pb, self.Fa) + local t2 = intersection_ll_(Fasym, self.Fb, T2.pa, T2.pb) + return line:new(pt, t1), line:new(pt, t2) + + elseif self.e < 1 then -- Ellipse + local w = report_(self.Fb, self.Fa, 2 * self.a) + local s1, s2 = intersection_cc_(pt, self.Fa, self.Fb, w) + local u, v = mediator_(s1, self.Fa) + local U = intersection_ll_(u, v, self.Fb, s1) + u, v = mediator_(s2, self.Fa) + local V = intersection_ll_(u, v, self.Fb, s2) + return line:new(pt, U), line:new(pt, V) + end +end + + -- intersection line hyperbola + function conic:inter_Hy_line(pa, pb) + local function hyp_fct (x) + return self.a * math.sqrt(1 + (x^2) / (self.b)^2) + end + + local sys = occs : new (self.directrix,self.center) + local XA,YA = sys : coordinates (pa) + local XB,YB = sys : coordinates (pb) + YA=-YA + YB=-YB + XA=-XA + XB=-XB + if math.abs(XA - XB) < tkz_epsilon then + local xs = XA + local fa, c = self.Fa, self.center + local s1, s2 = hyp_fct(xs), -hyp_fct(xs) + local wx = report_(self.directrix.pa, self.directrix.pb, xs, report_(c, fa, s1)) + local wy = report_(self.directrix.pa, self.directrix.pb, xs, report_(c, fa, s2)) + + return wx, wy + else + local r, s = param_line(XA, YA, XB, YB) + local t1, t2 = solve_hyper_line(self.a, self.b, r, s) + if t1 ==false then return pa,pb else + local s1, s2 = self : point(t1), self : point(t2) + + if r * t2 + s < 0 then s2 = self:point(t2,swap) end + if r * t1 + s < 0 then s1 = self:point(t1,swap) end + + if length(pa,s1) < length(pa,s2) then return s1,s2 else return s2,s1 end + end + end + end + +function conic : in_out(pt) + if self.e == 1 then -- Parabola + return PA_in_out (self,pt) + elseif self.e > 1 then -- Hyperbola + return HY_in_out (self,pt) + elseif self.e < 1 then -- Ellipse + return EL_in_out (self,pt) + end +end + +function conic: orthoptic () + if self.e == 1 then -- Parabola + return self.directrix + elseif self.e > 1 and self.e < math.sqrt(2) then -- Hyperbola + local r = math.sqrt(self.a * self.a - self.b * self.b) + local th = report_(self.center,self.vertex,r) + return circle : new (self.center, th) + elseif self.e < 1 then -- Ellipse + local r = math.sqrt(self.a * self.a + self.b * self.b) + local th = report_(self.center,self.vertex,r) + return circle : new (self.center, th) + end +end + +function conic : asymptotes () + if self.e >1 then + local pa = report_(self.Fa,self.Fb,self.a,self.center) + local p1 = (pa-self.center) : orthogonal (self.b) : at (pa) + local p2 = (pa-self.center) : orthogonal (-self.b) : at (pa) + local q1 = symmetry_(self.center,p1) + local q2 = symmetry_(self.center,p2) + return line :new (p1,q1), line : new (p2,q2) + else + tex.error("An error has occurred", {"It's not an hyperbola"}) + return + end +end + +return conic
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua index 9983ae3391e..2ec8174e1c5 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua @@ -1,6 +1,6 @@ -- tkz_elements-ellipses.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -32,6 +32,8 @@ function ellipse: new(pc, pa ,pb) local south = 2 * pc - pb local vertex = pa local covertex = pb + local e = c/Rx + local h = (Rx*Rx-c*c)/c local o = { center = pc, vertex = vertex, covertex = covertex, @@ -44,7 +46,9 @@ function ellipse: new(pc, pa ,pb) north = north, south = south, east = east, - west = west } + west = west, + e = e, + h = h } setmetatable(o, self) self.__index = self return o @@ -62,30 +66,34 @@ end function ellipse: radii (c,a,b,sl ) local z,v,cov - z = point (a*math.cos(sl),a*math.sin(sl)) - v = c + z - z.V = v + z = point (a*math.cos(sl),a*math.sin(sl)) + v = c + z + z.V = v cov = (v-c)*point(0,1)/point.abs(v-c)*b+c return ellipse: new (c,v,cov) end +function ellipse: eccentricity (f1,d,e) + local E = conic : new (f1,d,e) + return ellipse: new (E.c,E.vertex,E.covertex) +end + function ellipse: point (t) local phi = 2*t* math.pi - local ax,ay,bx,by,cx,cy - cx = self.center.re - cy = self.center.im - ax = self.Rx * math.cos(self.slope) * math.cos(phi) - ay = self.Rx * math.sin(self.slope) * math.cos(phi) - bx = -self.Ry * math.sin(self.slope) * math.sin(phi) - by = self.Ry * math.cos(self.slope) * math.sin(phi) + local cx = self.center.re + local cy = self.center.im + local ax = self.Rx * math.cos(self.slope) * math.cos(phi) + local ay = self.Rx * math.sin(self.slope) * math.cos(phi) + local bx = -self.Ry * math.sin(self.slope) * math.sin(phi) + local by = self.Ry * math.cos(self.slope) * math.sin(phi) return point (cx+ax+bx,cy+ay+by) end function ellipse: tangent_at (pt) - local zi,u,v - zi = in_center_ (self.Fa,pt,self.Fb) - u = pt+(zi-pt)*point(0,1) - v = pt : symmetry (u) + local zi = in_center_ (self.Fa,pt,self.Fb) + local u = pt+(zi-pt)*point(0,1) + local u = normalize_(pt,u) + local v = pt : symmetry (u) return line : new (u,v) end diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua index 5dfece2eb38..2051c0338c7 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_circles.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua new file mode 100644 index 00000000000..59e85227100 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua @@ -0,0 +1,316 @@ +-- tkz_elements-square.lua +-- date 2025/02/14 +-- version 3.30 +-- Copyright 2024 Alain Matthes +-- This work may be distributed and/or modified under the +-- conditions of the LaTeX Project Public License, either version 1.3 +-- of this license or (at your option) any later version. +-- The latest version of this license is in +-- http://www.latex-project.org/lppl.txt +-- and version 1.3 or later is part of all distributions of LaTeX +-- version 2005/12/01 or later. +-- This work has the LPPL maintenance status “maintained”. +-- The Current Maintainer of this work is Alain Matthes. +--------------------------------------------------------------------------- +-- Tracing +--------------------------------------------------------------------------- +---------- with eccentricity ---------- + +function get_a(h,e) + if e == 1 then return nil + elseif e < 1 then return e * h / (1 - e^2) + elseif e > 1 then return e * h / (e^2 - 1) +end +end + +function get_b(h,e) + if e == 1 then return nil + elseif e < 1 then return e * h / math.sqrt(1 - e^2) + elseif e > 1 then return e * h / math.sqrt(e^2 - 1) +end +end + +function get_c (h,e) + if e == 1 then return nil + elseif e < 1 then return e^2 * h / (1 - e^2) + elseif e > 1 then return e^2 * h / (e^2 - 1) +end +end + +function next_focus(F,K,e,h) + if e == 1 then return nil + elseif e > 1 then return report_(F,K, 2 * get_c(h,e)) + elseif e < 1 then return report_(F,K,-2 * get_c(h,e)) + end +end + +function conic_center(F,K,e,h) + if e == 1 then return nil + elseif e > 1 then return report_(F,K, get_c(h,e)) + elseif e < 1 then return report_(F,K,-get_c(h,e)) + end + end + + function get_subtype(e) + if e == 1 then return "parabola" + elseif e < 1 then return "ellipse" + elseif e > 1 then return "hyperbola" + end +end + + function get_vertex(F,K,e,h) + if e == 1 then return report_(K,F,h/2) + else + local center = conic_center(F,K,e,h) + return report_( center,F,get_a (h,e)) + end +end + + function get_covertex(F,K,e,h) + if e == 1 then return nil + else + local center = conic_center(F,K,e,h) + return report_(center, ortho_from_ (center,center,F),get_b (h,e)) + end +end + +function get_minor_axis(F,K,e,h) + if e == 1 then return nil + else + local center = conic_center(F,K,e,h) + local pa = get_covertex(F,K,e,h) + local pb = symmetry_(center,pa) + return line : new (pa,pb) + end +end + +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + +function get_points_conic_ (Co,ta,tb,nb) + if Co.e == 1 then return get_points_parabola (Co, ta, tb, nb) + elseif Co.e > 1 then return get_points_hyperbola (Co, ta, tb, nb) + elseif Co.e < 1 then return get_points_ellipse (Co, ta, tb, nb) + end +end + +function get_points_sym_conic_ (Co,ta,tb,nb) + return get_points_hyperbola_sym (Co, ta, tb, nb) +end + +function get_points_parabola (C, ta, tb, nb) + local points = {} + --Function to add points in a given range + for t = ta,tb, 1 / nb do + local T = C.directrix : report (t,C.K) + local LL = C.major_axis : ll_from (T) + local x,y = mediator_ (C.Fa,T) + local pt = intersection_ll_(x,y,LL.pa,LL.pb) + table.insert (points, "("..checknumber(pt.re)..","..checknumber(pt.im)..")") + end + return points +end + +function get_points_hyperbola (C,ta,tb,nb) +local points = {} +local LC = C.minor_axis +local LS = LC : ll_from (C.vertex) + for t = ta, tb, 1/nb do + local T = C.directrix : report (t,C.K) + local LT = C.major_axis : ll_from (T) + local D = intersection_ll_ (LC.pa,LC.pb,C.Fa,T) + local E = intersection_ll_ (LS.pa,LS.pb,C.Fa,T) + local P,Q = intersection_lc_ (LT.pa,LT.pb,D,E) + if length(P,C.Fa) > length(Q,C.Fa) then P,Q = Q,P end + table.insert (points, "("..checknumber(P.re)..","..checknumber(P.im)..")") + end + return points +end + +function get_points_hyperbola_sym (C,ta,tb,nb) +local points = {} +local LC = C.minor_axis +local LS = LC : ll_from (C.vertex) + for t = ta, tb, 1/nb do + local T = C.directrix : report (t,C.K) + local LT = C.major_axis : ll_from (T) + local D = intersection_ll_ (LC.pa,LC.pb,C.Fa,T) + local E = intersection_ll_ (LS.pa,LS.pb,C.Fa,T) + local M,N = intersection_lc_ (LT.pa,LT.pb,D,E) + local P = symmetry_(C.center,M) + local Q = symmetry_(C.center,N) + if length(P,C.Fb) > length(Q,C.Fb) then P,Q = Q,P end + table.insert (points, "("..checknumber(P.re)..","..checknumber(P.im)..")") + end + return points +end + +function get_points_ellipse (C,x,y,nb) +local points = {} +for t = x,y+1/nb,1/nb do + -- point on circle + CI = circle : new (C.center,C.vertex) + local M = CI : point(t) + -- point on ellipse + local P = affinity_ (C.Fa, C.Fb, C.center, C.covertex, C.b/C.a, M) + table.insert(points, "("..checknumber(P.re)..","..checknumber(P.im)..")") + end +return points +end +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + +function get_one_point_conic_(C, t) + if C.e < 1 then + return get_one_point_ellipse(C, t) + else + local a, b = C.directrix.pa, C.directrix.pb + local c, d = C.Fa, C.K + local angle = angle_between_vectors(a, b, c, d) + local newDir = (angle < 0) and line:new(b, a) or line:new(a, b) + + local T = newDir:report(t, C.K) + local LT = C.major_axis:ll_from(T) + + if C.e == 1 then + return get_one_point_parabola(C, T, LT) + else + return get_one_point_hyperbola(C, T, LT) + end + end +end + +function get_one_point_parabola (C,T,LT) + local x,y = mediator_ (C.Fa,T) + return intersection_ll_(x,y,LT.pa,LT.pb) +end + +function get_one_point_hyperbola (C,T,LT) + local LC = C.minor_axis + local LS = LC : ll_from (C.vertex) + local D = intersection_ll_ (LC.pa,LC.pb,C.Fa,T) + local E = intersection_ll_ (LS.pa,LS.pb,C.Fa,T) + local P,Q = intersection_lc_ (LT.pa,LT.pb,D,E) + if length(P,C.Fa) > length(Q,C.Fa) then P,Q = Q,P end + return P +end + +function get_one_point_hyperbola_ii (C,t) + local T = C.directrix : report (t,C.K) + local LT = C.major_axis : ll_from (T) + local p = get_one_point_hyperbola (C, T, LT) + local D = C.minor_axis + return symmetry_axial_(D.pa,D.pb,p) +end + +function get_one_point_ellipse (C,t) + -- point on circle + CI = circle : new (C.center,C.vertex) + local M = CI : point(t) + return affinity_ (C.Fa, C.Fb, C.center, C.covertex, C.b/C.a, M) +end + +function EL_in_out (CO,pt) + local d = point.abs (pt - CO.center) + local L = line : new(CO.center,pt) + local x,y = intersection(L,CO) + local dx = point.abs (x - CO.center) + if d < dx then + return true + else + return false + end +end + +function PA_in_out (PA,pt) + local D = PA.major_axis + local Dp = D : ortho_from (pt) + local x,y = intersection (Dp,PA) + if x == false then return false + else + local L = line : new (x,y) + return L : in_out_segment(pt) + end +end + +function HY_in_out (HY,pt) + local D = HY.major_axis + local Dp = D : ortho_from (pt) + local x,y = intersection (Dp,HY) + if x == false then return false + else + local L = line : new (x,y) + return L : in_out_segment(pt) + end +end + +function EL_points (center,vertex,covertex) + local a = length(center,vertex) + local b = length(center,covertex) + local c = math.sqrt(a^2-b^2) + local F = report_(center,vertex,c) + local e = c/a + local h = b^2/c + local K = report_(center,F,b^2/c,F) + local axis = line : new (vertex,center) + local L = axis : ortho_from (K) + return F,L,e +end + +function EL_bifocal (Fa,Fb,x) + local a + if type(x) == "number" then + a = x + else -- x is a point + a = (length(Fa,x)+length(Fb,x))/2 + end + local center = midpoint_(Fa,Fb) + local c = length(center,Fa) + local e = c/a + local b = math.sqrt(a^2-c^2) + local h = b^2/c + local K = report_(center,Fa,b^2/c,Fa) + local vertex = report_(center,Fa,a) + local axis = line : new (vertex,center) + local L = axis : ortho_from (K) +return Fa,L,e +end + + +function HY_bifocal (Fa,Fb,x) + local a + if type(x) == "number" then + a = x + else -- x is a point + a =math.abs( (length(Fa,x)-length(Fb,x)))/2 + end + local center = midpoint_(Fa,Fb) + local c = length(center,Fa) + local e = c/a + local b = math.sqrt(c^2-a^2) + local h = b^2/c + local K = report_(center,Fa,-b^2/c,Fa) + local vertex = report_(center,Fa,a) + local axis = line : new (vertex,center) + local L = axis : ortho_from (K) +return Fa,L,e +end + +function PA_dir (F,A,B) + local CA = circle :new (A,F) + local CB = circle :new (B,F) + local R,S,U,V = CA:common_tangent(CB) + return line:new(R,S),line:new(U,V) +end + +function PA_focus (D,pA,pB) + local HA = D : projection (pA) + local HB = D : projection (pB) + local x,y = intersection_cc_ (pA,HA,pB,HB) + if x == false then + error("An error has occurred. Bad configuration") + return + else + return x,y + end +end
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua index cb318bb6d00..fe6aa759e33 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua @@ -1,6 +1,6 @@ -- tkz_elements_intersections.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -168,9 +168,9 @@ function intersection_cc_(ca, pa, cb, pb) end function intersection(X, Y) - local t = {} -- Tableau pour stocker les points d'intersection + local t = {} -- Table for storing intersection points - -- Cas où X est un cercle + -- When X is a circle if X.type == 'circle' then if Y.type == 'circle' then -- Intersection entre deux cercles @@ -183,7 +183,7 @@ function intersection(X, Y) table.insert(t, z2) end - -- Cas où X est une droite + -- When X is a line elseif X.type == 'line' then if Y.type == 'circle' then -- Intersection entre une droite et un cercle @@ -194,20 +194,39 @@ function intersection(X, Y) -- Intersection entre deux droites local z1 = intersection_ll(X, Y) table.insert(t, z1) - else -- Y est une ellipse - local z1, z2 = intersection_le(X, Y) -- Intersection entre une droite et une ellipse + else -- Y is a conic + if Y.subtype == 'parabola' then + local z1, z2 = Y : inter_Pa_line (X.pa,X.pb) + table.insert(t, z1) + table.insert(t, z2) + elseif Y.subtype == 'hyperbola' then + local z1, z2 = Y : inter_Hy_line (X.pa,X.pb) + table.insert(t, z1) + table.insert(t, z2) + elseif Y.subtype == 'ellipse' then + local z1, z2 = intersection_le(X, Y) table.insert(t, z1) table.insert(t, z2) end + end - -- Cas où X est une ellipse - elseif X.type == 'ellipse' then - -- Intersection entre une ellipse et l'autre objet (cercle, droite ou ellipse) + -- When X is a conic (not a circle) + elseif X.type == 'conic' then + if X.subtype == 'parabola' then + local z1, z2 = X : inter_Pa_line (Y.pa,Y.pb) + table.insert(t, z1) + table.insert(t, z2) + elseif X.subtype == 'hyperbola' then + local z1, z2 = X : inter_Hy_line(Y.pa, Y.pb) + table.insert(t, z1) + table.insert(t, z2) + elseif X.subtype == 'ellipse' then local z1, z2 = intersection_le(Y, X) table.insert(t, z1) table.insert(t, z2) + end + end - -- Retourner les résultats sous forme de valeurs distinctes return table.unpack(t) end diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua index dfea7c4d3c6..c546f4a5be7 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_lines.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -107,6 +107,24 @@ function projection_(pa, pb, pt) end end +function projection_ll ( Dt1,Dt2,pt ) + return projection_ll_ ( Dt1.pa,Dt1.pb,Dt2.pa,Dt2.pb,pt ) +end + +function projection_ll_(pa, pb, pc, pd, pt) + if aligned(pa, pb, pt) then + return pt + else + local m = ll_from_ (pt, pc, pd) + return intersection_ll_(pt,m,pa,pb) + end +end + +function affinity_(pa, pb, pc, pd, k, pt) + local p = projection_ll_(pa, pb, pc, pd, pt) + return homothety_(p,k,pt) +end + function symmetry_axial_(pa,pb,pt) local p = projection_ (pa,pb,pt) @@ -149,4 +167,9 @@ function colinear_at_(za, zb, pt, k) return pt + (zb - za) end end - +-- orthonormal cartesian coordinate system +function occs_(p,za,zb) + local x = report_(za,zb,1,p) + local y = ortho_from_(p,p,x) + return x,y +end diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua index 8b666897686..a12320d6a45 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_maths.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -121,12 +121,12 @@ function barycenter (...) return barycenter_ (...) end -function swap(a,b) - local t=a - a=b - b=t - return a,b -end +-- function swap(a,b) +-- local t=a +-- a=b +-- b=t +-- return a,b +-- end -- real func function is_integer(x) return x == math.round(x) @@ -186,6 +186,11 @@ function format_number(number, dcpl) end end +function new_coordinates(m,w,a) + return (m.re - w.re) * math.cos(a) + (m.im - w.im) * math.sin(a), + -(m.re - w.re) * math.sin(a) + (m.im - w.im) * math.cos(a) +end + function get_sign(number) local sgn if math.abs(number) < tkz_epsilon then @@ -199,12 +204,13 @@ function get_sign(number) end function solve_quadratic(a, b, c) - local root1, root2,delta ,sqrtdelta - if (type(a) == "number") and (type(b) == "number") and (type(c) == "number") + local root1, root2, delta , sqrtdelta + if (type(a) == "number") and (type(b) == "number") and (type(c) == "number") then delta = b*b - 4*a*c + if math.abs(delta)<tkz_epsilon then delta=0 end if delta < 0 then - root1, root2 = solve_cx_quadratic(a, b, c) + root1, root2 = false,false --solve_cx_quadratic(a, b, c) elseif delta == 0 then root1 = -b / (2*a) root2 = -b / (2*a) @@ -217,7 +223,6 @@ function solve_quadratic(a, b, c) else root1, root2 = solve_cx_quadratic(a, b, c) end - return root1, root2 -- Two real roots end @@ -310,3 +315,109 @@ function display (z) end end end + +function get_v (L,p) + local h = projection_(L.pa,L.pb,p) + if h == p then + local q = symmetry_(h,L.pa) + return report_(h,q,1,p) +else + return report_(h,p,1,p) +end +end + +-- straight line from a through b +function param_line (xa,ya,xb,yb) + return (yb-ya) / (xb-xa), (xb*ya-xa*yb)/(xb-xa) +end + +-- intersection line / parabola good OCCS !! p paramètre de la parabole +-- y= x^{2} /2p with occs S,i,j j same direction KF +-- m and n parameters of the line + +function solve_para_line (p,m,n) + return solve_quadratic(1,-2*p*m,-2*p*n) +end + +function solve_hyper_line (a,b,m,p) + local A = a^2/b^2-m^2 + local B = -2*m*p + local C = a^2-p^2 + return solve_quadratic(A,B,C) +end + + + +-- Fonction pour échanger deux lignes dans une matrice +function swap_rows(matrix, i, j) + matrix[i], matrix[j] = matrix[j], matrix[i] +end + +-- Fonction pour résoudre un système linéaire par élimination de Gauss +function gaussian_elimination(A, b) + local n = #b + local augmented = {} + + -- Créer la matrice augmentée + for i = 1, n do + augmented[i] = {} + for j = 1, n do + augmented[i][j] = A[i][j] + end + augmented[i][n + 1] = b[i] + end + + -- Élimination de Gauss + for i = 1, n do + -- Recherche du pivot + local max_row = i + for k = i + 1, n do + if math.abs(augmented[k][i]) > math.abs(augmented[max_row][i]) then + max_row = k + end + end + + -- Échanger les lignes pour avoir le pivot sur la diagonale + swap_rows(augmented, i, max_row) + + -- Normaliser la ligne du pivot + local pivot = augmented[i][i] + if pivot == 0 then + error("Matrice singulière ou système dépendant") + end + for j = i, n + 1 do + augmented[i][j] = augmented[i][j] / pivot + end + + -- Élimination des autres lignes + for k = 1, n do + if k ~= i then + local factor = augmented[k][i] + for j = i, n + 1 do + augmented[k][j] = augmented[k][j] - factor * augmented[i][j] + end + end + end + end + + -- Extraire les solutions + local x = {} + for i = 1, n do + x[i] = augmented[i][n + 1] + if math.abs(x[i]) < tkz_epsilon then x[i] = 0 end + end + + return x +end + +function angle_between_vectors(a, b, c, d) + -- Calcul des vecteurs + local zab = b - a + local zcd = d - c + + -- Angle entre les vecteurs en utilisant argument du rapport + local theta = math.atan2(zab.im * zcd.re - zab.re * zcd.im, + zab.re * zcd.re + zab.im * zcd.im) + + return theta -- L'angle en radians +end diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua index 47d3ce99679..b572b1b310f 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_matrices.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua index 9937c0589dd..fe74e94fb2e 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_points.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua index 01d98ad29a3..5ee4c312297 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_regular.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -15,13 +15,16 @@ --------------------------------------------------------------------------- -- --------------------------------------------------------------------------- -function regular_(c,th,s) -- center through side - local r,t,dep - dep = angle_normalize(point.arg (th-c)) - t = {} - r = point.mod (th-c) - for i =1,s do - table.insert( t , (c + point : polar (r,2*(i-1)*math.pi/s + dep) )) - end - return t +function regular_(c, th, s) + -- Center through side + local dep = angle_normalize(point.arg(th - c)) + local r = point.mod(th - c) + local t = {} + local angle_step = 2 * math.pi / s + + for i = 0, s - 1 do + table.insert(t, c + point:polar(r, i * angle_step + dep)) + end + + return t end
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua index b27353f2dc1..0cb126170ed 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_triangles.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -231,17 +231,22 @@ function incentral_tr_ (a, b, c) end -function excentral_tr_ (a,b,c) - local r,s,t,ka,kb,kc - ka = point.abs (b-c) - kc = point.abs (b-a) - kb = point.abs (c-a) - r = barycenter_ ( {a,-ka} , {b,kb} , {c,kc} ) - s = barycenter_ ( {a,ka} , {b,-kb} , {c,kc} ) - t = barycenter_ ( {a,ka} , {b,kb} , {c,-kc} ) - return r,s,t +function excentral_tr_(a, b, c) + -- Calculate distances between points + local ka = point.abs(b - c) -- Distance between b and c + local kb = point.abs(c - a) -- Distance between c and a + local kc = point.abs(b - a) -- Distance between b and a + + -- Compute barycentric points + local r = barycenter_({a, -ka}, {b, kb}, {c, kc}) + local s = barycenter_({a, ka}, {b, -kb}, {c, kc}) + local t = barycenter_({a, ka}, {b, kb}, {c, -kc}) + + -- Return the computed points + return r, s, t end + function intouch_tr_ (a,b,c) local i i = in_center_ (a , b , c) @@ -296,19 +301,25 @@ function similar_ (a,b,c) z = homothety_ (g,-2,c) return x,y,z end + +function orthic_axis_ (a,b,c) + local ha, hb, hc = orthic_tr_(a, b, c) + local z = intersection_ll_ (ha, hb, a, b) + local y = intersection_ll_ (ha, hc, a, c) + local x = intersection_ll_ (hb, hc, b, c) + return x,y,z +end -------------------- -- ellipse -- -------------------- function steiner_ (a,b,c) - local g,fa,fb,delta,m,v - g = centroid_ (a,b,c) - delta = a*a+b*b+c*c -a*b-a*c-b*c - fa = (a+b+c - point.sqrt(delta))/3 - fb = (a+b+c + point.sqrt(delta))/3 - m = midpoint_(b,c) - r = (length(fa,m)+length(fb,m))/2 - v = report_ (fb,fa,r,g) - return ellipse: foci (fb,fa,v) + local g = centroid_ (a,b,c) + local delta = a*a+b*b+c*c -a*b-a*c-b*c + local fa = (a+b+c - point.sqrt(delta))/3 + local fb = (a+b+c + point.sqrt(delta))/3 + local m = midpoint_(b,c) + local r = (length(fa,m)+length(fb,m))/2 + return conic : new (EL_bifocal (fb,fa,r)) end -------------------- -- miscellanous -- @@ -318,22 +329,19 @@ function area_ (a,b,c) return point.mod(a - projection_(b,c,a))*point.mod (b - c)/2 end -function check_equilateral_ (a, b, c) - local A, B, C - -- Compute the vectors representing the sides of the triangle - A = b - c -- Side from b to c - B = a - c -- Side from a to c - C = a - b -- Side from a to b +function check_equilateral_(A, B, C) + local a, b, c = length(B, C), length(A, C), length(A, B) - -- Check if all sides have approximately equal lengths - if (point.abs(A) - point.abs(B) < tkz_epsilon) and (point.abs(B) - point.abs(C) < tkz_epsilon) then - return true -- The triangle is equilateral - else - return false -- The triangle is not equilateral - end + -- Vérifie que les trois longueurs sont égales à epsilon près + if math.abs(a - b) < tkz_epsilon + and math.abs(a - c) < tkz_epsilon + and math.abs(b - c) < tkz_epsilon then + return true + else + return false + end end - function parallelogram_ (a,b,c) local x = c + a - b return x @@ -375,23 +383,23 @@ function soddy_center_ (a,b,c) -- Step 2: Find the intersection points for the tangent lines local x,xp = intersection_lc_ (a,ha,a,g) - if (point.mod(ha-x) < point.mod(ha-xp)) then else x,xp = swap(x,xp) end + if (point.mod(ha-x) < point.mod(ha-xp)) then else x,xp = xp,x end local y,yp = intersection_lc_ (b,hb,b,e) - if (point.mod(hb-y) < point.mod(hb-yp)) then else y,yp = swap(y,yp) end + if (point.mod(hb-y) < point.mod(hb-yp)) then else y,yp = yp,y end local z,zp = intersection_lc_ (c,hc,c,f) - if (point.mod(hc-z) < point.mod(hc-zp)) then else z,zp = swap(z,zp) end + if (point.mod(hc-z) < point.mod(hc-zp)) then else z,zp = zp,z end -- Step 3: Calculate the intersections with the opposite triangle sides local xi,t = intersection_lc_ (xp,e,a,g) - if in_out_ (a,b,c,xi) then else xi,t = swap(xi,t) end + if in_out_ (a,b,c,xi) then else xi,t = t,xi end local yi,t = intersection_lc_ (yp,f,b,e) - if in_out_ (a,b,c,yi) then else yi,t = swap(yi,t) end + if in_out_ (a,b,c,yi) then else yi,t = t,yi end local zi,t = intersection_lc_ (zp,g,c,f) - if in_out_ (a,b,c,zi) then else zi,t = swap(zi,t) end + if in_out_ (a,b,c,zi) then else zi,t = t,zi end -- Step 4: Calculate the circumcenter of the triangle formed by the tangent points local s = circum_center_ (xi,yi,zi) diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua index 2b4b320e19a..e5fd2d1cfdf 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua @@ -1,6 +1,6 @@ -- tkz_elements_lines.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -28,7 +28,7 @@ function line:new(za, zb) local slope = angle_normalize_(point.arg(zb-za)) local length = point.mod(zb-za) local vec = vector : new (za,zb) - local o = {pa = za, + local li = {pa = za, pb = zb, north_pa = north_pa, south_pa = south_pa, @@ -41,9 +41,9 @@ function line:new(za, zb) type = type, vec = vec, length = length} - setmetatable(o, self) + setmetatable(li, self) self.__index = self - return o + return li end ------------------- @@ -72,7 +72,8 @@ function line:is_parallel(L) end function line:is_orthogonal(L) - return math.abs(self.slope * L.slope + 1) < tkz_epsilon + local alpha = angle_between_vectors(self.pa, self.pb, L.pa, L.pb) + return math.abs(alpha-math.pi/2) < tkz_epsilon end function line:is_equidistant(p) @@ -169,41 +170,41 @@ function line:colinear_at (pt,k) return colinear_at_ (self.pa,self.pb,pt,k) end end + +function line:occs (pt) + return occs_(pt,self.pa,self.pb) +end -------------- transformations ------------- function line:translation_pt( pt ) return translation_ ( self.pb-self.pa,pt ) end function line:translation_C( obj ) - local pa,pb,x,y - pa = obj.center - pb = obj.through - x,y = set_translation_( self.pb-self.pa,pa,pb ) + local pa = obj.center + local pb = obj.through + local x,y = set_translation_( self.pb-self.pa,pa,pb ) return circle : new (x,y) end function line: translation_T( obj ) - local pa,pb,pc,x,y,z - pa = obj.pa - pb = obj.pb - pc = obj.pc - x,y,z = set_translation_( self.pb-self.pa,pa,pb,pc ) + local pa = obj.pa + local pb = obj.pb + local pc = obj.pc + local x,y,z = set_translation_( self.pb-self.pa,pa,pb,pc ) return triangle : new (x,y,z) end function line: translation_L( obj ) - local pa,pb,x,y - pa = obj.pa - pb = obj.pb - x,y = set_translation_ ( self.pb-self.pa,pa,pb ) + local pa = obj.pa + local pb = obj.pb + local x,y = set_translation_ ( self.pb-self.pa,pa,pb ) return line : new (x,y) end function line:translation(...) - local obj, nb, t - local tp = table.pack(...) - obj = tp[1] - nb = tp.n + local tp = table.pack(...) + local obj = tp[1] + local nb = tp.n -- If only one object is passed if nb == 1 then @@ -220,7 +221,7 @@ function line:translation(...) end else -- If multiple objects are passed, translate each one - t = {} + local t = {} for i = 1, nb do -- Translate each object using the translation vector table.insert(t, translation_(self.pb - self.pa, tp[i])) @@ -235,14 +236,13 @@ function line: set_translation ( ...) end function line:projection(...) - local obj,nb,t local tp = table.pack(...) - obj = tp[1] - nb = tp.n + local obj = tp[1] + local nb = tp.n if nb == 1 then return projection_ ( self.pa, self.pb, obj ) else - t = {} + local t = {} for i=1,tp.n do table.insert( t , projection_ (self.pa, self.pb, tp[i]) ) end @@ -253,7 +253,7 @@ end function line:set_projection(...) local tp = table.pack(...) local i - local t = {} + local t = {} for i=1,tp.n do table.insert( t , projection_ (self.pa,self.pb , tp[i]) ) end @@ -261,34 +261,30 @@ function line:set_projection(...) end function line:symmetry_axial_L( obj ) - local pa,pb,x,y - pa = obj.pa - pb = obj.pb - x,y = self:set_reflection(pa, pb) + local pa = obj.pa + local pb = obj.pb + local x,y = self:set_reflection(pa, pb) return line : new (x,y) end function line:symmetry_axial_T( obj ) - local pa,pb,pc,x,y,z - pa = obj.pa - pb = obj.pb - pc = obj.pc - x,y,z = self:set_reflection (pa, pb, pc) + local pa = obj.pa + local pb = obj.pb + local pc = obj.pc + local x,y,z = self:set_reflection (pa, pb, pc) return triangle : new (x,y,z) end function line:symmetry_axial_C( obj ) - local pa,pb,x,y - pa = obj.center - pb = obj.through - x,y = self:set_reflection( pa,pb ) + local pa = obj.center + local pb = obj.through + local x,y = self:set_reflection( pa,pb ) return circle : new (x,y) end function line:reflection(...) - local obj,nb,t - local tp = table.pack(...) - obj = tp[1] - nb = tp.n + local tp = table.pack(...) + local obj = tp[1] + local nb = tp.n if nb == 1 then if obj.type == "point" then return symmetry_axial_ ( self.pa,self.pb,obj ) @@ -300,7 +296,7 @@ function line:reflection(...) return self: symmetry_axial_C (obj) end else - t = {} + local t = {} for i=1,tp.n do table.insert( t , symmetry_axial_ ( self.pa,self.pb , tp[i]) ) end @@ -312,6 +308,60 @@ function line:set_reflection (...) return set_symmetry_axial_ ( self.pb,self.pa,... ) end +function line:projection_ll(...) + local tp = table.pack(...) + local c,d = tp[1].pa,tp[1].pb + local obj = tp[2] + local nb = tp.n + if nb == 2 then + return projection_ll_(self.pa,self.pb,c,d,obj) + else + local t = {} + for i=2,tp.n do + table.insert( t , projection_ll_ (self.pa, self.pb,c,d, tp[i]) ) + end + return table.unpack ( t ) + end +end + +function line:set_projection_ll(...) + local tp = table.pack(...) + local c,d = tp[1].pa,tp[1].pb + local t = {} + for i=2,tp.n do + table.insert( t , projection_ll_ (self.pa,self.pb ,c,d, tp[i]) ) + end + return table.unpack ( t ) +end + +function line:affinity(...) + local tp = table.pack(...) + local c,d = tp[1].pa,tp[1].pb + local k = tp[2] + local obj = tp[3] + local nb = tp.n + if nb == 3 then + return affinity_(self.pa,self.pb,c,d,k,obj) + else + local t = {} + for i=3,tp.n do + table.insert( t , affinity_ (self.pa, self.pb,c,d, k,tp[i]) ) + end + return table.unpack ( t ) + end +end + +function line:set_affinity(...) + local tp = table.pack(...) + local c,d = tp[1].pa,tp[1].pb + local k = tp[2] + local t = {} + for i=3,tp.n do + table.insert( t , affinity_ (self.pa,self.pb ,c,d,k, tp[i]) ) + end + return table.unpack ( t ) +end + ------------------- -- Result -> line ------------------- @@ -320,7 +370,8 @@ function line:ll_from( pt ) end function line:ortho_from( pt ) - return line : new (pt+(self.pb-self.pa)*point(0,-1),pt+(self.pb-self.pa)*point(0,1)) + return line : new (pt+(self.pb-self.pa)*point(0,-1), + pt+(self.pb-self.pa)*point(0,1)) end function line:mediator() @@ -366,7 +417,6 @@ function line:test(x,y) end - -- Circle tangent to a line passing through two points -- In general, there are two solutions function line:c_l_pp(a, b) -- a and b on the same side @@ -376,21 +426,22 @@ function line:c_l_pp(a, b) -- a and b on the same side local i = intersection(lab, self) -- Intersection with current line -- One point on the line (a) - if self : in_out(a) and not self:in_out(b) then + if self : in_out(a) and not self:in_out(b) + then local lmed = lab : mediator() - local laperp = self:ortho_from(a) - local o = intersection(lmed,laperp) - return circle:new(o,a), + local laperp = self:ortho_from(a) + local o = intersection(lmed,laperp) + return circle:new(o,a), circle:new(o,a) - end + end -- One point on the line (b) - if self:in_out(b) and not self:in_out(a) then - local lmed = lab:mediator() - local laperp = self:ortho_from(b) - local o = intersection(lmed,laperp) - return circle:new(o,b), - circle:new(o,b) - end + if self:in_out(b) and not self:in_out(a) then + local lmed = lab:mediator() + local laperp = self:ortho_from(b) + local o = intersection(lmed,laperp) + return circle:new(o,b), + circle:new(o,b) + end -- Check: if the intersection exists and lies on the segment [a, b]. if i and lab:in_out_segment(i) then return nil, nil -- No circle is possible @@ -423,7 +474,6 @@ function line:c_l_pp(a, b) -- a and b on the same side circle:new(intersection(self:ortho_from(y), lab:mediator()), y) end - -- Circle tangent to two straight lines passing through a given point function line:c_ll_p(a, p) diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua index e5843dae1a0..1bed24f1a56 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua @@ -1,6 +1,6 @@ -- tkz_elements-main.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -19,6 +19,7 @@ require "tkz_elements_circle.lua" require "tkz_elements_triangle.lua" require "tkz_elements_vector.lua" require "tkz_elements_ellipse.lua" +require "tkz_elements_conic.lua" require "tkz_elements_regular.lua" require "tkz_elements_parallelogram.lua" require "tkz_elements_quadrilateral.lua" @@ -26,6 +27,7 @@ require "tkz_elements_rectangle.lua" require "tkz_elements_square.lua" require "tkz_elements_misc.lua" require "tkz_elements_vector.lua" +require "tkz_elements_occs.lua" require "tkz_elements_functions_maths.lua" require "tkz_elements_functions_intersections.lua" @@ -36,12 +38,12 @@ require "tkz_elements_functions_triangles.lua" require "tkz_elements_functions_regular.lua" require "tkz_elements_functions_matrices.lua" require "tkz_elements_matrices.lua" +require "tkz_elements_functions_conics.lua" function init_elements () scale=1 z={} C={} - E={} L={} M={} P={} @@ -51,4 +53,8 @@ function init_elements () S={} T={} V={} + CO={} + EL={} + PA={} + HY={} end
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua index 07048af557f..c3a3f3080ea 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua @@ -1,6 +1,6 @@ -- tkz_elements_matrices.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua index 5f01756b5a4..5f2693d3c47 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua @@ -1,6 +1,6 @@ -- tkz_elements_functions_maths.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -92,4 +92,11 @@ end function length(a,b) return point.abs (a-b) +end + +function reverseTableInPlace(t) + local n = #t + for i = 1, math.floor(n / 2) do + t[i], t[n - i + 1] = t[n - i + 1], t[i] + end end
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua new file mode 100644 index 00000000000..db932cdc047 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua @@ -0,0 +1,49 @@ +-- tkz_elements_occs.lua +-- date 2025/02/14 +-- version 3.30 +-- Copyright 2024 Alain Matthes +-- This work may be distributed and/or modified under the +-- conditions of the LaTeX Project Public License, either version 1.3 +-- of this license or (at your option) any later version. +-- The latest version of this license is in +-- http://www.latex-project.org/lppl.txt +-- and version 1.3 or later is part of all distributions of LaTeX +-- version 2005/12/01 or later. +-- This work has the LPPL maintenance status “maintained”. +-- The Current Maintainer of this work is Alain Matthes. + +occs = {} +function occs: new (L,zO) + local type = 'occs' + local origin = zO + local y = get_v(L,zO) + local x = rotation_(zO,-math.pi/2,y) + local abscissa = line : new (zO,x) + local ordinate = line : new (zO,y) + local o = { origin = origin, + x = x, + y = y, + abscissa = abscissa, + ordinate = ordinate, + type = type } + setmetatable(o, self) + self.__index = self + return o +end +----------------------- +function occs : coordinates (pt) -- S,U,V orthonormé + local xs = self.origin.re + local ys = self.origin.im + local x = pt.re + local y = pt.im + local xsu = (self.x-self.origin).re + local ysu = (self.x-self.origin).im + local xsv = (self.y-self.origin).re + local ysv = (self.y-self.origin).im + local xxs = x-xs + local yys = y-ys + return checknumber(xsu * xxs + ysu * yys), + checknumber(xsv * xxs + ysv * yys) +end + +return occs
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua index 8cd02bf73ee..77478dd8ea8 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua @@ -1,6 +1,6 @@ -- tkz_elements_parallelogram.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -49,7 +49,7 @@ end function parallelogram : fourth (za,zb,zc) local zd = zc + (za-zb) - return parallelogram : new (za, zb, zc,zd) + return parallelogram : new (za, zb, zc, zd) end return parallelogram
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua index be28002328c..3daef3d3b92 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua @@ -1,6 +1,6 @@ -- tkz_elements_point.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -214,8 +214,8 @@ end -- methods --- -function point: new ( a,b ) - return scale * point (a,b ) +function point: new (a, b) + return scale * point (a ,b) end function point: polar ( radius, phi ) @@ -345,6 +345,10 @@ function point: normalize() return point(self.re/d,self.im/d) end +function point:identity(pt) + return point.abs(self - pt) < tkz_epsilon +end + function point:orthogonal(d) local m if d == nil then diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua index 0cc6ca30a6e..80fd97dda2b 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua @@ -1,6 +1,6 @@ -- tkz_elements_quadrilateral.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua index 5247d48e1b7..97291e2ae17 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua @@ -1,6 +1,6 @@ -- tkz_elements-rectangle.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua index 65c197d3152..80df8f11945 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua @@ -1,6 +1,6 @@ -- tkz_elements_regular.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -15,7 +15,7 @@ regular_polygon = {} function regular_polygon: new (za, zb ,nb) local type = 'regular_polygon' - local table = regular_ (za , zb , nb) + local vertices = regular_ (za , zb , nb) local center = za local through = zb local angle = 2 * math.pi/nb @@ -23,27 +23,25 @@ function regular_polygon: new (za, zb ,nb) local circle = circle : new (za,zb) local inradius = circumradius * math.cos(math.pi/nb) local side = circumradius * math.sin(math.pi/nb) - local next = table[2] - local first = table[1] - local proj = projection_ (first,next,za) + local proj = projection_ (vertices[1],vertices[2],za) local perimeter = nb * side local area = (perimeter * inradius)/2 - local o = { type = type, - center = center, - through = through, - circumradius= circumradius, - inradius = inradius, - table = table, - circle = circle, - nb = nb, - angle = angle, - side = side, - proj = proj, - perimeter = perimeter, - area = area} - setmetatable(o, self) + local regular = { type = type, + center = center, + through = through, + circumradius= circumradius, + inradius = inradius, + vertices = vertices, + circle = circle, + nb = nb, + angle = angle, + side = side, + proj = proj, + perimeter = perimeter, + area = area} + setmetatable(regular, self) self.__index = self - return o + return regular end ----------------------- -- points -- @@ -55,10 +53,8 @@ end -- circles -- ----------------------- function regular_polygon : incircle () - local next,first - next = self.table[2] - first = self.table[1] - return circle : new ( self.center , projection_ (first,next,self.center) ) + return circle : new ( self.center , + projection_ (self.vertices[1],self.vertices[2],self.center)) end ------------------- -- Result -> triangle @@ -68,8 +64,8 @@ end -- Result -> miscellaneous ------------------- function regular_polygon : name (nm) - for K,V in ipairs(self.table) do - z[nm..K] = V + for k,v in ipairs(self.vertices) do + z[nm..k] = v end end diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua index d968feacdec..ba430efd9c3 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua @@ -1,6 +1,6 @@ -- tkz_elements-square.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua index 52677400339..c952e223b3f 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua @@ -1,6 +1,6 @@ -- tkz_elements_triangles.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -14,27 +14,27 @@ triangle = {} function triangle: new (za, zb ,zc) - local type = 'triangle' - local circumcenter = circum_center_ (za , zb , zc) - local centroid = barycenter_ ( {za,1} , {zb,1} , {zc,1} ) - local incenter = in_center_ (za , zb , zc) - local orthocenter = ortho_center_ (za , zb , zc) - local eulercenter = euler_center_ (za , zb , zc) - local spiekercenter = spieker_center_ (za , zb , zc) - local c = point.abs(zb-za) - local a = point.abs(zc-zb) - local b = point.abs(za-zc) - local alpha = angle_normalize_(point.arg ((zc-za) / (zb-za))) - local beta = angle_normalize_(point.arg ((za-zb) / (zc-zb))) - local gamma = angle_normalize_(point.arg ((zb-zc) / (za-zc))) - local ab = line : new (za,zb) - local ca = line : new (zc,za) - local bc = line : new (zb,zc) - local semiperimeter = (a+b+c)/2 - local area = math.sqrt((semiperimeter)*(semiperimeter-a)*(semiperimeter-b)*(semiperimeter-c)) + local type = 'triangle' + local circumcenter = circum_center_ (za , zb , zc) + local centroid = barycenter_ ( {za,1} , {zb,1} , {zc,1} ) + local incenter = in_center_ (za , zb , zc) + local orthocenter = ortho_center_ (za , zb , zc) + local eulercenter = euler_center_ (za , zb , zc) + local spiekercenter = spieker_center_ (za , zb , zc) + local c = point.abs(zb-za) + local a = point.abs(zc-zb) + local b = point.abs(za-zc) + local alpha = angle_normalize_(point.arg ((zc-za) / (zb-za))) + local beta = angle_normalize_(point.arg ((za-zb) / (zc-zb))) + local gamma = angle_normalize_(point.arg ((zb-zc) / (za-zc))) + local ab = line:new(za, zb) + local ca = line:new(zc, za) + local bc = line:new(zb, zc) + local semiperimeter = (a + b + c) / 2 + local area = math.sqrt((semiperimeter)*(semiperimeter-a)*(semiperimeter-b)*(semiperimeter-c)) local inradius = area / semiperimeter - local circumradius = (a*b*c)/(4*inradius*semiperimeter) - local o = { pa = za, + local circumradius = (a * b * c) / (4 * area) + local tr = { pa = za, pb = zb, pc = zc, type = type, @@ -57,9 +57,9 @@ function triangle: new (za, zb ,zc) area = area, inradius = inradius, circumradius = circumradius} - setmetatable(o, self) + setmetatable(tr, self) self.__index = self - return o + return tr end ----------------------- -- points -- @@ -100,6 +100,9 @@ function triangle: symmedian_point() return lemoine_point_ ( self.pa , self.pb , self.pc) end +triangle.lemoine_point = triangle.symmedian_point +triangle.grebe_point = triangle.symmedian_point + function triangle: spieker_center() return spieker_center_ ( self.pa , self.pb , self.pc ) end @@ -113,20 +116,18 @@ function triangle: base (u,v) -- (ab,ac) base coord u,v end function triangle: euler_points () - local H - H = ortho_center_ ( self.pa , self.pb , self.pc ) + H = self.orthocenter return midpoint_ ( H,self.pa ), midpoint_ ( H,self.pb ), midpoint_ ( H,self.pc ) end function triangle:nine_points() - local ma, mb, mc, ha, hb, hc, H + local ma, mb, mc, ha, hb, hc -- Calculate the medial triangle ma, mb, mc = medial_tr_(self.pa, self.pb, self.pc) -- Calculate the orthic triangle ha, hb, hc = orthic_tr_(self.pa, self.pb, self.pc) -- Calculate the orthocenter - H = ortho_center_(self.pa, self.pb, self.pc) - + H = self.orthocenter -- Return the points of the nine-point circle return ma, mb, mc, ha, hb, hc, midpoint_(H, self.pa), midpoint_(H, self.pb), midpoint_(H, self.pc) @@ -134,7 +135,7 @@ end function triangle : point (t) - local p = (self.a + self.b + self.c) + local p = 2* self.semiperimeter local t1 = self.a / p local t2 = (self.a + self.b) / p if t<= t1 then @@ -151,26 +152,95 @@ function triangle : soddy_center () end function triangle : conway_points () - local a1,a2,b1,b2,c1,c2 - a1 = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa) - a2 = report_ (self.pc,self.pa,length(self.pb,self.pc),self.pa) - b1 = report_ (self.pa,self.pb,length(self.pa,self.pc),self.pb) - b2 = report_ (self.pc,self.pb,length(self.pa,self.pc),self.pb) - c1 = report_ (self.pb,self.pc,length(self.pb,self.pa),self.pc) - c2 = report_ (self.pa,self.pc,length(self.pb,self.pa),self.pc) + local a1 = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa) + local a2 = report_ (self.pc,self.pa,length(self.pb,self.pc),self.pa) + local b1 = report_ (self.pa,self.pb,length(self.pa,self.pc),self.pb) + local b2 = report_ (self.pc,self.pb,length(self.pa,self.pc),self.pb) + local c1 = report_ (self.pb,self.pc,length(self.pb,self.pa),self.pc) + local c2 = report_ (self.pa,self.pc,length(self.pb,self.pa),self.pc) return a1,a2,b1,b2,c1,c2 end + + function triangle : kimberling (n) + local cos,sin,tan = math.cos,math.sin,math.tan + local A,B,C = self.alpha,self.beta,self.gamma + local a,b,c = self.a,self.b,self.c + local pi = math.pi + if n == 1 then return self : trilinear(1,1,1) -- incenter + elseif n == 2 then return self : barycentric (1,1,1) -- centroid + elseif n == 3 then return self : trilinear (cos(A),cos(B),cos(C)) --circumcenter + elseif n == 4 then return self : barycentric (tan(A),tan(B),tan(C)) -- orthocenter + elseif n == 5 then return self : trilinear(cos(B - C),cos(C - A),cos(A - B)) --nine + elseif n == 6 then return self : trilinear (a,b,c) -- lemoine + elseif n == 7 then return self : barycentric (1/(b+c-a),1/(a+c-b),1/(a+b-c))-- gergonne + elseif n == 8 then return self : barycentric(b+c-a,a+c-b,a+b-c) -- nagel + elseif n == 0 then return self : barycentric(a*(b+c-a),b*(a+c-b),c*(a+b-c)) -- mittenpunkt + elseif n == 10 then return self : barycentric(b+c,a+c,a+b) -- spieker + elseif n == 11 then return self : trilinear(1-cos(B - C),1-cos(C - A),1-cos(A - B)) -- feuerbach + elseif n == 13 then return self : trilinear(1/sin(A+pi/3),1/sin(B+pi/3),1/sin(C+pi/3)) -- first fermat + elseif n == 14 then return self : trilinear(1/sin(A-pi/3),1/sin(B-pi/3),1/sin(C-pi/3)) -- second fermat + elseif n == 19 then return self : trilinear(tan(A),tan(B),tan(C)) -- clawson + elseif n == 20 then return self : barycentric(tan(B)+tan(C)-tan(A),tan(A)+tan(C)-tan(B),tan(A)+tan(B)-tan(C)) --de Longchamps + elseif n == 110 then return self : trilinear( a/(b^2 - c^2), + b/(c^2 - a^2), + c/(a^2 - b^2)) -- kiepert parabola + elseif n == 115 then return self : barycentric( (b^2 - c^2)^2,(c^2 - a^2)^2,(a^2 - b^2)^2) -- kiepert hyperbola + end + end + + function triangle : isogonal (pt) + local pa = self.bc : reflection (pt) + local pb = self.ca : reflection (pt) + local pc = self.ab : reflection (pt) + return circum_center_ (pa,pb,pc) + end + + function triangle: first_fermat_point () + local x = equilateral_tr_(self.pb,self.pa) + local y = equilateral_tr_(self.pa,self.pc) + return intersection_ll_(x,self.pc,y,self.pb) + end + + function triangle: second_fermat_point () + local x = equilateral_tr_(self.pa,self.pb) + local y = equilateral_tr_(self.pc,self.pa) + return intersection_ll_(x,self.pc,y,self.pb) + end + + function triangle : orthic_axis_points () + return orthic_axis_(self.pa,self.pb,self.pc) + end ------------------- -- Result -> line ------------------- -- N,H,G,O -- check_equilateral_ (a,b,c) function triangle: euler_line () - if not check_equilateral_(self.pa,self.pb,self.pc) + if check_equilateral_(self.pa,self.pb,self.pc) then - return line : new (self.orthocenter,self.circumcenter) + tex.error("An error has occurred", {"No euler line with equilateral triangle"}) + else + local a,b,c = orthic_axis_(self.pa,self.pb,self.pc) + local x = projection_(a,c,self.eulercenter) + return line : new (self.eulercenter,x) end end +function triangle : fermat_axis () + local x = self: first_fermat_point () + local y = self: second_fermat_point () + return line : new (x,y) +end + +function triangle : brocard_axis () + return line : new (self.circumcenter,self: lemoine_point()) +end + +function triangle : simson_line (pt) -- pt on circumcircle + local x = self.ab : projection (pt) + local y = self.bc : projection (pt) + return line : new (x,y) +end + function triangle: symmedian_line (n) local a = self.pa local b = self.pb @@ -185,12 +255,20 @@ function triangle: symmedian_line (n) end end +-- with pt on the circumcircle +function triangle:steiner_line (pt) + local u = symmetry_axial_(self.pa,self.pb,pt) + local v = symmetry_axial_(self.pa,self.pc,pt) + return line : new (u,v) +end + + function triangle: altitude (n) local a,b,c,o,p a = self.pa b = self.pb c = self.pc - o = ortho_center_ (a,b,c) + o = self.orthocenter if n==1 then p = projection_ (a,c,b) return line : new (b,p) @@ -207,7 +285,7 @@ function triangle: bisector (n) local a = self.pa local b = self.pb local c = self.pc - local i = in_center_ (a,b,c) + local i = self.incenter if n==1 then return line : new (b,intersection_ll_ (b,i,a,c)) elseif n==2 then @@ -236,7 +314,7 @@ local a,b,c,i,u,v,w a = self.pa b = self.pb c = self.pc - i = in_center_ (a,b,c) + i = self.incenter if n==1 then u = symmetry_axial_ (b,i,a) v = symmetry_axial_ (b,i,c) @@ -257,6 +335,18 @@ local a,b,c,i,u,v,w return line : new (intersection_ll_ (pt,w,c,a),intersection_ll_ (pt,w,b,a)) end end + +function triangle : lemoine_axis () -- revoir car problème + local C = self : circum_circle () + local pl = self : lemoine_point() + return C : polar (pl) +end + +function triangle : orthic_axis () + local x,y,z = orthic_axis_(self.pa,self.pb,self.pc) + return line : new (x,z) +end + ----------------------- --- Result -> circles -- ----------------------- @@ -269,9 +359,7 @@ return circle : new (circum_circle_ ( self.pa , self.pb , self.pc), self.pa ) end function triangle:in_circle() - local o - o = in_center_ ( self.pa , self.pb , self.pc) -return circle : new (o, projection_ (self.pb , self.pc,o) ) +return circle : new (self.incenter, projection_ (self.pb , self.pc,self.incenter) ) end function triangle:ex_circle (n) -- n =1 swap n=2 2 swap @@ -318,14 +406,12 @@ end function triangle : soddy_circle () - local s,i - s,i = soddy_center_ (self.pa,self.pb,self.pc) + local s,i = soddy_center_ (self.pa,self.pb,self.pc) return circle : new ( s , i ) end function triangle : cevian_circle (p) - local pta,ptb,ptc - pta,ptb,ptc = cevian_ (self.pa,self.pb,self.pc,p) + local pta,ptb,ptc = cevian_ (self.pa,self.pb,self.pc,p) return circle : new (circum_circle_ (pta,ptb,ptc),pta) end @@ -337,10 +423,9 @@ function triangle : symmedial_circle () end function triangle : conway_circle () - local i,t - i = in_center_ (self.pa,self.pb,self.pc) + local t t = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa) - return circle : new (i,t) + return circle : new (self.incenter,t) end function triangle : pedal_circle (pt) @@ -358,6 +443,25 @@ function triangle: bevan_circle () r,s,t = excentral_tr_ ( self.pa , self.pb , self.pc) return circle : new (o, r) end + +function triangle:taylor_points() + local a,b,c = orthic_tr_(self.pa,self.pb,self.pc) + return + projection_(self.pa, self.pc, a), + projection_(self.pa, self.pb, a), + projection_(self.pb, self.pa, b), + projection_(self.pb, self.pc, b), + projection_(self.pc, self.pb, c), + projection_(self.pc, self.pa, c) +end + +function triangle : taylor_circle () + local a,b,c = orthic_tr_(self.pa,self.pb,self.pc) + local d = projection_(self.pa, self.pb, a) + local e = projection_(self.pb, self.pc, b) + local f = projection_(self.pc, self.pa, c) + return circle : new ( circum_circle_ (d,e,f),d) +end ------------------- -- Result -> triangle ------------------- @@ -397,6 +501,8 @@ function triangle: anti () return triangle : new (anti_tr_ (self.pa,self.pb,self.pc)) end +triangle.anticomplementary = triangle.anti + function triangle: tangential () return triangle : new (tangential_tr_ (self.pa,self.pb,self.pc)) end @@ -406,14 +512,12 @@ function triangle: cevian (p) end function triangle: symmedian () - local p - p = lemoine_point_ ( self.pa , self.pb , self.pc) + local p = lemoine_point_ ( self.pa , self.pb , self.pc) return triangle : new (cevian_ (self.pa,self.pb,self.pc,p)) end function triangle: symmedial () - local p - p = lemoine_point_ ( self.pa , self.pb , self.pc) + local p = lemoine_point_ ( self.pa , self.pb , self.pc) return triangle : new (cevian_ (self.pa,self.pb,self.pc,p)) end @@ -422,38 +526,78 @@ function triangle: euler () end function triangle: pedal (pt) - local x,y,z - x = projection_ (self.pb,self.pc,pt) - y = projection_ (self.pa,self.pc,pt) - z = projection_ (self.pa,self.pb,pt) - return triangle : new (x,y,z) + return triangle : new (self : projection (pt)) end function triangle: similar () return triangle : new (similar_ (self.pa,self.pb,self.pc) ) end ------------------- --- Result -> ellipse +-- Result -> conic ------------------- function triangle: steiner_inellipse () return steiner_ (self.pa,self.pb,self.pc) end function triangle: steiner_circumellipse () - local e - e = steiner_ (self.pa,self.pb,self.pc) - return ellipse: radii (e.center,2*e.Rx,2*e.Ry,e.slope ) + local e = steiner_ (self.pa,self.pb,self.pc) + local v = report_(e.center,e.vertex,e.a,e.vertex) + local cv = report_(e.center,e.covertex,e.b,e.covertex) + return conic : new ( EL_points (e.center,v,cv)) end function triangle: euler_ellipse () if self : check_acutangle () then - local a,b - a,b = intersection_lc_ (self.orthocenter,self.circumcenter, + local x,y = intersection_lc_ (self.orthocenter,self.circumcenter, self.eulercenter,self.ab.mid) - return ellipse: foci (self.orthocenter,self.circumcenter,a) + local a =.5 * length(x,y) + return conic : new ( EL_bifocal (self.orthocenter,self.circumcenter,a)) end end + +-- kiepert ellipse +function triangle : kiepert_hyperbola () + -- center + local center = self : kimberling (115) + local O = self.circumcenter + local G = self.centroid + -- Brocard axis + local L = self : brocard_axis () + local M,N = intersection_lc_ (L.pa,L.pb,O,self.pa) + -- simson lines + local Lsa = self : simson_line (M) + local Lsb = self : simson_line (N) + local axis = bisector (center,Lsa.pa,Lsb.pa) + -- new frame system + local U = report_(axis.pa,axis.pb,-1,center) + local V = rotation_ (center,math.pi/2,U) + -- + local minor = axis : ortho_from (center) + local sys = occs : new (minor ,center) + local x,y = sys : coordinates (self.pa) + -- x=-x + -- y=-y + -- local x,y = newcoordinates (self.pa,center,U,V) + local a = math.sqrt(x^2 - y^2) + local c = math.sqrt(2) * a + local Fa = report_(center,axis.pb,-c, center) + local Fb = report_(center,axis.pb, c, center) + local K = report_(center,axis.pb,-a^2/c,center) + local directrix = axis : ortho_from (K) + return conic : new (Fa,directrix,math.sqrt(2)) + end + -- kiepert parabola + function triangle : kiepert_parabola () + if (self.a == self.b) or (self.a == self.c) or (self.c == self.b) + then + tex.error("An error has occurred", {"No X(110)"}) + else + L = self : euler_line () + F = self : kimberling (110) + return conic : new (F,L,1) + end + end ------------------- -- Result -> miscellaneous ------------------- @@ -463,19 +607,18 @@ function triangle: get_angle (n) b = self.pb c = self.pc if n==1 then - return point.arg ((a-b)/(c-b)) + return point.arg ((a-b)/(c-b)) elseif n==2 then - return point.arg ((b-c)/(a-c)) + return point.arg ((b-c)/(a-c)) else - return point.arg ((c-a)/(b-a)) + return point.arg ((c-a)/(b-a)) end end function triangle: projection (p) - local x,y,z - x = projection_ (self.pb,self.pc,p) - y = projection_ (self.pa,self.pc,p) - z = projection_ (self.pa,self.pb,p) + local x = projection_ (self.pb,self.pc,p) + local y = projection_ (self.pa,self.pc,p) + local z = projection_ (self.pa,self.pb,p) return x,y,z end @@ -484,7 +627,7 @@ function triangle: parallelogram () return x end -function triangle: area () +function triangle: area () -- obsolete return area_(self.pa,self.pb,self.pc) end diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua index 7e9f0ff94fe..5fdebade8b8 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua @@ -1,6 +1,6 @@ -- tkz_elements_vectors.lua --- date 2025/01/06 --- version 3.10 +-- date 2025/02/14 +-- version 3.30 -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -14,20 +14,21 @@ -- ---------------------------------------------------------------------------- vector = {} -function vector: new(za, zb) +-- Constructor for creating a new vector +function vector:new(za, zb) local type = 'vector' local slope = angle_normalize_(point.arg(zb-za)) local norm = point.mod(zb-za) - local mtx = matrix : new {{za},{zb}} - local o = {tail = za, + local mtx = matrix:new { { za }, { zb } } + local vect = {tail = za, head = zb, norm = norm, mtx = mtx, slope = slope, type = type } - setmetatable(o, self) + setmetatable(vect, self) self.__index = self - return o + return vect end function vector.__add(v1,v2) @@ -35,48 +36,45 @@ function vector.__add(v1,v2) end function vector.__sub(v1,v2) - local v = v2 : scale(-1) - return v1 : add (v) + return v1:add(v2:scale(-1)) end function vector.__unm(v) - return v : scale(-1) + return v:scale(-1) end function vector.__mul(r,v) return v : scale(r) end - +-- Normalize the vector (unit vector) function vector: normalize () local z = self.head-self.tail local d = point.abs(z) - local nz = point(z.re/d,z.im/d) - return vector : new (self.tail,nz + self.tail) + local nz = point(z.re / d, z.im / d) + return vector:new(self.tail, nz + self.tail) end function vector: add (ve) return vector :new (self.tail,self.head+ve.head-ve.tail) end - -function vector: orthogonal (d) -local z +-- Create an orthogonal vector +function vector:orthogonal (d) if d == nil then return vector : new (self.tail, rotation_(self.tail,math.pi/2,self.head)) else - z = self.tail+ point (d*math.cos(self.slope),d*math.sin(self.slope)) + local z = self.tail+ point (d*math.cos(self.slope),d*math.sin(self.slope)) return vector : new (self.tail, rotation_(self.tail,math.pi/2,z)) end end -function vector: scale (d) - local l,z - l = self.norm - z = self.tail+ point (d*l*math.cos(self.slope),d*l*math.sin(self.slope)) - return vector : new (self.tail,z ) +-- Scale the vector by a scalar +function vector:scale(d) + local z = self.tail + point(d * self.norm * math.cos(self.slope), d * self.norm * math.sin(self.slope)) + return vector:new(self.tail, z) end -function vector: at (zc) - return vector :new (zc,zc+self.head-self.tail) +function vector:at (zc) + return vector:new(zc, zc + self.head - self.tail) end return vector |