From b06c6695162b493aeec3b594c6beb518c15c98ba Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Tue, 24 Jan 2023 03:02:57 +0000
Subject: CTAN sync 202301240302

---
 .../latex/tools/tkz-tools-eu-intersections.tex     | 498 +++++++++++++++++++++
 1 file changed, 498 insertions(+)
 create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex

(limited to 'macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex')

diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
new file mode 100644
index 0000000000..bb741fc59e
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
@@ -0,0 +1,498 @@
+% tkz-tools-intersections.tex
+% Copyright 2023  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.
+%  utf8 encoding
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23} 
+\typeout{2023/01/23 5.00c tkz-tools-eu-intersections.tex}   
+\makeatletter
+%<--------------------------------------------------------------------------–>
+%                 intersection  de deux lignes
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLL(#1,#2)(#3,#4){% méthode avec xfp
+\tkz@InterLL(#1,#2)(#3,#4){tkzPointResult}
+}
+
+\def\tkz@InterLL(#1,#2)(#3,#4)#5{%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\tkz@ax\pgf@x%
+\tkz@ay\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@bx\pgf@x%
+\tkz@by\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
+\tkz@cx\pgf@x%
+\tkz@cy\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}%
+\tkz@dx\pgf@x%
+\tkz@dy\pgf@y%
+\edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}}
+\edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}}
+\edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}}
+\edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}}
+\edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}}
+\edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}}
+\edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
+}
+
+
+% méthode with coordinates
+\def\tkzInterLLxy(#1,#2,#3,#4)(#5,#6,#7,#8){%
+%\path (intersection of #1--#2 and #3--#4) coordinate(#5);%
+\tkz@ax#1%
+\tkz@ay#2%
+\tkz@bx#3%
+\tkz@by#4%
+\tkz@cx#5%
+\tkz@cy#6%
+\tkz@dx#7%
+\tkz@dy#8%
+\edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}}
+\edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}}
+\edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}}
+\edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}}
+\edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}}
+\edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}}
+\edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (tkzPointResult);
+}
+
+%<--------------------------------------------------------------------------–>
+%                 intersection  de Ligne Cercle rayon connu
+%<--------------------------------------------------------------------------–>
+% /*
+%    Calculate the intersection of a ray and a sphere
+%    The line segment is defined from p1 to p2
+%    The sphere is of radius r and centered at sc
+%    There are potentially two points of intersection given by
+%    p = p1 + mu1 (p2 - p1)
+%    p = p1 + mu2 (p2 - p1)
+%    Return FALSE if the ray doesn't intersect the sphere.
+% */
+% int RaySphere(XYZ p1,XYZ p2,XYZ sc,double r,double *mu1,double *mu2)
+% {
+%    double a,b,c;
+%    double bb4ac;
+%    XYZ dp;
+% 
+%    dp.x = p2.x - p1.x;
+%    dp.y = p2.y - p1.y;
+%    dp.z = p2.z - p1.z;
+%    a = dp.x * dp.x + dp.y * dp.y + dp.z * dp.z;
+%    b = 2 * (dp.x * (p1.x - sc.x) + dp.y * (p1.y - sc.y) + dp.z * (p1.z - sc.z));
+%    c = sc.x * sc.x + sc.y * sc.y + sc.z * sc.z;
+%    c += p1.x * p1.x + p1.y * p1.y + p1.z * p1.z;
+%    c -= 2 * (sc.x * p1.x + sc.y * p1.y + sc.z * p1.z);
+%    c -= r * r;
+%    bb4ac = b * b - 4 * a * c;
+%    if (ABS(a) < EPS || bb4ac < 0) {
+%       *mu1 = 0;
+%       *mu2 = 0;
+%       return(FALSE);
+%    }
+% 
+%    *mu1 = (-b + sqrt(bb4ac)) / (2 * a);
+%    *mu2 = (-b - sqrt(bb4ac)) / (2 * a);
+% 
+%    return(TRUE);
+% }
+%<---------- test ------------------------------------------------------–>
+\def\tkzTestInterLC(#1,#2)(#3,#4){%
+\begingroup
+\tkz@Projection(#1,#2)(#3){tkz@pth}% distance centre à la ligne
+\tkz@@CalcLength(#3,tkz@pth){tkz@mathLen}%  
+\tkz@@CalcLength(#3,#4){tkzLengthResult}%calcul du rayon
+\ifdim\tkz@mathLen pt>\tkzLengthResult pt\relax%
+\global\tkzFlagLCfalse
+\else
+\global\tkzFlagLCtrue
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkz@numlc{0}
+\pgfkeys{/linecircle/.cd,
+  node/.code               = \def\tkz@numlc{0},
+  R/.code                  = \def\tkz@numlc{1}, 
+  with nodes/.code         = \def\tkz@numlc{2},
+  common/.store in         = \tkz@common,
+  common                   = {},
+  near/.is if              =  tkz@near,
+  near/.default            =  true,
+  near                     =  false,
+  next to/.store in        = \tkz@nextto,
+  next to/.initial         = {},
+  next/.default            = {},
+  next to                  = {},
+  next to/.value required,
+  node  
+ }
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLC{\pgfutil@ifnextchar[{\tkz@InterLC}{\tkz@InterLC[]}}
+\def\tkz@InterLC[#1](#2,#3)(#4,#5){%
+\begingroup      
+\pgfqkeys{/linecircle}{#1}
+ \pgfinterruptboundingbox 
+\ifcase\tkz@numlc%
+    % first case 0
+  \tkz@@CalcLength(#4,#5){tkzLengthResult}
+  \tkzInterLCR(#2,#3)(#4,\tkzLengthResult pt){tkzFirstPointResult}%
+                         {tkzSecondPointResult}
+\or% 1
+    \tkzInterLCR(#2,#3)(#4,#5 cm){tkzFirstPointResult}
+                   {tkzSecondPointResult}%  
+\or% 2
+    \tkzInterLCWithNodes(#2,#3)(#4,#5){tkzFirstPointResult}%
+                        {tkzSecondPointResult}% 
+\fi
+\iftkz@near
+  \tkz@@CalcLength(#2,tkzFirstPointResult){tkzLengthFirst}
+  \tkz@@CalcLength(#2,tkzSecondPointResult){tkzLengthSecond}
+      \ifdim \tkzLengthFirst pt < \tkzLengthSecond pt\relax%
+      \else
+       \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+       \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+       \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+      \fi
+\else
+    \ifx\tkz@common\tkzutil@empty 
+      \ifx\tkz@nextto\tkzutil@empty 
+         \tkzFindAngle(tkzSecondPointResult,tkzFirstPointResult,#4)   
+         \tkzGetAngle{tkz@an}
+          \ifdim\tkz@an pt<180 pt\relax%
+          \else
+           \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+           \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+           \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+          \fi
+      \else
+         \tkz@@CalcLength(\tkz@nextto,tkzFirstPointResult){tkzLengthFirst}
+         \tkz@@CalcLength(\tkz@nextto,tkzSecondPointResult){tkzLengthSecond}
+             \ifdim \tkzLengthFirst pt < \tkzLengthSecond pt\relax%
+             \else
+              \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+              \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+              \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+             \fi
+       \fi
+    \else 
+         \tkz@@CalcLength(\tkz@common,tkzSecondPointResult){tkz@mathLen}
+         \ifdim\tkz@mathLen pt<1pt\relax%
+         \else
+          \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+          \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+          \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+         \fi
+     \fi
+\fi%near
+\endpgfinterruptboundingbox    
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLCR(#1,#2)(#3,#4)#5#6{%
+\begingroup
+\tkz@radi=#4%
+\tkz@@extractxy{#3}
+\tkz@bx =\pgf@x\relax%
+\tkz@by =\pgf@y\relax%
+\tkz@Projection(#1,#2)(#3){tkz@pth}
+\tkz@@CalcLength(#3,tkz@pth){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<0.05pt\relax%
+        \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+                     {\pgfpointanchor{#2}{center}}%
+        \tkz@ax=\pgf@x%
+        \tkz@ay=\pgf@y%
+        \pgfpointborderellipse{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+                              {\pgfpoint{\tkz@radi}{\tkz@radi}}
+        \tkz@ax=\pgf@x\relax%
+        \tkz@ay=\pgf@y\relax%
+        \advance\tkz@bx by\tkz@ax\relax%
+        \advance\tkz@by by\tkz@ay\relax%
+        \pgfcoordinate{#6}{\pgfqpoint{\tkz@bx}{\tkz@by}}
+        \tkzCSym(#3)(#6){#5} 
+  \else  
+       \edef\pgfmathresult{\fpeval{\tkz@mathLen/\tkz@radi}} 
+      % \edef\tkz@angle{\fpeval{acosd(\pgfmathresult)}}
+        \pgfmathacos@{\pgfmathresult}%
+        \let\tkz@angle\pgfmathresult%
+        \pgfpointdiff{\pgfpointanchor{#3}{center}}%
+                     {\pgfpointanchor{tkz@pth}{center}}%
+        \tkz@ax=\pgf@x%
+        \tkz@ay=\pgf@y%  
+        \pgfpointborderellipse{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+                              {\pgfpoint{\tkz@radi}{\tkz@radi}}
+        \tkz@ax =\pgf@x\relax%
+        \tkz@ay =\pgf@y\relax%
+        \advance\tkz@bx by\tkz@ax\relax%
+        \advance\tkz@by by\tkz@ay\relax%
+        \tkz@@extractxy{#3}
+        \tkz@ax =\pgf@x\relax%
+        \tkz@ay =\pgf@y\relax%
+        \tkz@@extractxy{tkz@pth}
+        \pgfmathrotatepointaround{\pgfpoint{\tkz@bx}{\tkz@by}}%
+                                 {\pgfpoint{\tkz@ax}{\tkz@ay}}%
+                                 {\tkz@angle}
+         \pgfcoordinate{#5}{\pgfqpoint{\pgf@x}{\pgf@y}}
+        \pgfmathrotatepointaround{\pgfpoint{\tkz@bx}{\tkz@by}}%
+                                 {\pgfpoint{\tkz@ax}{\tkz@ay}}%
+                                 {-\tkz@angle}
+  \pgfcoordinate{#6}{\pgfqpoint{\pgf@x}{\pgf@y}}
+
+\fi        
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%                 intersection  de Ligne Cercle 
+% #4 center #5 point sur le cercle
+%<--------------------------------------------------------------------------–>
+% \def\tkzInterLC(#1,#2)(#3,#4)#5#6{%
+%     \begingroup
+%     \tkz@@CalcLength(#3,#4){tkz@rad}
+%     \tkzInterLCR(#1,#2)(#3,\tkz@rad pt){#5}{#6}
+% \endgroup
+% } 
+%<--------------------------------------------------------------------------–>
+%                 intersection  de Ligne Cercle rayon inconnu
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLCWithNodes(#1,#2)(#3,#4,#5)#6#7{%
+\begingroup
+    \tkz@@CalcLength(#4,#5){tkz@radius}
+    \tkzInterLCR(#1,#2)(#3,\tkz@radius pt){#6}{#7}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%  Intersection of 2 circles
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% méthode
+% /* circle_circle_intersection() *
+%  * Determine the points where 2 circles in a common plane intersect.
+%  *
+%  * int circle_circle_intersection(
+%  *                                // center and radius of 1st circle
+%  *                                double x0, double y0, double r0,
+%  *                                // center and radius of 2nd circle
+%  *                                double x1, double y1, double r1,
+%  *                                // 1st intersection point      
+%  *                                // 2nd intersection point
+%  *
+%  * This is a public domain work. 3/26/2005 Tim Voght
+%  *
+% int circle_circle_intersection(double x0, double y0, double r0,
+%                                double x1, double y1, double r1,
+%                                double *xi, double *yi,
+%                                double *xi_prime, double *yi_prime)
+% {
+%   double a, dx, dy, d, h, rx, ry;
+%   double x2, y2;
+% 
+%   /* dx and dy are the vertical and horizontal distances between
+%    * the circle centers.
+%    */
+%   dx = x1 - x0;
+%   dy = y1 - y0;
+% 
+%   /* Determine the straight-line distance between the centers. */
+%   //d = sqrt((dy*dy) + (dx*dx));
+%   d = hypot(dx,dy); // Suggested by Keith Briggs
+% 
+%   /* Check for solvability. */
+%   if (d > (r0 + r1))
+%   {
+%     /* no solution. circles do not intersect. */
+%     return 0;
+%   }
+%   if (d < fabs(r0 - r1))
+%   {
+%     /* no solution. one circle is contained in the other */
+%     return 0;
+%   }
+% 
+%   /* 'point 2' is the point where the line through the circle
+%    * intersection points crosses the line between the circle
+%    * centers.  
+%    */
+% 
+%   /* Determine the distance from point 0 to point 2. */
+%   a = ((r0*r0) - (r1*r1) + (d*d)) / (2.0 * d) ;
+% 
+%   /* Determine the coordinates of point 2. */
+%   x2 = x0 + (dx * a/d);
+%   y2 = y0 + (dy * a/d);
+% 
+%   /* Determine the distance from point 2 to either of the
+%    * intersection points.
+%    */
+%   h = sqrt((r0*r0) - (a*a));
+% 
+%   /* Now determine the offsets of the intersection points from
+%    * point 2.
+%    */
+%   rx = -dy * (h/d);
+%   ry = dx * (h/d);
+% 
+%   /* Determine the absolute intersection points. */
+%   *xi = x2 + rx;
+%   *xi_prime = x2 - rx;
+%   *yi = y2 + ry;
+%   *yi_prime = y2 - ry;
+% 
+%   return 1;
+% } 
+%<--------------------------------------------------------------------------–>
+%    Intersection de deux cercles  
+%<--------------------------------------------------------------------------–>
+%<---------- test ------------------------------------------------------–>
+% test avec des nodes  R-r <= d <= R+r
+\def\tkzTestInterCC(#1,#2)(#3,#4){%
+\begingroup
+\tkz@@CalcLength(#1,#3){tkz@mathLen}% distance entre les centres  
+\tkz@@CalcLength(#2,#1){tkz@rA}%calcul du rayon
+\tkz@@CalcLength(#4,#3){tkz@rB}%calcul du rayon
+% test if d <= rA + rB ?
+\edef\tkz@rS{\fpeval{\tkz@rA+\tkz@rB}}
+\ifdim\tkz@mathLen pt > \tkz@rS pt\relax%
+\global\tkzFlagCCfalse
+\else
+% now test if d>= rA - rB or rB-rA
+  \ifdim \tkz@rA pt >  \tkz@rB pt\relax%
+       \edef\tkz@rD{\fpeval{\tkz@rA-\tkz@rB}}
+   \else
+       \edef\tkz@rD{\fpeval{\tkz@rB-\tkz@rA}}
+   \fi
+\ifdim  \tkz@rD pt > \tkz@mathLen pt\relax%
+ \global\tkzFlagCCfalse
+\else
+\global\tkzFlagCCtrue
+\fi
+\fi
+\endgroup
+}
+
+\def\tkz@numcc{0}
+\pgfkeys{
+/circlecircle/.cd,
+  node/.code           = \def\tkz@numcc{0},
+  R/.code              = \def\tkz@numcc{1},
+  with nodes/.code     = \def\tkz@numcc{2},
+  common/.store in     = \tkz@common,
+  common               = {},
+  node
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzInterCC{\pgfutil@ifnextchar[{\tkz@InterCC}{\tkz@InterCC[]}}
+\def\tkz@InterCC[#1](#2,#3)(#4,#5){%
+\begingroup      
+\pgfqkeys{/circlecircle}{#1}
+\ifcase\tkz@numcc%
+ % first case 0 
+  \tkz@save@length 
+  \tkz@@CalcLengthcm(#2,#3){tkz@rayA}
+  \tkz@@CalcLengthcm(#4,#5){tkz@rayB}
+  \tkz@restore@length     
+  \tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{tkzSecondPointResult}  
+  \or% 1
+ \tkzInterCCR(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}%
+  \or%2
+ \tkzInterCCWithNodes(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}    
+\fi 
+ \ifx\tkz@common\tkzutil@empty 
+ \tkzFindAngle(#2,tkzFirstPointResult,#4)   \tkzGetAngle{tkz@an}
+ \ifdim\tkz@an pt<180 pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+  \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \else
+\tkz@@CalcLength(\tkz@common,tkzSecondPointResult){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<0.05pt\relax%
+ \else
+  \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+   \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+  \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+  \fi
+  \fi
+\endgroup
+} 
+%<--------------------------------------------------------------------------–>
+
+\def\tkzInterCCR(#1,#2)(#3,#4)#5#6{%
+\begingroup
+\pgfinterruptboundingbox  
+\tkz@save@length  
+\tkz@@CalcLength(#1,#3){tkz@dd}
+\tkz@restore@length 
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} 
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}} 
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\tkz@cx#2cm %
+\tkz@cy#4cm %
+\edef\tkz@aa{\fpeval{((\tkz@cx+\tkz@cy)/(2*\tkz@dd))*(\tkz@cx-\tkz@cy)+\tkz@dd/2}}
+ \edef\tkz@xx{\fpeval{\tkz@ax+\tkz@aa/\tkz@dd*(\tkz@bx - \tkz@ax)}}
+\edef\tkz@yy{\fpeval{\tkz@ay+\tkz@aa/\tkz@dd*(\tkz@by - \tkz@ay)}} 
+\path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter);
+\edef\tkz@hh{\fpeval{sqrt(abs((\tkz@cx+\tkz@aa)*(\tkz@cx-\tkz@aa)))}}% abs !2023
+\edef\tkz@rx{\fpeval{\tkz@hh / \tkz@dd * (\tkz@ay - \tkz@by)}}
+\edef\tkz@ry{\fpeval{\tkz@hh / \tkz@dd * (\tkz@bx - \tkz@ax)}}
+\edef\tkz@xs{\fpeval{\tkz@xx + \tkz@rx}}
+\edef\tkz@ys{\fpeval{\tkz@yy + \tkz@ry}}
+\path[coordinate](\tkz@xs pt,\tkz@ys pt) coordinate (#5);
+\edef\tkz@xss{\fpeval{\tkz@xx - \tkz@rx}}
+\edef\tkz@yss{\fpeval{\tkz@yy - \tkz@ry}}
+\path[coordinate](\tkz@xss pt,\tkz@yss pt) coordinate (#6); 
+\endpgfinterruptboundingbox   
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% #2 node #3 node #4 node #5 node
+% \def\tkzInterCC(#1,#2)(#3,#4)#5#6{%
+% \begingroup
+%   \tkz@@CalcLength(#1,#2){tkz@rayA}
+%   \tkz@@CalcLength(#3,#4){tkz@rayB}
+%   \tkzInterCCR(#1,\tkz@rayA pt)(#3,\tkz@rayB pt){#5}{#6}
+% \endgroup
+% }  
+%<--------------------------------------------------------------------------–>
+%    Intersection de deux cercles   Avec deux points
+%<--------------------------------------------------------------------------–>
+% la première variante devrait être #2 #3  avec #4 #5
+\def\tkzInterCCWithNodes(#1,#2,#3)(#4,#5,#6)#7#8{%
+\begingroup
+  \tkz@@CalcLengthcm(#2,#3){tkz@rayA}
+  \tkz@@CalcLengthcm(#5,#6){tkz@rayB}
+  \tkzInterCCR(#1,\tkz@rayA)(#4,\tkz@rayB){#7}{#8}
+\endgroup
+} 
+\makeatother
+\endinput
\ No newline at end of file
-- 
cgit v1.2.3

