texlive[74262] Master/texmf-dist: tkz-elements (24feb25)

commits+karl at tug.org commits+karl at tug.org
Mon Feb 24 21:29:58 CET 2025


Revision: 74262
          https://tug.org/svn/texlive?view=revision&revision=74262
Author:   karl
Date:     2025-02-24 21:29:57 +0100 (Mon, 24 Feb 2025)
Log Message:
-----------
tkz-elements (24feb25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.pdf
    trunk/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 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`.   

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -42,7 +42,6 @@
 \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 @@
 \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 @@
    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 @@
 \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 @@
 \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 @@
    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 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale =.75]
       \tkzGetNodes   
       \tkzDrawCircle(o,a)
       \tkzDrawSegments(o,a o,c)
@@ -626,21 +624,22 @@
 
 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)
@@ -647,21 +646,20 @@
 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 @@
    }
 
    \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 @@
 \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 @@
 \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.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 @@
 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 @@
 \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.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 @@
 \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 @@
    %   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 @@
 \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 @@
 }
 
 \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,8 +877,10 @@
 \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
 \label{par:radical_axis_v1}
@@ -895,7 +890,6 @@
 \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 @@
 }
 \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)
  }
  \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 @@
 \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 @@
 \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 @@
   
   \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)
   }
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale  = .5]
   \tkzGetNodes
   \tkzDrawCircles(O,B O',D)
   \tkzDrawLine(E,F)
@@ -1046,7 +1037,6 @@
 \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 @@
 \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 @@
 \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 @@
 _,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 @@
 \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 @@
 \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 @@
 
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale =.5]
      \tkzGetNodes
      \tkzDrawCircles(O,B O',B)
      \tkzDrawSegments(M,T M,T')
@@ -1237,7 +1224,7 @@
 \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 @@
 \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 @@
 \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 @@
 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}
+
+\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    = .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}
-  \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 @@
   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 @@
     \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 @@
 \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 @@
   \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,7 +1499,6 @@
 \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;
@@ -1435,10 +1505,10 @@
    \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:
 \begin{enumerate}[label=(\roman*)]
@@ -1451,11 +1521,10 @@
 \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.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 @@
    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 @@
 \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,37 +1697,38 @@
 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})$,
 \begin{itemize}
 
 \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,7 +1741,7 @@
 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)
@@ -1665,11 +1748,9 @@
 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.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 @@
 \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,19 +1811,19 @@
 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}
 
@@ -1749,28 +1830,33 @@
 % 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 @@
 
 \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 @@
 }
 
 \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 @@
 \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 in__out_of_a_disk (end)
 
-% subsubsection method_imeth_circle_power_c (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 @@
 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,28 +2172,27 @@
 \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}
@@ -2104,7 +2199,6 @@
 \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 @@
  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 @@
 \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 @@
 \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 @@
  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 @@
 \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 @@
 \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 @@
  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 @@
 \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.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 @@
 \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.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 @@
 
 \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 @@
   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 @@
   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)

Added: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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)


Property changes on: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 \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 @@
 \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 @@
  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 @@
 \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 @@
 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 @@
 % 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

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -78,7 +78,6 @@
 \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 @@
    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,7 +136,6 @@
 \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)
@@ -144,14 +142,17 @@
    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 @@
 \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 @@
 \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)|&note \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 @@
 \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)|&note \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 @@
 \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 @@
 \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.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 @@
   \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 @@
 \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 @@
   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,24 +869,23 @@
 \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}
@@ -854,15 +892,14 @@
 \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 @@
    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 @@
 \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 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale = 1.25]
   \tkzGetNodes
   \tkzDrawLines(A,B C,D B,E)
   \tkzDrawPoints(A,...,E)
@@ -1345,7 +1384,6 @@
 \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 @@
    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 @@
 \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 @@
 }
 
 \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 @@
 
 \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 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale = .5]
   \tkzGetNodes
   \tkzDrawPolygon(A,B,C)
   \tkzDrawCircle(O,A)
@@ -1501,11 +1637,10 @@
   \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 @@
 \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 @@
 \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 @@
   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 @@
 \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.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 @@
 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 @@
    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 @@
 \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 @@
 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 @@
    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 @@
   \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 @@
   }
   \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 @@
   \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 @@
 \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 @@
 \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.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,14 +2102,17 @@
 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)
 
@@ -1972,8 +2119,6 @@
 \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 @@
 \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 @@
   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 @@
 \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 @@
   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 @@
 \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 @@
   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 @@
 \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 @@
   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 @@
 \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 @@
   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 @@
 \end{minipage}
 
 %subsubsection method_c__ll__p (end)
-
 % subsection methods_from_class_line (end)
-
 % section class_line (end)
 \endinput

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -24,7 +24,7 @@
        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 @@
   |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 @@
   |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 @@
 \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}

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -72,14 +72,13 @@
 \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 @@
 
 
 \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 @@
 \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 @@
 \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 @@
         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 @@
    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 @@
 \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 @@
 
 \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 @@
 \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 @@
   \end{center}
 \end{minipage}
 
-
-
-
 % subsection normalized_angles (end)
 
 \subsection{Get angle} % (fold)
@@ -315,27 +318,29 @@
 \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 @@
 \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 @@
  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 @@
    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)
 

Added: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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


Property changes on: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -74,15 +74,18 @@
 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 @@
 \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 @@
 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 @@
 \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.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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -124,7 +124,6 @@
 }
 \hspace*{\fill}
 
-
 \begin{Verbatim}
 \directlua{
    init_elements ()
@@ -295,7 +294,7 @@
 \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 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale = 1.5]
      \tkzGetNodes
      \tkzDrawPolygon(A,B,C,D)
      \tkzDrawPoints(A,B,C,D,O,A')
@@ -393,7 +391,6 @@
 \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)
@@ -400,7 +397,7 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale = .75]
   \tkzGetNodes
   \tkzDrawCircle(O,A)
   \tkzDrawSegments[new](O,A)
@@ -420,9 +417,9 @@
 
 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 ()
@@ -429,19 +426,16 @@
 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 @@
 \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 @@
 \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 @@
 \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 @@
 \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 @@
    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 @@
 }
 
 \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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 \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.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 @@
 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 @@
 \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 @@
 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)
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -62,9 +62,8 @@
 \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)
@@ -71,9 +70,9 @@
    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 @@
 \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.D     = P.ABCD.pd
 }
 
-\begin{tikzpicture}
+\begin{tikzpicture}[scale   = .5]
 \tkzGetNodes
 \tkzDrawPolygon(A,B,C,D)
 \tkzDrawPoints(A,B,C)
@@ -144,7 +142,6 @@
 \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.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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -16,7 +16,7 @@
 \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 @@
 \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 @@
 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 @@
 \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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -76,19 +76,22 @@
    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 @@
 \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 @@
    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 @@
 \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.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)
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -182,8 +182,8 @@
 \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,19 +206,23 @@
 
 \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} &&\\
 \midrule 
@@ -235,10 +239,39 @@
 \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 @@
 \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 @@
 
 \Imeth{triangle}{conway\_circle ()} & Circumscribed circle of Conway points  & [\ref{ssub:method_imeth_triangle_conway}]\\
 
+\Imeth{triangle}{taylor\_circle ()} & Circumscribed circle of Conway points  & [\ref{ssub:method_imeth_triangle_taylor__circle}]\\
+
 \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
-
-
-\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}     \\
 \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 @@
 \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 @@
 \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 @@
   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,7 +446,6 @@
 \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)
@@ -435,13 +452,13 @@
   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 @@
 \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 @@
 \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 @@
 
 % 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 @@
   \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 @@
 \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,7 +837,8 @@
     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)
@@ -745,32 +845,9 @@
      \tkzLabelPoints(A,B)
      \tkzLabelPoints[above](C,D,E)
 \end{tikzpicture}
-\end{Verbatim}
+\end{center}
 \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{minipage}
-
 % subsubsection method_imeth_triangle_base (end)
 
 
@@ -780,25 +857,24 @@
 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 @@
    \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 @@
 }
 
 \begin{center}
-    \begin{tikzpicture}
+    \begin{tikzpicture}[scale = 1.25]
      \tkzGetNodes
      \tkzDrawPolygons[red](A,B,C)
      \tkzDrawPolygons[cyan](a,b,c)
@@ -855,7 +930,6 @@
 \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 @@
 \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 @@
   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 @@
 \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 @@
 \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 @@
  \tkzLabelPoints[above](C,K)
 \end{tikzpicture}
 \end{center}
-
 \end{minipage}
 
 % subsubsection method_imeth_triangle_circum_circle (end)
@@ -1165,48 +1240,50 @@
 \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}
 
 
 
+
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
@@ -1290,7 +1367,6 @@
 \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.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 @@
 
 \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 @@
 
 \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 @@
    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 @@
   \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 @@
 
 \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 @@
  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 @@
 \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 @@
   \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 @@
 \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 @@
 \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 @@
   \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 @@
 
 
 \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 @@
 
 \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 @@
    \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 @@
    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 @@
 
 \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 @@
   \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 @@
 \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 @@
    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 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 @@
   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 @@
  \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 @@
   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 @@
  \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 @@
 \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 @@
 \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 @@
   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 @@
 \end{center}
 
 
-\end{minipage}
 
 % subsubsection method_imeth_triangle_symmedial (end)
 
@@ -2127,7 +2181,6 @@
 \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 @@
   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 @@
 \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 @@
   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 @@
 % 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 @@
 
 \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 @@
 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 @@
 \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 @@
 \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 @@
    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 @@
 
 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 @@
   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 @@
   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 @@
  \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

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -142,8 +142,7 @@
 \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 @@
   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 @@
 \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 @@
   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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -17,7 +17,7 @@
  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.
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-convention.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 \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 @@
 \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}
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -12,18 +12,17 @@
 \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 @@
 \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 @@
 }
 
 \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,7 +60,78 @@
 \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,29 +139,29 @@
 \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}
@@ -99,7 +168,6 @@
 \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 @@
 }
   
 \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 @@
 \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 @@
 \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 @@
 }
 
 \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 @@
 \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 @@
 \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 @@
 }
 
 \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 @@
 \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 @@
 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 @@
   \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 @@
 \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 @@
      \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,19 +529,18 @@
 
 \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}
@@ -482,7 +547,6 @@
 \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 @@
 \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 @@
 \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 @@
 
 \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 @@
 
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[ scale =.75]
   \tkzGetNodes
   \tkzDrawPolygon(A,B,M)
   \tkzDrawCircles[purple](O,C G,A)
@@ -728,21 +786,20 @@
 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 @@
 \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 @@
 \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 @@
 \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 @@
 
 \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 @@
 }
 
 \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 @@
 
 \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 @@
 \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 @@
 \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 @@
 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 @@
 
 \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 @@
 
 \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 @@
 
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale=0.7]
   \tkzGetNodes
   \tkzDrawPoints[new](J_a,J_b,J_c)
   \tkzClipBB
@@ -1200,34 +1258,36 @@
 
 \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)
@@ -1234,7 +1294,7 @@
   \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 @@
 \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 @@
 \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)
   }
 
-
   \begin{center}
-    \begin{tikzpicture}
+    \begin{tikzpicture}[scale = .75]
        \tkzGetNodes
        \tkzDrawArc[delta=5](O,B)(G)
        \tkzDrawCircles(A,B B,A)
@@ -1388,8 +1435,6 @@
   \end{center}
 \end{minipage}
 
-
-
 % subsection gold_division (end)
 
 \subsection{Ellipse} % (fold)
@@ -1404,17 +1449,17 @@
    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}
@@ -1421,26 +1466,27 @@
 \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,24 +1495,30 @@
 
 \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}
@@ -1473,23 +1525,26 @@
 \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 @@
 \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,40 +1584,193 @@
 \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}
 
@@ -1571,7 +1777,6 @@
 \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 @@
 
 \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 @@
 \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 @@
   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 @@
 \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 @@
 
 
 \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 @@
 \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 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale =  .8]
   \tkzGetNodes
   \tkzDrawPolygon(A,B,C)
   \tkzDrawLine[purple](C,E)
@@ -1767,7 +1968,6 @@
 \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 @@
  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 @@
 
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}[rotate=90]
+  \begin{tikzpicture}[scale =1.25,rotate=90]
   \tkzGetNodes
   \tkzDrawLine(L,F)
   \tkzDrawCircle[red](N,A')
@@ -1856,25 +2055,27 @@
 \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}
@@ -1881,9 +2082,8 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale = .5]
   \tkzGetNodes
   \tkzDrawLines(A,B X,K)
   \tkzDrawLine[teal](Y,K)
@@ -1913,25 +2113,25 @@
 \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}
@@ -1938,7 +2138,6 @@
 \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 @@
 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 @@
 \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 @@
 \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 @@
 }
 
 \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 @@
 
 \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 @@
 }
 
 \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,41 +2341,42 @@
 \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}
@@ -2188,53 +2383,52 @@
 \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 @@
   \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 @@
 
 \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,41 +2507,41 @@
 \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}
@@ -2355,7 +2548,7 @@
 \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 @@
 \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 @@
    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 @@
 
 \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 @@
 }
 
 \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 @@
 \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 @@
    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 @@
 
 \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 @@
 }
 
 \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 @@
   \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 @@
   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 @@
 \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 @@
   }
 
   \begin{center}
-    \begin{tikzpicture}
+    \begin{tikzpicture}[ scale = .5]
     \tkzGetNodes
     \tkzDrawCircle[red](O,P)
     \tkzDrawCircle[purple](O',z1)
@@ -2685,7 +2872,6 @@
 \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 @@
  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 @@
 \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.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 @@
 \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 @@
 
 \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 @@
 }
 
 \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 @@
 \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 @@
 \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 @@
 
 \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 @@
 }
 
 \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 @@
 \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 @@
 \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 @@
      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 @@
 \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 @@
 \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 @@
   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 @@
 \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 @@
      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 @@
 \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 @@
    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 @@
 \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 @@
 }
 
 \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 @@
 \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,7 +3554,6 @@
 \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)
@@ -3388,7 +3560,7 @@
 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 @@
 \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 @@
  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 @@
 \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.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 @@
 \end{tikzpicture}
 \end{Verbatim}
 
-
 % subsection three_chords (end)
 
 \subsection{Three tangents} % (fold)
@@ -3623,7 +3792,6 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale=.75]
   \tkzGetNodes
   \tkzDrawCircles(w,E)
   \tkzDrawCircles[cyan](x,E)
@@ -3682,7 +3850,6 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale = .5]
   \tkzGetNodes
   \tkzDrawPoints(A,B,C)
   \tkzDrawCircles(A,B)
@@ -3709,7 +3876,6 @@
 \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 @@
    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 @@
 \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 @@
 }
 
 \begin{center}
-  \begin{tikzpicture}
+  \begin{tikzpicture}[scale = 0.75]
   \tkzGetNodes
   \tkzDrawPolygon[teal](A,B,C)
   \tkzDrawCircle(O,A)
@@ -3855,30 +4020,29 @@
 \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 @@
 
 \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.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 @@
 
 \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 @@
   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 @@
 \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 @@
 
 \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 @@
 \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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -245,29 +245,28 @@
 
 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
@@ -274,13 +273,16 @@
    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 @@
    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 @@
   % = 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 @@
  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 @@
 \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 @@
   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,111 +502,73 @@
 \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 at ifnextchar[{\tkz at PlotCoordinates}{\tkz at PlotCoordinates[]}}
-\def\tkz at 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,",")
- }
+  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{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)
+   \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)
 
-\makeatletter
-\def\tkzPlotCoordinates{\pgfutil at ifnextchar[{\tkz at PlotCoordinates}{\tkz at PlotCoordinates[]}}
-\def\tkz at PlotCoordinates[#1]#2{%
-\draw[#1] plot coordinates {\directlua{tex.print(#2)}};}
-\makeatother
+   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}
 
 
-\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,",")
- }
+% subsubsection classic_parabola (end)
 
-\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{Plotting a curve} % (fold)
 \label{ssub:plotting_a_curve}
 In this example, we'll use lua to plot the representative curve of the function 
@@ -617,32 +588,28 @@
 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}
 
@@ -649,51 +616,48 @@
 \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 @@
    \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 @@
   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 @@
 \begin{itemize}
  \item line ,
  \item circle,
- \item ellipse,
+ \item conic (parabola, hyperbola, ellipse),
  \item triangle.
 \end{itemize}
 
@@ -925,8 +892,7 @@
 \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 @@
    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 @@
 
 
 % 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

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 end
 }
 
-\begin{tikzpicture}
+\begin{tikzpicture}[scale = 2]
    \tkzGetNodes
    \tkzDrawSegments(A,B C,D)
    \tkzDrawPoints(A,B,C,D,I)
@@ -99,7 +101,6 @@
 \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.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 @@
 % 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 @@
 \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}
 
-% subsection line_ellipse (end)
+\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_conic (end)
 % section intersections (end)
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 % printnumber
 
 \let\pmpn\pgfmathprintnumber
-
 \AtBeginDocument{\MakeShortVerb{\|}} % link to shortvrb
 
 \begin{document} 
@@ -182,10 +151,10 @@
 \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 @@
 \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 @@
 \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 @@
 |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 @@
 |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 @@
 |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 @@
 |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,7 +378,9 @@
 |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|   \\
@@ -405,6 +387,12 @@
 |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 @@
 |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 @@
 |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 @@
 |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,12 +542,12 @@
 \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|   \\         
@@ -558,11 +554,11 @@
                                    \\
 \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)            ->|     \\
@@ -569,14 +565,14 @@
                                    \\
 \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 @@
 |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 @@
                                    \\
 \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

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -28,10 +28,9 @@
 
 \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 @@
 \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 @@
 \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:
+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.
 
-\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}
-
+The following documentation uses only scaling in the \tkzNameEnv{tikzpicture}.
 \subsection{Code presentation} % (fold)
 \label{sub:code_presentation}
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -17,7 +17,7 @@
    
  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 @@
 % !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 @@
 \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 @@
   _,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 @@
 \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 @@
 \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,22 +214,25 @@
    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:
 \begin{Verbatim}

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -35,7 +35,7 @@
   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 @@
 
 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).
    
 
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -146,7 +146,7 @@
 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 @@
 \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 @@
 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 @@
 \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 @@
 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 @@
 \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.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 @@
 \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.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 @@
 \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 @@
 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 @@
 \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 @@
 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 @@
 \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.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 @@
 \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.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.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 @@
 
 \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 @@
 \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 @@
 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} 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -41,7 +41,6 @@
 \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)
@@ -48,7 +47,7 @@
    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,7 +60,6 @@
 \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)
@@ -68,16 +66,19 @@
    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 @@
 \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))}
 }
 
-\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)
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-why.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -77,7 +77,6 @@
 \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 @@
 
 \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 @@
   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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/examples/tkz-elements-demo_3.tex	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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,12 +38,12 @@
    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)
@@ -53,7 +50,6 @@
    \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)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 at ifnextchar[{\tkz at DrawLuaEllipse}{\tkz at DrawLuaEllipse[]}}
 \def\tkz at DrawLuaEllipse[#1](#2,#3,#4){% 
@@ -61,6 +64,21 @@
 \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 at ifnextchar[{\tkz at DrawCoordinates}{\tkz at DrawCoordinates[]}}
+\def\tkz at DrawCoordinates[#1](#2){% 
+\begingroup 
+\draw[#1] plot coordinates {\directlua{tex.print(#2)}}; 
+\endgroup
+}
+
+\def\tkzDrawPointOnCurve{\pgfutil at ifnextchar[{\tkz at DrawPointOnCurve}{\tkz at DrawPointOnCurve[]}}
+\def\tkz at DrawPointOnCurve[#1](#2){% 
+\begingroup 
+ \draw[#1] plot coordinates {(#2)};
+\endgroup
+}
+
 \def\tkzDN{\pgfutil at ifnextchar[{\tkz at DN}{\tkz at DN[2]}}%
 \def\tkz at DN[#1]#2{%
 \begingroup
@@ -68,6 +86,7 @@
 \pgfmathprintnumber{#2}
 \endgroup
 }
+
 \let\percentchar\@percentchar
 
 \makeatother

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
    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 @@
                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 @@
 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 @@
 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 @@
 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 @@
 -----------------------
 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 @@
      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 @@
  -- 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 @@
  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 @@
  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)

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 

Added: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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


Property changes on: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
     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 @@
                   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 @@
 
 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
 

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Added: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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


Property changes on: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 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 @@
          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 @@
          -- 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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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,7 +107,25 @@
     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)
     return symmetry_(p,pt)
@@ -149,4 +167,9 @@
         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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
    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 @@
   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 @@
 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 @@
   else 
     root1, root2 = solve_cx_quadratic(a, b, c)
   end
-
    return root1, root2 -- Two real roots
 end
 
@@ -310,3 +315,109 @@
  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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 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 @@
    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 @@
     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 @@
 
     -- 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)

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
     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 @@
                type        = type, 
                vec         = vec,
                length      = length}
-    setmetatable(o, self)
+    setmetatable(li, self)
     self.__index = self
-    return o
+    return li
 end
 
 -------------------
@@ -72,7 +72,8 @@
 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,6 +170,10 @@
          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 )
@@ -175,35 +180,31 @@
 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 @@
       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 @@
 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 @@
 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 @@
 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 @@
          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 @@
     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 @@
 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 @@
   
 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 @@
   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 @@
          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)
   

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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_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_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_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 @@
   S={}
   T={}
   V={}
+  CO={}
+  EL={}
+  PA={}
+  HY={}
 end  
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_misc.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 
 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

Added: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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


Property changes on: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 
 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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 
 -- 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 @@
    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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
    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 @@
 -- 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 @@
 -- 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
 

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
                 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 @@
    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 @@
 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 @@
 
 
 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 @@
 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 @@
     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 @@
     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 @@
    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 @@
           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 @@
 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 @@
 
 
 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 @@
 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 @@
    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 @@
      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 @@
 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,11 +526,7 @@
 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 ()
@@ -433,7 +533,7 @@
    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)
@@ -440,20 +540,64 @@
 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 @@
    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 @@
   return  x
 end
 
-function triangle: area ()
+function triangle: area () -- obsolete
     return area_(self.pa,self.pb,self.pc)
 end
 

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua	2025-02-24 20:29:38 UTC (rev 74261)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua	2025-02-24 20:29:57 UTC (rev 74262)
@@ -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 @@
 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



More information about the tex-live-commits mailing list.