From e7c703c953f148411c70d5ca86dc1c1023d73806 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 27 Oct 2023 03:03:08 +0000 Subject: CTAN sync 202310270303 --- macros/latex/contrib/tkz/tkz-euclide/README.md | 14 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-main.tex | 4 +- .../contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf | Bin 1119088 -> 1118849 bytes .../latex/drawings/tkz-draw-eu-angles.tex | 6 +- .../latex/drawings/tkz-draw-eu-circles.tex | 6 +- .../latex/drawings/tkz-draw-eu-compass.tex | 6 +- .../latex/drawings/tkz-draw-eu-ellipses.tex | 6 +- .../latex/drawings/tkz-draw-eu-lines.tex | 6 +- .../latex/drawings/tkz-draw-eu-points.tex | 6 +- .../latex/drawings/tkz-draw-eu-polygons.tex | 6 +- .../latex/drawings/tkz-draw-eu-protractor.tex | 6 +- .../latex/drawings/tkz-draw-eu-sectors.tex | 6 +- .../latex/drawings/tkz-draw-eu-show.tex | 6 +- .../tkz-euclide/latex/libs/tkz-lib-eu-marks.tex | 6 +- .../tkz-euclide/latex/libs/tkz-lib-eu-shape.tex | 6 +- .../latex/obj-lua/tkz-obj-eu-lua-circles-by.tex | 157 +++++ .../latex/obj-lua/tkz-obj-eu-lua-circles.tex | 223 +++++++ .../latex/obj-lua/tkz-obj-eu-lua-points-by.tex | 522 ++++++++++++++++ .../latex/obj-lua/tkz-obj-eu-lua-points-spc.tex | 680 +++++++++++++++++++++ .../latex/obj-lua/tkz-obj-eu-lua-points-with.tex | 269 ++++++++ .../latex/obj-lua/tkz-obj-eu-lua-points.tex | 166 +++++ .../latex/obj-lua/tkz-obj-lua-circles-by.tex | 157 ----- .../latex/obj-lua/tkz-obj-lua-circles.tex | 223 ------- .../latex/obj-lua/tkz-obj-lua-points-by.tex | 522 ---------------- .../latex/obj-lua/tkz-obj-lua-points-spc.tex | 680 --------------------- .../latex/obj-lua/tkz-obj-lua-points-with.tex | 269 -------- .../latex/obj-lua/tkz-obj-lua-points.tex | 166 ----- .../tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex | 6 +- .../latex/obj/tkz-obj-eu-circles-by.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-circles.tex | 6 +- .../tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex | 6 +- .../tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex | 6 +- .../latex/obj/tkz-obj-eu-points-rnd.tex | 6 +- .../latex/obj/tkz-obj-eu-points-spc.tex | 6 +- .../latex/obj/tkz-obj-eu-points-with.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-points.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex | 6 +- .../contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg | 6 +- .../contrib/tkz/tkz-euclide/latex/tkz-euclide.sty | 28 +- .../latex/tools-lua/tkz-tools-eu-lua-angles.tex | 102 ++++ .../latex/tools-lua/tkz-tools-eu-lua-base.tex | 89 +++ .../tools-lua/tkz-tools-eu-lua-intersections.tex | 525 ++++++++++++++++ .../latex/tools-lua/tkz-tools-eu-lua-math.tex | 310 ++++++++++ .../latex/tools-lua/tkz-tools-lua-angles.tex | 102 ---- .../latex/tools-lua/tkz-tools-lua-base.tex | 89 --- .../tools-lua/tkz-tools-lua-intersections.tex | 525 ---------------- .../latex/tools-lua/tkz-tools-lua-math.tex | 310 ---------- .../tkz-euclide/latex/tools/tkz-tools-eu-BB.tex | 6 +- .../latex/tools/tkz-tools-eu-angles.tex | 6 +- .../tkz-euclide/latex/tools/tkz-tools-eu-base.tex | 6 +- .../latex/tools/tkz-tools-eu-colors.tex | 6 +- .../latex/tools/tkz-tools-eu-intersections.tex | 6 +- .../tkz-euclide/latex/tools/tkz-tools-eu-math.tex | 6 +- .../latex/tools/tkz-tools-eu-modules.tex | 6 +- .../tkz-euclide/latex/tools/tkz-tools-eu-text.tex | 6 +- .../latex/tools/tkz-tools-eu-utilities.tex | 6 +- 58 files changed, 3169 insertions(+), 3167 deletions(-) create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles-by.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex delete mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex (limited to 'macros/latex/contrib/tkz/tkz-euclide') diff --git a/macros/latex/contrib/tkz/tkz-euclide/README.md b/macros/latex/contrib/tkz/tkz-euclide/README.md index a272f5a384..c50db0cb55 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/README.md +++ b/macros/latex/contrib/tkz/tkz-euclide/README.md @@ -1,6 +1,6 @@ # tkz-euclide — for euclidean geometry -Release 5.03c 2023/10/20 +Release 5.04c 2023/10/26 ## Description @@ -65,23 +65,25 @@ Other examples, in French, are on my site. ## History -- 5.03c. Correction of the file tkz-obj-lua-points-spc.tex. Bug in the macro `\tkzDefBarycentricPointTwo`. +- 5.04c Some files have been renamed. + +- 5.03c Correction of the file tkz-obj-lua-points-spc.tex. Bug in the macro `\tkzDefBarycentricPointTwo`. Add macro |\tkzDrawEllipse|; -- 5.02c. Correction of the file tkz-lib-eu-shape.tex. Remove duplicate macro inside tkz-draw-eu-points.tex (ex tkz-obj-eu-draw-points.tex); +- 5.02c Correction of the file tkz-lib-eu-shape.tex. Remove duplicate macro inside tkz-draw-eu-points.tex (ex tkz-obj-eu-draw-points.tex); - 5.01c Correction of the date of the file tkz-euclide.sty. Cleaned up the file tkz-tools-lua-math.tex. Added file tkz-obj-eu-points-spc.tex; - 5.00c Added the "lua" option to the package, allowing to perform most of the calculations with "lua". This saves time and precision; -- 4.25c. Remove \input{tkz-obj-eu-draw-triangles.tex} from the list of files to load. +- 4.25c Remove \input{tkz-obj-eu-draw-triangles.tex} from the list of files to load. -- 4.24c. Correction of a bug in the macro `\tkzMarkAngle`; +- 4.24c Correction of a bug in the macro `\tkzMarkAngle`; Modification of the macro `\tkzDefCircle[apollonius]`; -- 4.23c. Correction of a bug in the macro `\tkzDrawSemiCircle`, +- 4.23c Correction of a bug in the macro `\tkzDrawSemiCircle`, Modification of `\tkzDefRadicalAxis`, Remove old codes, Correction of the documentation; diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex index 8ab85da376..6e98386a2d 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex @@ -21,10 +21,10 @@ headings = small ]{tkz-doc} \gdef\tkznameofpack{tkz-euclide} -\gdef\tkzversionofpack{5.03c} +\gdef\tkzversionofpack{5.04c} \gdef\tkzdateofpack{\today} \gdef\tkznameofdoc{doc-tkz-euclide} -\gdef\tkzversionofdoc{5.03c} +\gdef\tkzversionofdoc{5.04c} \gdef\tkzdateofdoc{\today} \gdef\tkzauthorofpack{Alain Matthes} \gdef\tkzadressofauthor{} diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf index e8ccbe8cdc..76a0b3c7f5 100644 Binary files a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf and b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf differ diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex index 5f79e810fa..001c8f3226 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tool-eu-angles.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tool-eu-angles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzSetUpArc diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex index e083f9a96b..aef5271531 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-draw-circles.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-draw-circles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzSetUpCircle diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex index aea5f55ba1..046bd4b9bd 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-compass.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-compass.tex} \makeatletter %<--------------------------------------------------------------------------–> % Author Alain Matthes diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex index f92aa7054e..cbacfdd3d4 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-draw-ellipses.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-draw-ellipses.tex} \makeatletter diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex index a268113f85..0a5c9c1be8 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-draw-lines.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-draw-lines.tex} \makeatletter %<--------------------------------------------------------------------------–> diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex index 38a6020d46..520e3159e8 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-draw-eu-points.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-draw-eu-points.tex} \makeatletter %<---------------------------------------------------------------------------> % tkzSetUpPoint définit la forme d'un point diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex index 8d15afdf16..df42073c07 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-polygons.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-polygons.tex} \makeatletter %<--------------------------------------------------------------------------–> % Polygon diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex index 520188ed7d..1400924439 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-protractor.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-protractor.tex} \makeatletter %<--------------------------------------------------------------------------–> % !!! idea from Y. Combe !!! diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex index b20d1945a8..31684e81fe 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-sectors.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-sectors.tex} \makeatletter %<----------------------- Sectors ------------------------------–> \gdef\tkz@nums{0} diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex index 7a13c1e0b4..7dd82c3f3b 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-show.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-show.tex} \makeatletter %<--------------------------------------------------------------------------–> % finding specific points in a triangle diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex index 83f04d1314..5c25cf710e 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-lib-eu-marks.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-lib-eu-marks.tex} \makeatletter %<--------------------------------------------------------------------------–> % Création des symboles diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex index 0837f37a12..f21fa29fd9 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-lib-eu-shape.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-lib-eu-shape.tex} %<--------------------------------------------------------------------------–> % Création des symboles %<--------------------------------------------------------------------------–> diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex new file mode 100644 index 0000000000..3dc06c7e29 --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex @@ -0,0 +1,157 @@ +% tkz-obj-eu-circles.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. + +\def\fileversion{6.00} +\def\filedate{2023/10/26} +\typeout{2023/10/26 6.00 tkz-obj-eu-circles.tex} +\makeatletter +%<--------------------------------------------------------------------------–> +% tkzCircle center and one point +%<--------------------------------------------------------------------------–> +% attention radius circle is defined by center and a point on the circle +% R defined by center and the value of the radius +% no need to define a circle with R tikz uses this method. +% through instead of radius +\def\tkz@numcby{0} +\pgfkeys{/tkzDefCircleBy/.cd, + translation/.code args = {from #1 to #2} { \def\tkz@numcby{0} + \def\tkzfrom{#1} + \def\tkzto{#2}}, + homothety/.code args = {center #1 ratio #2}{ \def\tkz@numcby{1} + \def\tkzcenter{#1} + \def\tkzratio{#2}}, + reflection/.code args = {over #1--#2}{ \def\tkz@numcby{2} + \def\tkzdeb{#1} + \def\tkzfin{#2}}, + symmetry/.code args = {center #1}{ \def\tkz@numcby{3} + \def\tkzcenter{#1}}, + rotation/.code args = {center #1 angle #2}{ \def\tkz@numcby{4} + \def\tkzcenter{#1} + \def\tkzangle{#2}}, + inversion/.code args={center #1 through #2}{ \def\tkz@numcby{5} + \def\tkzcenter{#1} + \def\tkzpoint{#2}}, + inversion negative/.code args = {center #1 through #2}{\def\tkz@numcby{6} + \def\tkzcenter{#1} + \def\tkzpoint{#2}} + } +\def\tkzDefCircleBy{\pgfutil@ifnextchar[{\tkz@DefCircleBy}{\tkz@DefCircleBy[]}} +\def\tkz@DefCircleBy[#1](#2){% +\begingroup +\pgfqkeys{/tkzDefCircleBy}{#1} +\ifcase\tkz@numcby% + \tkzDefCircleTranslation(#2)% + \or% 1 + \tkzDefCircleHomothety(#2) + \or% 2 + \tkzDefCircleReflection(#2) + \or% 3 + \tkzDefCircleSymmetry(#2) + \or% 4 + \tkzDefCircleRotation(#2) + \or% 5 + \tkzDefInversionCircle(#2,\tkzcenter,\tkzpoint) + \or% 6 + \tkzDefInversionNegativeCircle(#2,\tkzcenter,\tkzpoint) +\fi +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefCircleTranslation(#1,#2){% +\begingroup + \tkzUTranslation(\tkzfrom,\tkzto)(#1) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzUTranslation(\tkzfrom,\tkzto)(#2) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefCircleHomothety(#1,#2){% +\begingroup + \tkzUHomo(\tkzcenter,\tkzratio)(#1) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzUHomo(\tkzcenter,\tkzratio)(#2) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefCircleReflection(#1,#2){% +\begingroup + \tkzUSymOrth(\tkzdeb,\tkzfin)(#1) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzUSymOrth(\tkzdeb,\tkzfin)(#2) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefCircleSymmetry(#1,#2){% +\begingroup + \tkzUCSym(\tkzcenter)(#1) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzUCSym(\tkzcenter)(#2) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefCircleRotation(#1,#2){% +\begingroup + \tkzURotateAngle(\tkzcenter,\tkzangle)(#1) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzURotateAngle(\tkzcenter,\tkzangle)(#2) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +% #3,#4 cercle d'inversion centre #3. through #4 +% Si le cercle passe par le pôle l'image est une droite +\def\tkzDefInversionCircle(#1,#2,#3,#4){% +\begingroup + \tkz@@CalcLengthcm(#1,#2){tkz@lna}% + \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% + \edef\tkzMathResult{\tkz@Dec{\tkz@Round{\tkz@Abs{\tkz@lnb - \tkz@lna}}{6}}} + \ifdim\tkzMathResult pt < 0.00001 pt\relax% + \tkzURotateAngle(#1,-90)(#2) + \pgfnodealias{tkz@a}{tkzPointResult} + \tkzUInversePoint(#3,#4)(tkz@a) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzUInversePoint(#3,#4)(#2) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} + \else + \tkzURotateAngle(#1,90)(#2) + \pgfnodealias{tkz@a}{tkzPointResult} + \tkzURotateAngle(#1,-90)(#2) + \pgfnodealias{tkz@b}{tkzPointResult} + \tkzUInversePoint(#3,#4)(tkz@a) + \pgfnodealias{tkz@p1}{tkzPointResult} + \tkzUInversePoint(#3,#4)(tkz@b) + \pgfnodealias{tkz@p2}{tkzPointResult} + \tkzUInversePoint(#3,#4)(#2) + \pgfnodealias{tkz@p3}{tkzPointResult} + \tkzDefCircle[circum](tkz@p3,tkz@p1,tkz@p2) + \fi +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefInversionNegativeCircle(#1,#2,#3,#4){% +\begingroup + \tkzDefInversionCircle(#1,#2,#3,#4) + \tkzUCSym(\tkzcenter)(tkzFirstPointResult) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzUCSym(\tkzcenter)(tkzSecondPointResult) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +% End Def Circle +%<--------------------------------------------------------------------------–> +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex new file mode 100644 index 0000000000..b6d733b242 --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex @@ -0,0 +1,223 @@ +% tkz-obj-lua-circles.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. + +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-lua-circles.tex} +\makeatletter +%<--------------------------------------------------------------------------–> +% tkzCircle center and one point +%<--------------------------------------------------------------------------–> +% attention radius circle is defined by center and a point on the circle +% R defined by center and the value of the radius +% no need to define a circle with R tikz uses this method. +% through instead of radius +\def\tkz@numc{0} +\pgfkeys{/tkzcircle/.cd, + R/.code = \def\tkz@numc{0}, + diameter/.code = \def\tkz@numc{1}, + circum/.code = \def\tkz@numc{2}, + in/.code = \def\tkz@numc{3}, + ex/.code = \def\tkz@numc{4}, + euler/.code = \def\tkz@numc{5}, + nine/.code = \def\tkz@numc{5}, + apollonius/.code = \def\tkz@numc{6}, + spieker/.code = \def\tkz@numc{7}, + orthogonal from/.code args = {#1}{\gdef\tkz@numc{8} + \def\tkz@ptfrom{#1}}, + orthogonal through/.code args = {#1 and #2}{\gdef\tkz@numc{9} + \def\tkz@ptone{#1} + \def\tkz@pttwo{#2}}, + K/.code = \def\tkz@koeff{#1}, + K = 1, + circum + } +\def\tkzDefCircle{\pgfutil@ifnextchar[{\tkz@DefCircle}{\tkz@DefCircle[]}} +\def\tkz@DefCircle[#1](#2){% +\begingroup +\pgfqkeys{/tkzcircle}{#1} +\ifcase\tkz@numc% + \tkzDefCircleR(#2) + \or% 1 + \tkzDefCircleD(#2) + \or% 2 + \tkzDefCircumCircle(#2) + \or% 3 + \tkzDefInCircle(#2) + \or% 4 + \tkzDefExCircle(#2) + \or% 5 + \tkzDefEulerCircle(#2) + \or% 6 + \tkzDefApolloniusCircle(#2) + \or% 7 + \tkzDefSpiekerCircle(#2) + \or% 8 + \tkzDefOrthogonalCircle(#2,\tkz@ptfrom) + \or% 9 + \tkzDefOrthoThroughCircle(#2,\tkz@ptone,\tkz@pttwo) + \fi +\endgroup +} +%for compatibility +%<--------------------------------------------------------------------------–> +% R +%<--------------------------------------------------------------------------–> +\def\tkzDefCircleR(#1,#2){% +\begingroup + \edef\tkzLengthResult{\fpeval{round(#2,5)}} + \global\let\tkzLengthResult\tkzLengthResult + \path (#1)--++(\tkzLengthResult,0) coordinate (tkzSecondPointResult); + \tkzRenamePoint(tkzSecondPointResult){tkzPointResult} +\endgroup +} + +%<--------------------------------------------------------------------------–> +% Diameter Circle +%<--------------------------------------------------------------------------–> +\def\tkzDefCircleD(#1,#2){% +\begingroup + \tkzDefMidPoint(#1,#2) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \pgfnodealias{tkzSecondPointResult}{#2} + \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +% Circum Circle +%<--------------------------------------------------------------------------–> +\def\tkzDefCircumCircle(#1,#2,#3){% +\begingroup + \tkzCircumCenter(#1,#2,#3) + \tkzRenamePoint(tkzPointResult){tkzFirstPointResult} + \tkzRenamePoint(#1){tkzSecondPointResult} + \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult}%3.06 add [cm] +\endgroup +} +%<--------------------------------------------------------------------------–> +% In(scribe) Circle +%<--------------------------------------------------------------------------–> +\def\tkzDefInCircle(#1,#2,#3){% +\begingroup + \tkzInCenter(#1,#2,#3) + \pgfnodealias{tkz@incenter}{tkzPointResult} + \tkzUProjection(#1,#3)(tkz@incenter) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} + \tkz@@CalcLengthcm(tkzPointResult,tkz@incenter){tkzLengthResult} + \pgfnodealias{tkzPointResult}{tkz@incenter} + \pgfnodealias{tkzFirstPointResult}{tkz@incenter} +\endgroup +} +%<--------------------------------------------------------------------------–> +% Ex(scribe) Circle +%<--------------------------------------------------------------------------–> +\def\tkzDefExCircle(#1,#2,#3){% +\begingroup + \tkzExCenter(#1,#2,#3) + \pgfnodealias{tkz@excenter}{tkzPointResult} + \tkzUProjection(#1,#3)(tkz@excenter) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} + \tkz@@CalcLengthcm(tkzPointResult,tkz@excenter){tkzLengthResult}% for tkzGetLength + \pgfnodealias{tkzPointResult}{tkz@excenter} + \pgfnodealias{tkzFirstPointResult}{tkz@excenter} +\endgroup +} +%<--------------------------------------------------------------------------–> +% Radius Ex Circle +%<--------------------------------------------------------------------------–> +\def\tkzDefExRadius(#1,#2,#3){% +\begingroup + \tkzExCenter(#1,#2,#3) + \tkzUProjection(#1,#3)(tkzPointResult) +\endgroup +} +%<--------------------------------------------------------------------------–> +% The nine-point circle, also called Euler's circle or the Feuerbach circle +% best way Ma,Mb,Mc circum center 2020 +%<--------------------------------------------------------------------------–> +\def\tkzDefEulerCircle(#1,#2,#3){% +\begingroup + \tkzDefMidPoint(#1,#2) \pgfnodealias{tkz@e1}{tkzPointResult} + \tkzDefMidPoint(#2,#3) \pgfnodealias{tkz@e2}{tkzPointResult} + \tkzDefMidPoint(#1,#3) \pgfnodealias{tkz@e3}{tkzPointResult} + \tkzCircumCenter(tkz@e1,tkz@e2,tkz@e3) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzRenamePoint(tkz@e1){tkzSecondPointResult} + \tkz@@CalcLengthcm(tkzPointResult,tkz@e1){tkzLengthResult} +\endgroup +} +\let\tkzDefNinePointsCircle\tkzEulerCircle% +\let\tkzFeuerBachCircle\tkzEulerCircle% + +\def\tkzDefEulerRadius(#1,#2,#3){% +\begingroup + \tkzEulerCenter(#1,#2,#3) + \pgfnodealias{eur@pta}{tkzPointResult} + \tkzDefMidPoint(#1,#2) + \tkz@@CalcLengthcm(eur@pta,tkzPointResult){tkzLengthResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +% Apollonius circle +%<--------------------------------------------------------------------------–> +\def\tkzDefApolloniusCircle(#1,#2){% +\begingroup + \tkzDefBarycentricPointTwo(#1,1,#2,\tkz@koeff) + \pgfnodealias{apo@pta}{tkzPointResult} + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} + \tkzDefBarycentricPointTwo(#1,1,#2,-\tkz@koeff) + \pgfnodealias{apo@ptb}{tkzPointResult} + \tkzDefMidPoint(apo@pta,apo@ptb) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkz@@CalcLengthcm(tkzFirstPointResult,apo@pta){tkzLengthResult} + \pgfnodealias{tkzThirdPointResult}{apo@ptb} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefOrthogonalCircle(#1,#2,#3){% +\begingroup + \tkzTgtFromP(#1,#2)(#3) + \tkz@@CalcLengthcm(#1,tkzFirstPointResult){tkzLengthResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefOrthoThroughCircle(#1,#2,#3,#4){% +\begingroup + \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% + \edef\tkz@lnc{\fpeval{1/\tkz@lnb}} + \tkzVecKNorm[\tkz@lnc](#1,#3) + \pgfnodealias{tkz@PointResult}{tkzPointResult} + \tkzCircumCenter(tkz@PointResult,#3,#4) + \tkz@@CalcLengthcm(tkzPointResult,#3){tkzLengthResult} + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \pgfnodealias{tkzSecondPointResult}{#3} +\endgroup +} +%<--------------------------------------------------------------------------–> +% Spieker Circle +%<--------------------------------------------------------------------------–> +\def\tkzDefSpiekerCircle(#1,#2,#3){% +\begingroup + \tkzSpiekerCenter(#1,#2,#3) + \pgfnodealias{tkzFirstPointResult}{tkzPointResult} + \tkzUProjection(tkz@m1,tkz@m2)(tkzPointResult) + \pgfnodealias{tkzSecondPointResult}{tkzPointResult} + \tkz@@CalcLength(tkzSecondPointResult,tkzFirstPointResult){tkzLengthResult} +\endgroup +} +%<--------------------------------------------------------------------------–> + +%<--------------------------------------------------------------------------–> +% End Def Circle +%<--------------------------------------------------------------------------–> +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex new file mode 100644 index 0000000000..3333524d78 --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex @@ -0,0 +1,522 @@ +% tkz-tools-lua-points-by.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. + +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-lua-points-by.tex} +\makeatletter +%<--------------------------------------------------------------------------–> +% Transformations Géométriques +%<--------------------------------------------------------------------------–> +\def\tkz@numtrsf{0} +\pgfkeys{/tkzDefPointBy/.cd, + translation/.code args={from #1 to #2}{ \def\tkzfrom{#1}% + \def\tkzto{#2}% + \def\tkz@numtrsf{0}}, + homothety/.code args={center #1 ratio #2}{ \def\tkzcenter{#1}% + \def\tkzratio{#2}% + \def\tkz@numtrsf{1}}, + reflection/.code args={over #1--#2}{ \def\tkzdeb{#1}% + \def\tkzfin{#2}% + \def\tkz@numtrsf{2}}, + symmetry/.code args={center #1}{ \def\tkzcenter{#1}% + \def\tkz@numtrsf{3}}, + projection/.code args={onto #1--#2}{ \def\tkzdeb{#1}% + \def\tkzfin{#2}% + \def\tkz@numtrsf{4}}, + rotation/.code args={center #1 angle #2}{ \def\tkzcenter{#1}% + \def\tkzangle{#2}% + \def\tkz@numtrsf{5}}, + rotation in rad/.code args={center #1 angle #2}{ \def\tkzcenter{#1}% + \def\tkzangle{#2}% + \def\tkz@numtrsf{6}}, + inversion/.code args={center #1 through #2}{ \def\tkzcenter{#1}% + \def\tkzpoint{#2}% + \def\tkz@numtrsf{7}}, + inversion negative/.code args={center #1 through #2}{ \def\tkzcenter{#1}% + \def\tkzpoint{#2}% + \def\tkz@numtrsf{8}}, + rotation with nodes/.code args={center #1 from #2 to #3}{ \def\tkzcenter{#1}% + \def\tkzfrom{#2}% + \def\tkzto{#3}% + \def\tkz@numtrsf{9}} +} +%<--------------------------------------------------------------------------–> +\def\tkzDefPointBy{\pgfutil@ifnextchar[{\tkz@DefPointBy}{\tkz@DefPointBy[]}} +\def\tkz@DefPointBy[#1](#2){% +\begingroup +\pgfqkeys{/tkzDefPointBy}{#1} + \ifcase\tkz@numtrsf% +% % first case 0 + \tkzUTranslation(\tkzfrom,\tkzto)(#2) +\or% 1 + \tkzUHomo(\tkzcenter,\tkzratio)(#2) +\or% 2 + \tkzUSymOrth(\tkzdeb,\tkzfin)(#2) +\or% 3 + \tkzUCSym(\tkzcenter)(#2) +\or% 4 + \tkzUProjection(\tkzdeb,\tkzfin)(#2) +\or% 5 + \tkzURotateAngle(\tkzcenter,\tkzangle)(#2) +\or% 6 + \tkzURotateInRad(\tkzcenter,\tkzangle)(#2) +\or% 7 + \tkzUInversePoint(\tkzcenter,\tkzpoint)(#2) +\or% 8 + \tkzUInverseNegativePoint(\tkzcenter,\tkzpoint)(#2) +\or% 9 + \tkzURotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2) +\fi +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzDefPointsBy{\pgfutil@ifnextchar[{\tkz@DefPointsBy}{\tkz@DefPointsBy[]}} +\def\tkz@DefPointsBy[#1](#2)#3{% +\begingroup +\pgfqkeys{/tkzDefPointBy}{#1} +\ifcase\tkz@numtrsf% + % first case 0 + \tkzTranslation(\tkzfrom,\tkzto)(#2){#3} + \or% 1 + \tkzHomo(\tkzcenter,\tkzratio)(#2){#3} + \or% 2 + \tkzSymOrth(\tkzdeb,\tkzfin)(#2){#3} + \or% 3 + \tkzCSym(\tkzcenter)(#2){#3} + \or% 4 + \tkzProjection(\tkzdeb,\tkzfin)(#2){#3} + \or% 5 + \tkzRotateAngle(\tkzcenter,\tkzangle)(#2){#3} + \or% 6 + \tkzRotateInRad(\tkzcenter,\tkzangle)(#2){#3} + \or% 7 + \tkzInversePoint(\tkzcenter,\tkzpoint)(#2){#3} + \or% 8 + \tkzInverseNegativePoint(\tkzcenter,\tkzpoint)(#2){#3} + \or% 9 + \tkzRotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2){#3} +\fi +\endgroup +} + +%<--------------------------------------------------------------------------–> + +\def\ExtractPoint#1,#2\@nil{% +\xdef\tkz@LastList{#2} +\xdef\tkz@FirstPoint{#1} +} +\def\FirstPointInList#1{% +\edef\tkz@templist{#1,} +\expandafter\ExtractPoint\tkz@templist\@nil +} +%<--------------------------------------------------------------------------–> +% Translation par rapport à un point +%<--------------------------------------------------------------------------–> +\def\tkzTranslation(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} +\foreach\PT in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \def\tkz@pointtsf{\PT '} + \else + \def\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkz@VecCoLinear(#1,#2,\PT) + \pgfnodealias{\tkz@pointtsf}{tkzPointResult} + } +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUTranslation(#1,#2)(#3){% +\begingroup + \tkz@VecCoLinear(#1,#2,#3)% +\endgroup +} + +%<--------------------------------------------------------------------------–> +% Symétrie par rapport à un point Homo with (-1) +% #2 le centre #3 l'antécédent +%<--------------------------------------------------------------------------–> +\def\tkzCSym(#1)(#2)#3{% +\begingroup +\gdef\tkz@LastList{#3} + \foreach\PointCS in {#2}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \xdef\tkz@pointtsf{\PointCS '} + \else + \xdef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{\PointCS}{center}}% + \tkz@ax=\pgf@x% + \tkz@ay=\pgf@y% + \pgfinterruptboundingbox + \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (\tkz@pointtsf); + \endpgfinterruptboundingbox +} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUCSym(#1)(#2){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% + \tkz@ax=\pgf@x% + \tkz@ay=\pgf@y% + \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (tkzPointResult); +\endgroup +} +%<--------------------------------------------------------------------------–> +% Symétrie orthogonale par rapport à une droite +%<--------------------------------------------------------------------------–> +\def\tkzSymOrth(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} + \foreach\PointSO in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \def\tkz@pointtsf{\PointSO '} + \else + \def\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkzUSymOrth(#1,#2)(\PointSO) + \pgfnodealias{\tkz@pointtsf}{tkzPointResult} + } +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUSymOrth(#1,#2)(#3){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% + \tkz@ax =\pgf@y% + \tkz@ay =\pgf@x% + \pgfinterruptboundingbox + \path[coordinate] (#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); + \endpgfinterruptboundingbox + \tkzInterLL(#1,#2)(#3,tkz@point) + \pgfnodealias{tkzPointofSym}{tkzPointResult} + \tkz@VecK[2](#3,tkzPointofSym) +\endgroup +} + +%<--------------------------------------------------------------------------–> +% Projection orthogonale sur une droite +%<--------------------------------------------------------------------------–> +\def\tkzProjection(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} + \foreach\PointPJ in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \def\tkz@pointtsf{\PointPJ '} + \else + \def\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkzUProjection(#1,#2)(\PointPJ) + \pgfnodealias{\tkz@pointtsf}{tkzPointResult} + } +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUProjection(#1,#2)(#3){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% + \tkz@ax =\pgf@y% + \tkz@ay =\pgf@x% + \pgfinterruptboundingbox + \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); + \tkzInterLL(#1,#2)(#3,tkz@point)% définit tkzPointResult + \endpgfinterruptboundingbox +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkz@Projection(#1,#2)(#3)#4{% +\begingroup + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% + \tkz@ax =\pgf@y% + \tkz@ay =\pgf@x% + \pgfinterruptboundingbox + \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); + \endpgfinterruptboundingbox + \tkz@InterLL(#1,#2)(#3,tkz@point){#4}% définit tkzPointResult +\endgroup +} +%<--------------------------------------------------------------------------–> +% Homothétie par rapport à un point +%<--------------------------------------------------------------------------–> +\def\tkzHomo(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} +\foreach\PointHO in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \xdef\tkz@pointtsf{\PointHO '} + \else + \xdef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{\PointHO}{center}}% + \pgf@xa=\pgf@x% + \pgf@ya=\pgf@y% + \pgfmathparse{#2} + \edef\tkz@coeff{\pgfmathresult}% + \pgfinterruptboundingbox + \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)% + coordinate(\tkz@pointtsf); + \endpgfinterruptboundingbox + } +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUHomo(#1,#2)(#3){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#3}{center}}% + \pgf@xa=\pgf@x% + \pgf@ya=\pgf@y% + \pgfmathparse{#2} + \edef\tkz@coeff{\pgfmathresult}% + \pgfinterruptboundingbox + \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)% + coordinate(tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +} +%<--------------------------------------------------------------------------–> +% rotation en degré +%<--------------------------------------------------------------------------–> +\def\tkzRotateAngle(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} +\foreach\PointRot in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \def\tkz@pointtsf{\PointRot '} + \else + \def\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkz@@extractxy{\PointRot} + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \tkz@@extractxy{#1} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {#2} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \pgfinterruptboundingbox + \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);% + \endpgfinterruptboundingbox +} + \endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzURotateAngle(#1,#2)(#3){% +\begingroup + \pgf@process{\pgfpointanchor{#3}{center}}% + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \pgf@process{\pgfpointanchor{#1}{center}}% + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {#2} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \pgfinterruptboundingbox + \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);% + \endpgfinterruptboundingbox +\endgroup +} +%<--------------------------------------------------------------------------–> +% % rotation en radian +% %<--------------------------------------------------------------------------–> +\def\tkzRotateInRad(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} + \foreach\PointRot in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \xdef\tkz@pointtsf{\PointRot '} + \else + \xdef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \pgfmathparse{#2 r} + \let\tkz@Angle\pgfmathresult + \tkz@@extractxy{\PointRot} + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \tkz@@extractxy{#1} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {\tkz@Angle} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \pgfinterruptboundingbox + \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf); + \endpgfinterruptboundingbox +} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzURotateInRad(#1,#2)(#3){% +\begingroup + \pgfmathparse{#2 r} + \let\tkz@Angle\pgfmathresult + \tkz@@extractxy{#3} + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \tkz@@extractxy{#1} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {\tkz@Angle} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \pgfinterruptboundingbox + \path[coordinate](\tkz@bx,\tkz@by)coordinate(tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +} +%<--------------------------------------------------------------------------–> +% Inverse of a point +%<--------------------------------------------------------------------------–> +\def\tkzInversePoint(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} + \foreach\PointIP in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \xdef\tkz@pointtsf{\PointIP '} + \else + \xdef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkz@@CalcLengthcm(#1,#2){tkz@lna} + \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb} + \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} + \tkzVecKNorm[\tkz@lnc](#1,\PointIP) + \pgfnodealias{\tkz@pointtsf}{tkzPointResult} + } +\endgroup +} +\def\tkzUInversePoint(#1,#2)(#3){% +\begingroup + \tkz@@CalcLengthcm(#1,#2){tkz@lna}% + \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% + \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} + \tkzVecKNorm[\tkz@lnc](#1,#3) +\endgroup +} +% possible +% \tkzDefLine[tangent from =#3](#1,#2) +% \tkzTgtFromP(#1,#2)(#3) +% \tkzInterLL(tkzFirstPointResult,tkzSecondPointResult)(#1,#2) +%<--------------------------------------------------------------------------–> +% Inverse negative of a point +%<--------------------------------------------------------------------------–> +\def\tkzInverseNegativePoint(#1,#2)(#3)#4{% +\begingroup +\gdef\tkz@LastList{#4} + \foreach\PointIP in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \xdef\tkz@pointtsf{\PointIP '} + \else + \xdef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkz@@CalcLengthcm(#1,#2){tkz@lna} + \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb} + \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} + \tkzVecKNorm[\tkz@lnc](#1,\PointIP) + \tkzUCSym(#1)(tkzPointResult) + \pgfnodealias{\tkz@pointtsf}{tkzPointResult} + } +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUInverseNegativePoint(#1,#2)(#3){% +\begingroup + \tkz@@CalcLengthcm(#1,#2){tkz@lna}% + \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% + \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} + \tkzVecKNorm[\tkz@lnc](#1,#3) + \tkzUCSym(#1)(tkzPointResult) +\endgroup +} +%<--------------------------------------------------------------------------–> +%<--------------- rotate with nodes ------------------------–> +%<--------------------------------------------------------------------------–> +\def\tkzRotateWithNodes(#1,#2,#3)(#4)#5{% +\begingroup +\gdef\tkz@LastList{#5} + \foreach\PointRotWN in {#4}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \def\tkz@pointtsf{\PointRotWN '} + \else + \def\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkzFindAngle(#2,#1,#3) + \tkz@@extractxy{\PointRotWN} + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \tkz@@extractxy{#1} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {\tkzAngleResult} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \pgfinterruptboundingbox + \path[coordinate](\tkz@bx,\tkz@by) coordinate (\tkz@pointtsf);% + \endpgfinterruptboundingbox +} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzURotateWithNodes(#1,#2,#3)(#4){% +\begingroup + \tkzFindAngle(#2,#1,#3) + \pgf@process{\pgfpointanchor{#4}{center}}% + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \pgf@process{\pgfpointanchor{#1}{center}}% + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {\tkzAngleResult} + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \pgfinterruptboundingbox + \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);% + \endpgfinterruptboundingbox +\endgroup +} +%<--------------------------------------------------------------------------–> +% Fin des transformations +%<--------------------------------------------------------------------------–> +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex new file mode 100644 index 0000000000..6003bb8efe --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex @@ -0,0 +1,680 @@ +% tkz-obj-lua-points.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. + +\def\fileversion{5.04c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.04c tkz-obj-lua-points-spc.tex} +\makeatletter +%add ExCenter +%<--------------------------------------------------------------------------–> +% Specific points +%<--------------------------------------------------------------------------–> +% barycentre +%<--------------------------------------------------------------------------–> +\def\tkzDefBarycentricPoint(#1){% +\begingroup + \path[coordinate] (barycentric cs:#1) coordinate (tkzPointResult); +\endgroup +} +\let\tkzDefBCPoint\tkzDefBarycentricPoint + +\def\tkzDefBarycentricPointTwo(#1,#2,#3,#4){% +\begingroup +\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} +\tkz@ax\pgf@x % +\tkz@ay\pgf@y % +\edef\tkzcax{\strip@pt\tkz@ax}% +\edef\tkzcay{\strip@pt\tkz@ay}% +\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}} +\tkz@bx\pgf@x % +\tkz@by\pgf@y % +\edef\tkzcbx{\strip@pt\tkz@bx}% +\edef\tkzcby{\strip@pt\tkz@by}% +\edef\tkztpmx{\tkz@Dec{(\tkzcax*(#2) + \tkzcbx*(#4))/(#2 + #4 )}} +\edef\tkztpmy{\tkz@Dec{(\tkzcay*(#2) + \tkzcby*(#2))/(#2 + #4 )}} +\pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} +\endgroup +} + +%<--------------------------------------------------------------------------–> +% milieu de deux points +%<--------------------------------------------------------------------------–> +% possible \coordinate (#3) at ($(#1)!0.5!(#2)$); +%<--------------------------------------------------------------------------–> +% \def\tkzDefMidPoint(#1,#2){% +% \begingroup +% \path (#1) -- (#2) coordinate[pos=.5](tkzPointResult); +% \endgroup +% } +\def\tkzDefMidPoint(#1,#2){% +\begingroup + \pgf@process{\pgfpointanchor{#1}{center}}% + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \pgf@process{\pgfpointanchor{#2}{center}}% + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \advance\tkz@bx by\tkz@ax\relax% + \advance\tkz@by by\tkz@ay\relax% + \divide\tkz@bx by2\relax% + \divide\tkz@by by2\relax + \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkz@bx}{\tkz@by}} +\endgroup +} +\def\tkz@DefMidPoint(#1,#2,#3,#4){% +\begingroup + \tkz@ax#1% + \tkz@ay#2% + \tkz@bx#3% + \tkz@by#4% + \advance\tkz@bx by\tkz@ax\relax% + \advance\tkz@by by\tkz@ay\relax% + \divide\tkz@bx by2\relax% + \divide\tkz@by by2\relax + \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkz@bx}{\tkz@by}} +\endgroup +} + +%<--------------------------------------------------------------------------–> +\def\tkz@simicenter{0} +\pgfkeys{/tkzsimicenter/.cd, + ext/.code = \def\tkz@simicenter{0}, + int/.code = \def\tkz@simicenter{1}, + ext +}% + +\def\tkzDefSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefSimilitudeCenter}% + {\tkz@DefSimilitudeCenter[]}} +\def\tkz@DefSimilitudeCenter[#1](#2,#3)(#4,#5){% +\pgfqkeys{/tkzsimicenter}{#1} +\begingroup +\ifcase\tkz@simicenter% + \tkzDefExtSimilitudeCenter[#1](#2,#3)(#4,#5) + \or% 1 + \tkzDefIntSimilitudeCenter[#1](#2,#3)(#4,#5) +\fi +\endgroup +} +%<--------------------------------------------------------------------------–> +% Internal Similitude center +% Two circles have two similitude centers namely the internal center of +% similitude Si and the external similitude center Se. +%<--------------------------------------------------------------------------–> +\def\tkz@numhomo{0} +\pgfkeys{ +/tkzSimilitudeCenter/.cd, + node/.code = \def\tkz@numhomo{0}, + R/.code = \def\tkz@numhomo{1}, + node, + /tkzSimilitudeCenter/.unknown/.code = {\let\searchname=\pgfkeyscurrentname + \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}} +} +\def\tkzDefIntSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefIntSimilitudeCenter}{\tkz@DefIntSimilitudeCenter[]}} +\def\tkz@DefIntSimilitudeCenter[#1](#2,#3)(#4,#5){% +\begingroup +\pgfqkeys{/tkzSimilitudeCenter}{#1} +\ifcase\tkz@numhomo% + \tkz@@CalcLengthcm(#2,#3){tkz@rt}% + \tkz@@CalcLengthcm(#4,#5){tkz@rf}% + \or% 1 + \def\tkz@rt{#3}% + \def\tkz@rf{#5}% +\fi +\pgfinterruptboundingbox +\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}} +\tkz@ax\pgf@x % +\tkz@ay\pgf@y % +\edef\tkzcax{\strip@pt\tkz@ax}% +\edef\tkzcay{\strip@pt\tkz@ay}% +\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}} +\tkz@bx\pgf@x % +\tkz@by\pgf@y % +\edef\tkzcbx{\strip@pt\tkz@bx}% +\edef\tkzcby{\strip@pt\tkz@by}% +\edef\tkztpmx{\tkz@Dec{(\tkzcax*\tkz@rf + \tkzcbx*\tkz@rt)/(\tkz@rf + \tkz@rt )}} +\edef\tkztpmy{\tkz@Dec{(\tkzcay*\tkz@rf + \tkzcby*\tkz@rt)/(\tkz@rf + \tkz@rt )}} + \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefIntHomotheticCenter\tkzDefIntSimilitudeCenter +%<--------------------------------------------------------------------------–> +% External Similitude center +%<--------------------------------------------------------------------------–> +\def\tkzDefExtSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefExtSimilitudeCenter}{% +\tkz@DefExtSimilitudeCenter[]}} + +\def\tkz@DefExtSimilitudeCenter[#1](#2,#3)(#4,#5){% +\begingroup +\pgfqkeys{/tkzSimilitudeCenter}{#1} +\ifcase\tkz@numhomo% + \tkz@@CalcLengthcm(#2,#3){tkz@rt}% + \tkz@@CalcLengthcm(#4,#5){tkz@rf}% + \or% 1 + \def\tkz@rt{#3}% + \def\tkz@rf{#5}% +\fi +\pgfinterruptboundingbox +\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}} +\tkz@ax\pgf@x % +\tkz@ay\pgf@y % +\edef\tkzcax{\strip@pt\tkz@ax}% +\edef\tkzcay{\strip@pt\tkz@ay}% +\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}} +\tkz@bx\pgf@x % +\tkz@by\pgf@y % +\edef\tkzcbx{\strip@pt\tkz@bx}% +\edef\tkzcby{\strip@pt\tkz@by}% +\edef\tkztpmx{\tkz@Dec{(\tkzcax*(-\tkz@rf) + \tkzcbx*\tkz@rt)/(\tkz@rt - (\tkz@rf))}} +\edef\tkztpmy{\tkz@Dec{(\tkzcay*(-\tkz@rf) + \tkzcby*\tkz@rt)/(\tkz@rt - (\tkz@rf))}} + \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} + \endpgfinterruptboundingbox +\endgroup +} + +\let\tkzDefExtHomotheticCenter\tkzDefExtSimilitudeCenter +%<--------------------------------------------------------------------------–> +% Harmonic Division +%<--------------------------------------------------------------------------–> +% A , B , C ,D CA/CB = DA/DB +%<--------------------------------------------------------------------------–> +\def\tkz@numdha{0} +\pgfkeys{/tkzharmonic/.cd, + ext/.code = \def\tkz@numdha{0}, + int/.code = \def\tkz@numdha{1}, + both/.code = \def\tkz@numdha{2}, + both, +}% + +\def\tkzDivHarmonic{\pgfutil@ifnextchar[{\tkz@DivHarmonic}{\tkz@DivHarmonic[]}} +\def\tkz@DivHarmonic[#1](#2){% +\begingroup +\pgfqkeys{/tkzharmonic}{#1} + \ifcase\tkz@numdha% + \tkzDefDivHarmonicExt(#2) + \or% + \tkzDefDivHarmonicInt(#2) + \or% + \tkzDefDivHarmonicBoth(#2) + \fi +\endgroup +} + +\def\tkzDefDivHarmonicExt(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox + \tkz@VecKOrth[](#1,#2) \tkzGetPoint{tkz@px} + \tkzDefMidPoint(tkz@px,#2) \tkzGetPoint{tkz@py} + \tkzInterLL(tkz@px,#3)(#1,tkz@py) \tkzGetPoint{tkz@pz} + \tkzInterLL(#2,tkz@pz)(#1,tkz@px) \tkzGetPoint{tkz@px} + \tkzInterLL(tkz@py,tkz@px)(#1,#2) \tkzGetPoint{tkzPointResult} +\endpgfinterruptboundingbox +\endgroup +} + +\def\tkzDefDivHarmonicInt(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox + \tkz@VecKOrth[1](#1,#2) \tkzGetPoint{tkz@px} + \tkzDefMidPoint(tkz@px,#2) \tkzGetPoint{tkz@py} + \tkzInterLL(tkz@py,#3)(#1,tkz@px) \tkzGetPoint{tkz@pz} + \tkzInterLL(#2,tkz@pz)(#1,tkz@py) \tkzGetPoint{tkz@py} + \tkzInterLL(tkz@py,tkz@px)(#1,#2) \tkzGetPoint{tkzPointResult} +\endpgfinterruptboundingbox +\endgroup +} + +\def\tkzDefDivHarmonicBoth(#1,#2,#3){% +\begingroup +\edef\tkz@k{\fpeval{#3}} + \path[coordinate] (barycentric cs:#1=1,#2={\tkz@k}) coordinate (tkzFirstPointResult); + \path[coordinate] (barycentric cs:#1=1,#2={-\tkz@k}) coordinate (tkzSecondPointResult); +\endgroup +} + +\let\tkzDefHarmonic\tkzDivHarmonic +%<--------------------------------------------------------------------------–> +% golden ratio +%<--------------------------------------------------------------------------–> +\def\tkzDefGoldenRatio(#1,#2){% +\begingroup +\tkzDefPointWith[linear,K=\tkzInvPhi](#1,#2) +\endgroup +} +%<--------------------------------------------------------------------------–> +% triangle center +%<--------------------------------------------------------------------------–> + +\def\tkz@numtc{0} +\pgfkeys{/tkzDefTriangleCenter/.cd, + ortho/.code = \def\tkz@numtc{0}, + orthic/.code = \def\tkz@numtc{0}, + centroid/.code = \def\tkz@numtc{1}, + median/.code = \def\tkz@numtc{1}, + circum/.code = \def\tkz@numtc{2}, + in/.code = \def\tkz@numtc{3}, + ex/.code = \def\tkz@numtc{4}, + euler/.code = \def\tkz@numtc{5}, + symmedian/.code = \def\tkz@numtc{6}, + lemoine/.code = \def\tkz@numtc{6}, + grebe/.code = \def\tkz@numtc{6}, + spieker/.code = \def\tkz@numtc{7}, + gergonne/.code = \def\tkz@numtc{8}, + nagel/.code = \def\tkz@numtc{9}, + mittenpunkt/.code = \def\tkz@numtc{10}, + feuerbach/.code = \def\tkz@numtc{11}, + circum +} +\def\tkzDefTriangleCenter{\pgfutil@ifnextchar[{\tkz@DefTriangleCenter}{\tkz@DefTriangleCenter[]}} +\def\tkz@DefTriangleCenter[#1](#2){% +\begingroup +\pgfqkeys{/tkzDefTriangleCenter}{#1} +\ifcase\tkz@numtc% + \tkzOrthoCenter(#2) + \or% 1 + \tkzCentroid(#2) + \or% 2 + \tkzCircumCenter(#2) + \or% 3 + \tkzInCenter(#2) + \or% 4 + \tkzExCenter(#2) + \or% 5 + \tkzEulerCenter(#2) + \or% 6 + \tkzSymmedianCenter(#2) + \or% 7 + \tkzSpiekerCenter(#2) + \or% 8 + \tkzGergonneCenter(#2) + \or%9 + \tkzNagelCenter(#2) + \or%10 + \tkzMittenpunktCenter(#2) + \or%11 + \tkzFeuerbachCenter(#2) + \fi +\endgroup +} +%<--------------------------------------------------------------------------–> +% OrthoCenter +%<--------------------------------------------------------------------------–> +\def\tkzOrthoCenter(#1,#2,#3){% +\begingroup + \pgfinterruptboundingbox + \tkzUProjection(#1,#2)(#3) + \pgfnodealias{ort@pta}{tkzPointResult} + \tkzUProjection(#1,#3)(#2) + \pgfnodealias{ort@ptb}{tkzPointResult} + \tkzInterLL(#2,ort@ptb)(#3,ort@pta) + \endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefOrthoCenter\tkzOrthoCenter +%<--------------------------------------------------------------------------–> +% GravityCenter modif 3.03 +%<--------------------------------------------------------------------------–> +\def\tkzCentroid(#1,#2,#3){% +\begingroup + \pgf@process{\pgfpointanchor{#1}{center}}% + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \pgf@process{\pgfpointanchor{#2}{center}}% + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \pgf@process{\pgfpointanchor{#3}{center}}% + \tkz@cx\pgf@x% + \tkz@cy\pgf@y% + \edef\tkzcax{\strip@pt\tkz@ax}% + \edef\tkzcay{\strip@pt\tkz@ay}% + \edef\tkzcbx{\strip@pt\tkz@bx}% + \edef\tkzcby{\strip@pt\tkz@by}% + \edef\tkzccx{\strip@pt\tkz@cx}% + \edef\tkzccy{\strip@pt\tkz@cy}% + \edef\tkztpmx{\tkz@Dec{(\tkzcax + \tkzcbx + \tkzccx)/3}} + \edef\tkztpmy{\tkz@Dec{(\tkzcay + \tkzcby + \tkzccy)/3}} + \pgfinterruptboundingbox + \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} + \endpgfinterruptboundingbox +\endgroup +} +\let\tkzBaryCenter\tkzCentroid + +%<--------------------------------------------------------------------------–> +% CircumCenter +%<--------------------------------------------------------------------------–> +\def\tkzCircumCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox + \tkzDefMediatorLine(#1,#2) + \pgf@process{\pgfpointanchor{tkzFirstPointResult}{center}}% + \tkz@ax\pgf@x% + \tkz@ay\pgf@y% + \pgf@process{\pgfpointanchor{tkzSecondPointResult}{center}}% + \tkz@bx\pgf@x% + \tkz@by\pgf@y% + \tkzDefMediatorLine(#1,#3) + \pgf@process{\pgfpointanchor{tkzFirstPointResult}{center}}% + \tkz@cx\pgf@x% + \tkz@cy\pgf@y% + \pgf@process{\pgfpointanchor{tkzSecondPointResult}{center}}% + \tkz@dx\pgf@x% + \tkz@dy\pgf@y% +\tkzInterLLxy(\tkz@ax,\tkz@ay,\tkz@bx,\tkz@by)(\tkz@cx,\tkz@cy,\tkz@dx,\tkz@dy)% +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefCircumCenter\tkzCircumCenter +%<--------------------------------------------------------------------------–> +% InCenter +%<--------------------------------------------------------------------------–> +\def\tkzInCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox +\tkzDefBisectorLine(#3,#1,#2) +\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% +\tkz@bx\pgf@x% +\tkz@by\pgf@y% +\tkzDefBisectorLine(#3,#2,#1) +\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% +\tkz@dx\pgf@x% +\tkz@dy\pgf@y% +\pgf@process{\pgfpointanchor{#1}{center}}% +\tkz@ax\pgf@x% +\tkz@ay\pgf@y% +\pgf@process{\pgfpointanchor{#2}{center}}% +\tkz@cx\pgf@x% +\tkz@cy\pgf@y% +\tkzInterLLxy(\tkz@ax,\tkz@ay,\tkz@bx,\tkz@by)(\tkz@cx,\tkz@cy,\tkz@dx,\tkz@dy)% +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefInCenter\tkzInCenter +%<--------------------------------------------------------------------------–> +% ExCenter +%<--------------------------------------------------------------------------–> +\def\tkzExCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox +\tkzDefBisectorOutLine(#2,#1,#3) +\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% +\tkz@bx\pgf@x% +\tkz@by\pgf@y% +\tkzDefBisectorOutLine(#2,#3,#1) +\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% +\tkz@dx\pgf@x% +\tkz@dy\pgf@y% +\pgf@process{\pgfpointanchor{#1}{center}}% +\tkz@ax\pgf@x% +\tkz@ay\pgf@y% +\pgf@process{\pgfpointanchor{#3}{center}}% +\tkz@cx\pgf@x% +\tkz@cy\pgf@y% +\tkzInterLLxy(\tkz@ax,\tkz@ay,\tkz@bx,\tkz@by)(\tkz@cx,\tkz@cy,\tkz@dx,\tkz@dy)% +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefExCenter\tkzExCenter +%<--------------------------------------------------------------------------–> +% EulerCenter neuf points +%<--------------------------------------------------------------------------–> +\def\tkzEulerCenter(#1,#2,#3){% +% mileu de orthocentre et centre cercle circonscrit +% passe par les midpoints par les pieds des hauteurs +\begingroup +\pgfinterruptboundingbox +\tkzDefMidPoint(#1,#2) +\pgfnodealias{eu@mic}{tkzPointResult} +\tkzDefMidPoint(#1,#3) +\pgfnodealias{eu@mib}{tkzPointResult} +\tkzDefMidPoint(#2,#3) +\pgfnodealias{eu@mia}{tkzPointResult} +\tkzCircumCenter(eu@mia,eu@mib,eu@mic) +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzNinePointCenter\tkzEulerCenter +\let\tkzDefEulerCenter\tkzEulerCenter +%<--------------------------------------------------------------------------–> +%Symmedian center Lemoine point Grebe point K +%<--------------------------------------------------------------------------–> +\def\tkzSymmedianCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox +\tkzDefMidPoint(#2,#3) +\pgfnodealias{eu@mic}{tkzPointResult} +\tkzDefMidPoint(#1,#3) +\pgfnodealias{eu@mib}{tkzPointResult} +\tkzUProjection(#2,#3)(#1) +\pgfnodealias{ort@pta}{tkzPointResult} +\tkzDefMidPoint(#1,ort@pta) +\pgfnodealias{eu@mid}{tkzPointResult} +\tkzUProjection(#1,#3)(#2) +\pgfnodealias{ort@ptb}{tkzPointResult} +\tkzDefMidPoint(#2,ort@ptb) +\pgfnodealias{eu@mie}{tkzPointResult} +\tkzInterLL(eu@mic,eu@mid)(eu@mib,eu@mie) +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzLemoinePoint\tkzSymmedianCenter +\let\tkzGrebePoint\tkzSymmedianCenter +\let\tkzDefLemoinePoint\tkzLemoinePoint +%<--------------------------------------------------------------------------–> +% Spieker center +%<--------------------------------------------------------------------------–> +\def\tkzSpiekerCenter(#1,#2,#3){% +\begingroup +% we need to get the midpoints +\pgfcoordinate{tkz@m3}{% + \pgfpointscale{0.5}{% + \pgfpointadd{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}}}% +\pgfcoordinate{tkz@m2}{% + \pgfpointscale{0.5}{% + \pgfpointadd{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#3}{center}}}}% +\pgfcoordinate{tkz@m1}{% + \pgfpointscale{0.5}{% + \pgfpointadd{\pgfpointanchor{#2}{center}}% + {\pgfpointanchor{#3}{center}}}}% +\tkzInCenter(tkz@m1,tkz@m2,tkz@m3) +\endgroup +} +\let\tkzDefSpiekerCenter\tkzSpiekerCenter +%<--------------------------------------------------------------------------–> +% Gergonne center Ge +%<--------------------------------------------------------------------------–> +\def\tkzGergonneCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox +\tkzInCenter(#1,#2,#3) +\pgfnodealias{tkz@ptin}{tkzPointResult} +\tkzUProjection(#2,#3)(tkz@ptin) +\pgfnodealias{tkz@oca}{tkzPointResult} +\tkzUProjection(#1,#3)(tkz@ptin) +\pgfnodealias{tkz@ocb}{tkzPointResult} +\tkzInterLL(#1,tkz@oca)(#2,tkz@ocb) +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefGergonneCenter\tkzGergonneCenter +%<--------------------------------------------------------------------------–> +% Nagel center Na +%<--------------------------------------------------------------------------–> +% INa = 3 IG. Nagel point % correction 02/02/20 +\def\tkzNagelCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox +\tkzDefExcentralTriangle(#1,#2,#3){tkz@a,tkz@b,tkz@c} +\tkzUProjection(#2,#3)(tkz@a) +\pgfnodealias{tkz@tgta}{tkzPointResult} +\tkzUProjection(#1,#2)(tkz@c) +\pgfnodealias{tkz@tgtc}{tkzPointResult} +\tkzInterLL(#1,tkz@tgta)(#3,tkz@tgtc) +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefNagelCenter\tkzNagelCenter +%<--------------------------------------------------------------------------–> +% Mittenpunkt +%<--------------------------------------------------------------------------–> +\def\tkzMittenpunktCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox +\tkzExCenter(#2,#3,#1) +\pgfnodealias{tkz@a}{tkzPointResult} +\tkzExCenter(#3,#1,#2) +\pgfnodealias{tkz@b}{tkzPointResult} +\pgfcoordinate{tkz@ma}{% +\pgfpointscale{0.5}{% +\pgfpointadd{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}}}% +\pgfcoordinate{tkz@mb}{% +\pgfpointscale{0.5}{% +\pgfpointadd{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}}}% +\tkzInterLL(tkz@a,tkz@ma)(tkz@b,tkz@mb) +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefMittenpunktCenter\tkzMittenpunktCenter +\let\tkzDefMiddlespoint\tkzMittenpunktCenter +%<--------------------------------------------------------------------------–> +% Feuerbach point +%<--------------------------------------------------------------------------–> +\def\tkzFeuerbachCenter(#1,#2,#3){% +\begingroup +\pgfinterruptboundingbox +\tkzEulerCenter(#1,#2,#3) +\pgfnodealias{tkz@euler}{tkzPointResult} +\tkzInCenter(#1,#2,#3) +\pgfnodealias{tkz@in}{tkzPointResult} +\tkzUProjection(#2,#3)(tkzPointResult) +\tkzInterLC(tkz@in,tkz@euler)(tkz@in,tkzPointResult)\tkzGetFirstPoint{tkz@fe} +\tkzRenamePoint(tkz@fe){tkzPointResult} +\endpgfinterruptboundingbox +\endgroup +} +\let\tkzDefFeuerbachCenter\tkzFeuerbachCenter +%<--------------------------------------------------------------------------–> +% Orthogonal center +%<--------------------------------------------------------------------------–> +\def\tkzOrthogonalCenter(#1,#2){% +\begingroup +\pgfinterruptboundingbox +\tkz@VecK[\tkz@koeff/(1+\tkz@koeff)](#1,#2) +\pgfnodealias{tkzFirstPointResult}{tkzPointResult} +\tkz@VecK[\tkz@koeff/(\tkz@koeff-1)](#1,#2) +\pgfnodealias{tkzSecondPointResult}{tkzPointResult} +\tkzDefMidPoint(tkzFirstPointResult,tkzSecondPointResult) +\endpgfinterruptboundingbox +\endgroup +} +%<--------------------------------------------------------------------------–> +% End Triangle center +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +% Projection center of excircles +%<--------------------------------------------------------------------------–> +\def\tkzDefProjExcenter{\pgfutil@ifnextchar[{% + \tkz@DefProjExcenter}{% + \tkz@DefProjExcenter[]} + } +\def\tkz@DefProjExcenter[#1](#2,#3,#4)(#5)#6{ +\begingroup + \SetUpPTTR{#1} + \foreach \name [count=\i] in {#5} {% + \global\expandafter\edef\csname tkz@pt\i\endcsname{\name} + } + \foreach \name [count=\i] in {#6} {% + \global\expandafter\edef\csname tkz@ppt\i\endcsname{\name} + } +\tkzDefPointBy[projection=onto #3--#4 ](\tkz@pttr@name \csname tkz@pt1\endcsname) +\pgfnodealias{\csname tkz@ppt1\endcsname\csname tkz@pt1\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #3--#4 ](\tkz@pttr@name \csname tkz@pt2\endcsname) +\pgfnodealias{\csname tkz@ppt1\endcsname\csname tkz@pt2\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #3--#4 ](\tkz@pttr@name \csname tkz@pt3\endcsname) +\pgfnodealias{\csname tkz@ppt1\endcsname\csname tkz@pt3\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #2--#4 ](\tkz@pttr@name \csname tkz@pt1\endcsname) +\pgfnodealias{\csname tkz@ppt2\endcsname\csname tkz@pt1\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #2--#4 ](\tkz@pttr@name \csname tkz@pt2\endcsname) +\pgfnodealias{\csname tkz@ppt2\endcsname\csname tkz@pt2\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #2--#4 ](\tkz@pttr@name \csname tkz@pt3\endcsname) +\pgfnodealias{\csname tkz@ppt2\endcsname\csname tkz@pt3\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #3--#2 ](\tkz@pttr@name \csname tkz@pt1\endcsname) +\pgfnodealias{\csname tkz@ppt3\endcsname\csname tkz@pt1\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #3--#2 ](\tkz@pttr@name \csname tkz@pt2\endcsname) +\pgfnodealias{\csname tkz@ppt3\endcsname\csname tkz@pt2\endcsname}{tkzPointResult} +\tkzDefPointBy[projection=onto #3--#2 ](\tkz@pttr@name \csname tkz@pt3\endcsname) +\pgfnodealias{\csname tkz@ppt3\endcsname\csname tkz@pt3\endcsname}{tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +% Point on circle +%<--------------------------------------------------------------------------–> +\def\tkz@numptcirc{0} +\pgfkeys{/tkzptcircle/.cd, +through/.code args = {center #1 angle #2 point #3} { \def\tkz@center{#1}% + \def\tkz@angle{#2}% + \def\tkz@through{#3}% + \def\tkz@numptcirc{0}}, +R/.code args = {center #1 angle #2 radius #3} { \def\tkz@center{#1}% + \def\tkz@angle{#2}% + \def\tkz@radius{#3}% + \def\tkz@numptcirc{1}}, +through in rad/.code args = {center #1 angle #2 point #3} { \def\tkz@center{#1}% + \def\tkz@angle{#2}% + \def\tkz@through{#3}% + \def\tkz@numptcirc{2}}, +R in rad/.code args = {center #1 angle #2 radius #3} { \def\tkz@center{#1}% + \def\tkz@angle{#2}% + \def\tkz@radius{#3}% + \def\tkz@numptcirc{3}} +} + +\def\tkzDefPointOnCircle{\pgfutil@ifnextchar[{\tkz@DefPointOnCircle}{% + \tkz@DefPointOnCircle[]}} +\def\tkz@DefPointOnCircle[#1]{% +\begingroup +\pgfqkeys{/tkzptcircle}{#1} + \ifcase\tkz@numptcirc% + \tkz@@CalcLengthcm(\tkz@center,\tkz@through){tkz@radius} + \or% 1 + \relax% + \or% 2 + \pgfmathparse{\tkz@angle\space r} + \let\tkz@angle\pgfmathresult + \tkz@@CalcLengthcm(\tkz@center,\tkz@through){tkz@radius} + \or% 3 + \pgfmathparse{\tkz@angle\space r} + \let\tkz@angle\pgfmathresult +\fi +\path (\tkz@center) --++(\tkz@angle:\tkz@radius) coordinate(tkzPointResult); +\endgroup +} +%<--------------------------------------------------------------------------–> +% Point on line +%<--------------------------------------------------------------------------–> +\def\tkzDefPointOnLine{\pgfutil@ifnextchar[{\tkz@DefPointOnLine}{\tkz@DefPointOnLine[]}} +\def\tkz@DefPointOnLine[#1](#2,#3){% +\begingroup +\path (#2) to [#1] coordinate (tkzPointResult) (#3); +\endgroup +} + +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex new file mode 100644 index 0000000000..fe5ba902c0 --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex @@ -0,0 +1,269 @@ +% tkz-obj-lua-points-with.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. + +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-lua-points-with.tex} +\makeatletter +%<--------------------------------------------------------------------------–> +% Vectors +%<--------------------------------------------------------------------------–> +% Objet : outils mathématiques pour la géométrie euclideienne avec pgf/tikz +% utilisable de préférence avec un repère orthonormé et le cm comme unité +% utile pour la compatibilité avec pgf 2 +%<--------------------------------------------------------------------------–> +% Duplicate Length à revoir pas de pt pas de global +% ||v(CN)||= ||v(AB)|| et v(CN) colineaire à v(CD) +% A-->#1 B-->#2 C-->#3 D-->#4 N-->#5 ????? +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +% Outils pour les vecteurs +%<--------------------------------------------------------------------------–> +% ce sont des outils élémentaires qui à partir de deux points en définissent +% un troisième +% #1 si c'est une option alors c'est un nombre réel +% #2 et #3 sont deux points +% #4 est le nom du point qui résulte de la transformation +% exemple : \tkzVecKNorm (A,B){C} définit un point C tel que AC = 1 et C est % % un point de la droite (AC). #1 peut être négatif + +\def\tkzDuplicateSegment(#1,#2)(#3,#4){% +\begingroup + \tkz@@CalcLength(#1,#2){tkz@firstlen}% + \tkz@@CalcLength(#3,#4){tkz@secondlen}% + \edef\tkz@ratio{\tkz@Dec{\tkz@firstlen/\tkz@secondlen}} + \tkz@VecKCoLinear[\tkz@ratio](#3,#4,#3)% +\endgroup +} +\let\tkzDuplicateLength\tkzDuplicateSegment +%<--------------------------------------------------------------------------–> +% Coordonnées d'un vecteur (couple de points) +% Deux points A et B donc un vecteur on récupère les coordonnées de v(AB) +% en cm +% tkzGetVecCoord en cm ou en pt ??? +%<--------------------------------------------------------------------------–> +%result in #3x et #3y #1 et #2 sont les points +% passage en cm avec fp ? +% 28.45274 =1 cm +\def\tkzGetVectxy(#1,#2)#3{% +\begingroup +\pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% +\pgfmathparse{\pgf@sys@tonumber{\pgf@x}/1cm}% +\let\tkzresultx\pgfmathresult +\pgfmathparse{\pgf@sys@tonumber{\pgf@y}/1cm}% +\let\tkzresulty\pgfmathresult +\global\expandafter\edef\csname #3x\endcsname{\tkzresultx}% +\global\expandafter\edef\csname #3y\endcsname{\tkzresulty}% +\endgroup +} +%<--------------------------------------------------------------------------–> +% options #1 two points #2,#3 result in #4 +% +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +% tkzDefPointWith +%<--------------------------------------------------------------------------–> +\def\tkz@numv{0} +\pgfkeys{/@pointwith/.cd, + colinear/.code args = {at #1}{\def\tkz@numv{0}\def\tkz@frompoint{#1}}, + orthogonal/.code = {\def\tkz@numv{1}}, + linear/.code = {\def\tkz@numv{2}}, + orthogonal normed/.code = {\def\tkz@numv{3}}, + linear normed/.code = {\def\tkz@numv{4}}, + colinear normed/.code args = {at #1}{\def\tkz@numv{5}\def\tkz@frompoint{#1}}, + K/.code = {\edef\tkz@coeff{\fpeval{#1}}}, + K = 1, + normed/.is if = tkz@line@normed, + normed/.default = true, + normed = false, + orthogonal +} +\def\tkzDefPointWith{\pgfutil@ifnextchar[{\tkz@DefPointWith}{\tkz@DefPointWith[]}} + +\def\tkz@DefPointWith[#1](#2,#3){% +\begingroup +\pgfkeys{/@pointwith/.cd,K=1} +\pgfqkeys{/@pointwith}{#1} +\ifcase\tkz@numv% + % first case 0 + \tkz@DefVectorColinearat[\tkz@coeff](#2,#3) + \or% 1 + \tkz@VecKOrth[\tkz@coeff](#2,#3) + \or% 2 + \tkz@VecK[\tkz@coeff](#2,#3) + \or% 3 + \tkz@VecKOrthNorm[\tkz@coeff](#2,#3) + \or% 4 + \tkz@VecKNorm[\tkz@coeff](#2,#3) + \or% 5 + \tkz@VecKColinearNorm[\tkz@coeff](#2,#3) + \fi +\endgroup +} +%<--------------------------------------------------------------------------–> +% tkzDefVectorfrom +%<--------------------------------------------------------------------------–> +% tkz@numv 0 +\def\tkz@DefVectorColinearat[#1](#2,#3){% +\iftkz@line@normed + \tkz@VecKColinearNorm[#1](#2,#3) +\else +\begingroup + \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}% + \pgf@xa=\pgf@x\relax% + \pgf@ya=\pgf@y\relax% + \pgfinterruptboundingbox + \path (\tkz@frompoint)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +\fi +} +%<--------------------------------------------------------------------------–> +% tkzVector K Orth coeff dans #1 +% v(AN) perp v(AB) (v(AB) , v(AN) ) sens direct cercle trigo +% ||v(AN)||=||v(AB)|| +%<--------------------------------------------------------------------------–> +% tkz@numv 1 +\def\tkzVecKOrth{\pgfutil@ifnextchar[{\tkz@VecKOrth}{\tkz@VecKOrth[1]}} +\def\tkz@VecKOrth[#1](#2,#3){% +\iftkz@line@normed + \tkz@VecKOrthNorm[#1](#2,#3) +\else +\begingroup + \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}% + \pgf@xa=-\pgf@y% + \pgf@ya=\pgf@x% + \pgfinterruptboundingbox + \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +\fi +}% + +%<--------------------------------------------------------------------------–> +% v(AN)=#1 x v(AB) +% #1 le coeff; #2--> A #3--> B #4-->N tq #4-#2 = #1*(#3-#2) +%<--------------------------------------------------------------------------–> +% tkz@numv 2 +\def\tkzVecK{\pgfutil@ifnextchar[{\tkz@VecK}{\tkz@VecK[1]}} +\def\tkz@VecK[#1](#2,#3){% +\iftkz@line@normed + \tkz@VecKNorm[#1](#2,#3) +\else +\begingroup + \pgfpointdiff{\pgfpointanchor{#2}{center}}% + {\pgfpointanchor{#3}{center}}% + \pgf@xa=\pgf@x\relax% + \pgf@ya=\pgf@y\relax% + \pgfmathparse{#1} + \let\tkz@coeff\pgfmathresult + \pgfinterruptboundingbox + \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +\fi +}% +%<--------------------------------------------------------------------------–> +% tkzVecKOrthNorm coeff dans #1 +% v(AN) perp v(AB) v(AB) v(AN) sens direct cercle trigo +% ||v(AN||=1 si #1 est vide ou =1 sinon ||v(AN||=K +%<--------------------------------------------------------------------------–> +% tkz@numv 3 +\def\tkzVecKOrthNorm{\pgfutil@ifnextchar[{\tkz@VecKOrthNorm}% + {\tkz@VecKOrthNorm[1]}} +\def\tkz@VecKOrthNorm[#1](#2,#3){% +\begingroup + \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#2}{center}}% + {\pgfpointanchor{#3}{center}}} + \pgf@xa=-\pgf@y\relax% + \pgf@ya=\pgf@x\relax% + \pgfmathparse{#1} + \let\tkz@tmp\pgfmathresult + \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}} + \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}} + \pgfinterruptboundingbox + \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +}% +%<--------------------------------------------------------------------------–> +% VectorNormalised ou K*VectorNormalised +% A-->#2 B-->#3 N-->#4 v(AB) devient v(AN) tq ||v(AN)||=1 si #1=1 +% sinon ||v(AN)||=#1 +%<--------------------------------------------------------------------------–> +% tkz@numv 4 +\def\tkzVecKNorm{\pgfutil@ifnextchar[{\tkz@VecKNorm}{\tkz@VecKNorm[1]}} +\def\tkz@VecKNorm[#1](#2,#3){% +\begingroup + \tkzpointnormalised{% + \pgfpointdiff{\pgfpointanchor{#2}{center}} + {\pgfpointanchor{#3}{center}}} + \pgf@xa=\pgf@x\relax% + \pgf@ya=\pgf@y\relax% + \pgfmathparse{#1} + \let\tkz@tmp\pgfmathresult + \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}} + \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}} + \pgfinterruptboundingbox + \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +}% +%<--------------------------------------------------------------------------–> +% \tkz@VecKColinearNorm +%<--------------------------------------------------------------------------–> +%% tkz@numv 5 +\def\tkz@VecKColinearNorm[#1](#2,#3){% +\begingroup + \tkzpointnormalised{% + \pgfpointdiff{\pgfpointanchor{#2}{center}} + {\pgfpointanchor{#3}{center}}} + \pgf@xa=\pgf@x\relax% + \pgf@ya=\pgf@y\relax% + \edef\tkz@x{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@xa}} + \edef\tkz@y{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@ya}} + \pgfinterruptboundingbox + \path (\tkz@frompoint)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +}% +%<--------------------------------------------------------------------------–> +% VecKCoLinear CN = K x AB #1 pt #2 pt #3 pt #4 nb #5 pt result +% il faut modifier cette macro : on supprime #3 pour la colinéarité +% Il suffit d'utiliser Replicate ou Duplicate coeff dans #1 +% v(CD)=#1 x v(AB) #1 le coeff; #2-->A #3-->B #4-->C +%<--------------------------------------------------------------------------–> +\def\tkz@VecKCoLinear[#1](#2,#3,#4){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#2}{center}}% + {\pgfpointanchor{#3}{center}}% + \pgf@xa=\pgf@x\relax% + \pgf@ya=\pgf@y\relax% + \edef\tkz@coeff{\fpeval{#1}} + \pgfinterruptboundingbox + \path (#4)--+(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +}% +\def\tkz@VecCoLinear(#1,#2,#3){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% + \pgf@xa=\pgf@x\relax% + \pgf@ya=\pgf@y\relax% + \pgfinterruptboundingbox + \path (#3)--+(\pgf@xa,\pgf@ya) coordinate (tkzPointResult); + \endpgfinterruptboundingbox +\endgroup +}% +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex new file mode 100644 index 0000000000..744639a8a3 --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex @@ -0,0 +1,166 @@ + % tkz-obj-lua-points.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. + +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-lua-points.tex} +\makeatletter +%<---------------------------------------------------------------------------> +% init def point +%<---------------------------------------------------------------------------> +% tkzDefPoint +%<---------------------------------------------------------------------------> +% macros complémentaires pour def point +%<---------------------------------------------------------------------------> +\def\tkz@parsecoordinate#1{% +\tkz@getseparator#1,\@nil +\iftkz@polar + \tkz@getfrompolar#1\@nil +\else + \tkz@getfromcart#1\@nil +\fi +} +\def\tkz@getseparator#1,#2\@nil{% +\ifx\tkzempty#2\tkzempty% + \tkz@polartrue +\else + \tkz@polarfalse +\fi +} +\def\tkz@getfrompolar#1:#2\@nil{% +\edef\tkz@a{\fpeval{#1}} +\edef\tkz@r{\fpeval{#2}} +\xdef\tkz@polarrad{\tkz@r} +\xdef\tkz@polarangle{\tkz@a} +} +\def\tkz@getfromcart#1,#2\@nil{% +\edef\tkz@x{\fpeval{#1}} +\edef\tkz@y{\fpeval{#2}} +\xdef\tkz@absc{\tkz@x} +\xdef\tkz@ord{\tkz@y} +} +%<---------------------------------------------------------------------------> +% options pour point definition +%<---------------------------------------------------------------------------> +\pgfkeys{/tkzPt/.cd, + polar/.is if = tkz@pt@polar, + polar/.default = true, + polar = false +} +%<---------------------------------------------------------------------------> +% tkz@ptStar +%<---------------------------------------------------------------------------> +\def\tkz@ptStar[#1](#2,#3)#{% +\pgfkeys{/tkzPt/.cd, polar = false} +\pgfqkeys{/tkzPt}{#1} +\iftkz@pt@polar% + \edef\tkz@x{\fpeval{#3*cosd(#2)}} + \edef\tkz@y{\fpeval{#3*sind(#2)}} +\else + \edef\tkz@x{\fpeval{#2}} + \edef\tkz@y{\fpeval{#3}} +\fi +\edef\tkzpt@xa{\tkz@Dec{(\tkz@x-(\tkz@init@xorigine))/\tkz@init@xstep}} +\edef\tkzpt@ya{\tkz@Dec{(\tkz@y-(\tkz@init@yorigine))/\tkz@init@ystep}} +\tkz@node +} +%<---------------------------------------------------------------------------> +% la macro defpoint les coordonnées cartésiennes ou polaires sont traitées +% afin de pouvoir être adaptées avec les unités choisies +%<---------------------------------------------------------------------------> +\def\tkzDefPoint{\pgfutil@ifnextchar[{\tkz@DefPoint}{\tkz@DefPoint[]}} + +\def\tkz@DefPoint[#1](#2)#{% +\tkz@parsecoordinate{#2} +\iftkz@polar + \tkz@ptStar[polar](\tkz@polarangle,\tkz@polarrad){tkz@coord@temp} +\else + \tkz@ptStar[](#2){tkz@coord@temp} +\fi +\tkz@DefPointEnd[#1] +}% +\def\tkz@DefPointEnd[#1]#2{\coordinate[#1] (#2) at (tkz@coord@temp);} +%<---------------------------------------------------------------------------> +% tkzDefPoints +%<---------------------------------------------------------------------------> +\def\tkzDefPoints{\pgfutil@ifnextchar[{\tkz@DefPoints}{\tkz@DefPoints[]}} +\def\tkz@DefPoints[#1]#2{% + \begingroup + \def\tkz@parenthesis@for@err{(}% + \def\tkz@maybe@parenthesis{#2}% + \ifx\tkz@maybe@parenthesis\tkz@parenthesis@for@err + \PackageError{tkz-base}{Syntax error use {} instead of ()}{You need to use {} instead of ()}% + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {\tkz@absorb@bad@arg}% + {\foreach \ptx/\pty/\name in {#2}{\tkzDefPoint[#1](\ptx,\pty){\name}}% + \endgroup}% +} +\def\tkz@absorb@bad@arg#1){\endgroup} +%<---------------------------------------------------------------------------> +\def\tkz@node#1{ \pgfinterruptboundingbox +\path[coordinate](\tkzpt@xa,\tkzpt@ya) coordinate(#1); + \endpgfinterruptboundingbox} +%<---------------------------------------------------------------------------> +\def\tkzRenamePoint(#1)#2{\coordinate (#2) at (#1);} +\def\tkz@RenamePointEnd[#1]#2{\coordinate[#1] (#2) at (\tkz@ax,\tkz@ay);} +\def\tkzGetPoint#1{\coordinate (#1) at (tkzPointResult);} +\def\tkzGetPoints#1#2{\coordinate (#1) at (tkzFirstPointResult); + \coordinate (#2) at (tkzSecondPointResult);} +\def\tkzGetFirstPoint#1{\coordinate (#1) at (tkzFirstPointResult);} +\def\tkzGetSecondPoint#1{\coordinate (#1) at (tkzSecondPointResult);} +\def\tkzGetThirdPoint#1{\coordinate (#1) at (tkzThirdPointResult);} +\def\tkzDefShiftPointCoord[#1](#2)#3{% + \begin{scope}[shift={(#1)}] + \coordinate (#3) at (#2); + \end{scope} + }% +%<--------------------------------------------------------------------------–> +%<---------------------------------------------------------------------------> +% tkzDefShiftPoint +%<---------------------------------------------------------------------------> +\def\tkzDefShiftPoint[#1](#2)#3{% + \tkz@@extractxy{#1} + \tkz@ax\pgf@x % + \tkz@ay\pgf@y % +\begin{scope}[shift={(\tkz@ax,\tkz@ay)}] + \coordinate (#3) at (#2); +\end{scope} +} +%<---------------------------------------------------------------------------> +% Coordonnées d'un point +% result in #2x et #2y #1 est le point et on récupère ses coordonnées +% usage soit A un point \tkzGetPointCoord(A){V} alors \Vx = xA et \Vy = yA +% en cm +% tkzGetPointCoord avec [#1] cm ou bien pt ?? todo +%<---------------------------------------------------------------------------> +\def\tkzGetPointCoord(#1)#2{% +\begingroup + \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} + \pgfmathparse{\pgf@sys@tonumber{\pgf@x}/28.45274} + \global\let\tkzresultx\pgfmathresult + \global\expandafter\edef\csname #2x\endcsname{\tkzresultx}% + \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} + \pgfmathparse{\pgf@sys@tonumber{\pgf@y}/28.45274} + \global\let\tkzresulty\pgfmathresult + \global\expandafter\edef\csname #2y\endcsname{\tkzresulty} +\endgroup +} +\def\tkz@@extractxy#1{% +\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} +} +\let\tkzGetPointxy\tkzGetPointCoord +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles-by.tex deleted file mode 100644 index 6f5eb1c577..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles-by.tex +++ /dev/null @@ -1,157 +0,0 @@ -% tkz-obj-eu-circles.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. - -\def\fileversion{6.00} -\def\filedate{2023/10/20} -\typeout{2023/10/20 6.00 tkz-obj-eu-circles.tex} -\makeatletter -%<--------------------------------------------------------------------------–> -% tkzCircle center and one point -%<--------------------------------------------------------------------------–> -% attention radius circle is defined by center and a point on the circle -% R defined by center and the value of the radius -% no need to define a circle with R tikz uses this method. -% through instead of radius -\def\tkz@numcby{0} -\pgfkeys{/tkzDefCircleBy/.cd, - translation/.code args = {from #1 to #2} { \def\tkz@numcby{0} - \def\tkzfrom{#1} - \def\tkzto{#2}}, - homothety/.code args = {center #1 ratio #2}{ \def\tkz@numcby{1} - \def\tkzcenter{#1} - \def\tkzratio{#2}}, - reflection/.code args = {over #1--#2}{ \def\tkz@numcby{2} - \def\tkzdeb{#1} - \def\tkzfin{#2}}, - symmetry/.code args = {center #1}{ \def\tkz@numcby{3} - \def\tkzcenter{#1}}, - rotation/.code args = {center #1 angle #2}{ \def\tkz@numcby{4} - \def\tkzcenter{#1} - \def\tkzangle{#2}}, - inversion/.code args={center #1 through #2}{ \def\tkz@numcby{5} - \def\tkzcenter{#1} - \def\tkzpoint{#2}}, - inversion negative/.code args = {center #1 through #2}{\def\tkz@numcby{6} - \def\tkzcenter{#1} - \def\tkzpoint{#2}} - } -\def\tkzDefCircleBy{\pgfutil@ifnextchar[{\tkz@DefCircleBy}{\tkz@DefCircleBy[]}} -\def\tkz@DefCircleBy[#1](#2){% -\begingroup -\pgfqkeys{/tkzDefCircleBy}{#1} -\ifcase\tkz@numcby% - \tkzDefCircleTranslation(#2)% - \or% 1 - \tkzDefCircleHomothety(#2) - \or% 2 - \tkzDefCircleReflection(#2) - \or% 3 - \tkzDefCircleSymmetry(#2) - \or% 4 - \tkzDefCircleRotation(#2) - \or% 5 - \tkzDefInversionCircle(#2,\tkzcenter,\tkzpoint) - \or% 6 - \tkzDefInversionNegativeCircle(#2,\tkzcenter,\tkzpoint) -\fi -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleTranslation(#1,#2){% -\begingroup - \tkzUTranslation(\tkzfrom,\tkzto)(#1) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzUTranslation(\tkzfrom,\tkzto)(#2) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleHomothety(#1,#2){% -\begingroup - \tkzUHomo(\tkzcenter,\tkzratio)(#1) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzUHomo(\tkzcenter,\tkzratio)(#2) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleReflection(#1,#2){% -\begingroup - \tkzUSymOrth(\tkzdeb,\tkzfin)(#1) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzUSymOrth(\tkzdeb,\tkzfin)(#2) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleSymmetry(#1,#2){% -\begingroup - \tkzUCSym(\tkzcenter)(#1) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzUCSym(\tkzcenter)(#2) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleRotation(#1,#2){% -\begingroup - \tkzURotateAngle(\tkzcenter,\tkzangle)(#1) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzURotateAngle(\tkzcenter,\tkzangle)(#2) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -% #3,#4 cercle d'inversion centre #3. through #4 -% Si le cercle passe par le pôle l'image est une droite -\def\tkzDefInversionCircle(#1,#2,#3,#4){% -\begingroup - \tkz@@CalcLengthcm(#1,#2){tkz@lna}% - \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% - \edef\tkzMathResult{\tkz@Dec{\tkz@Round{\tkz@Abs{\tkz@lnb - \tkz@lna}}{6}}} - \ifdim\tkzMathResult pt < 0.00001 pt\relax% - \tkzURotateAngle(#1,-90)(#2) - \pgfnodealias{tkz@a}{tkzPointResult} - \tkzUInversePoint(#3,#4)(tkz@a) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzUInversePoint(#3,#4)(#2) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} - \else - \tkzURotateAngle(#1,90)(#2) - \pgfnodealias{tkz@a}{tkzPointResult} - \tkzURotateAngle(#1,-90)(#2) - \pgfnodealias{tkz@b}{tkzPointResult} - \tkzUInversePoint(#3,#4)(tkz@a) - \pgfnodealias{tkz@p1}{tkzPointResult} - \tkzUInversePoint(#3,#4)(tkz@b) - \pgfnodealias{tkz@p2}{tkzPointResult} - \tkzUInversePoint(#3,#4)(#2) - \pgfnodealias{tkz@p3}{tkzPointResult} - \tkzDefCircle[circum](tkz@p3,tkz@p1,tkz@p2) - \fi -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefInversionNegativeCircle(#1,#2,#3,#4){% -\begingroup - \tkzDefInversionCircle(#1,#2,#3,#4) - \tkzUCSym(\tkzcenter)(tkzFirstPointResult) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzUCSym(\tkzcenter)(tkzSecondPointResult) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -% End Def Circle -%<--------------------------------------------------------------------------–> -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex deleted file mode 100644 index 68f17c42ea..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex +++ /dev/null @@ -1,223 +0,0 @@ -% tkz-obj-lua-circles.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. - -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-lua-circles.tex} -\makeatletter -%<--------------------------------------------------------------------------–> -% tkzCircle center and one point -%<--------------------------------------------------------------------------–> -% attention radius circle is defined by center and a point on the circle -% R defined by center and the value of the radius -% no need to define a circle with R tikz uses this method. -% through instead of radius -\def\tkz@numc{0} -\pgfkeys{/tkzcircle/.cd, - R/.code = \def\tkz@numc{0}, - diameter/.code = \def\tkz@numc{1}, - circum/.code = \def\tkz@numc{2}, - in/.code = \def\tkz@numc{3}, - ex/.code = \def\tkz@numc{4}, - euler/.code = \def\tkz@numc{5}, - nine/.code = \def\tkz@numc{5}, - apollonius/.code = \def\tkz@numc{6}, - spieker/.code = \def\tkz@numc{7}, - orthogonal from/.code args = {#1}{\gdef\tkz@numc{8} - \def\tkz@ptfrom{#1}}, - orthogonal through/.code args = {#1 and #2}{\gdef\tkz@numc{9} - \def\tkz@ptone{#1} - \def\tkz@pttwo{#2}}, - K/.code = \def\tkz@koeff{#1}, - K = 1, - circum - } -\def\tkzDefCircle{\pgfutil@ifnextchar[{\tkz@DefCircle}{\tkz@DefCircle[]}} -\def\tkz@DefCircle[#1](#2){% -\begingroup -\pgfqkeys{/tkzcircle}{#1} -\ifcase\tkz@numc% - \tkzDefCircleR(#2) - \or% 1 - \tkzDefCircleD(#2) - \or% 2 - \tkzDefCircumCircle(#2) - \or% 3 - \tkzDefInCircle(#2) - \or% 4 - \tkzDefExCircle(#2) - \or% 5 - \tkzDefEulerCircle(#2) - \or% 6 - \tkzDefApolloniusCircle(#2) - \or% 7 - \tkzDefSpiekerCircle(#2) - \or% 8 - \tkzDefOrthogonalCircle(#2,\tkz@ptfrom) - \or% 9 - \tkzDefOrthoThroughCircle(#2,\tkz@ptone,\tkz@pttwo) - \fi -\endgroup -} -%for compatibility -%<--------------------------------------------------------------------------–> -% R -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleR(#1,#2){% -\begingroup - \edef\tkzLengthResult{\fpeval{round(#2,5)}} - \global\let\tkzLengthResult\tkzLengthResult - \path (#1)--++(\tkzLengthResult,0) coordinate (tkzSecondPointResult); - \tkzRenamePoint(tkzSecondPointResult){tkzPointResult} -\endgroup -} - -%<--------------------------------------------------------------------------–> -% Diameter Circle -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleD(#1,#2){% -\begingroup - \tkzDefMidPoint(#1,#2) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \pgfnodealias{tkzSecondPointResult}{#2} - \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -% Circum Circle -%<--------------------------------------------------------------------------–> -\def\tkzDefCircumCircle(#1,#2,#3){% -\begingroup - \tkzCircumCenter(#1,#2,#3) - \tkzRenamePoint(tkzPointResult){tkzFirstPointResult} - \tkzRenamePoint(#1){tkzSecondPointResult} - \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult}%3.06 add [cm] -\endgroup -} -%<--------------------------------------------------------------------------–> -% In(scribe) Circle -%<--------------------------------------------------------------------------–> -\def\tkzDefInCircle(#1,#2,#3){% -\begingroup - \tkzInCenter(#1,#2,#3) - \pgfnodealias{tkz@incenter}{tkzPointResult} - \tkzUProjection(#1,#3)(tkz@incenter) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} - \tkz@@CalcLengthcm(tkzPointResult,tkz@incenter){tkzLengthResult} - \pgfnodealias{tkzPointResult}{tkz@incenter} - \pgfnodealias{tkzFirstPointResult}{tkz@incenter} -\endgroup -} -%<--------------------------------------------------------------------------–> -% Ex(scribe) Circle -%<--------------------------------------------------------------------------–> -\def\tkzDefExCircle(#1,#2,#3){% -\begingroup - \tkzExCenter(#1,#2,#3) - \pgfnodealias{tkz@excenter}{tkzPointResult} - \tkzUProjection(#1,#3)(tkz@excenter) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} - \tkz@@CalcLengthcm(tkzPointResult,tkz@excenter){tkzLengthResult}% for tkzGetLength - \pgfnodealias{tkzPointResult}{tkz@excenter} - \pgfnodealias{tkzFirstPointResult}{tkz@excenter} -\endgroup -} -%<--------------------------------------------------------------------------–> -% Radius Ex Circle -%<--------------------------------------------------------------------------–> -\def\tkzDefExRadius(#1,#2,#3){% -\begingroup - \tkzExCenter(#1,#2,#3) - \tkzUProjection(#1,#3)(tkzPointResult) -\endgroup -} -%<--------------------------------------------------------------------------–> -% The nine-point circle, also called Euler's circle or the Feuerbach circle -% best way Ma,Mb,Mc circum center 2020 -%<--------------------------------------------------------------------------–> -\def\tkzDefEulerCircle(#1,#2,#3){% -\begingroup - \tkzDefMidPoint(#1,#2) \pgfnodealias{tkz@e1}{tkzPointResult} - \tkzDefMidPoint(#2,#3) \pgfnodealias{tkz@e2}{tkzPointResult} - \tkzDefMidPoint(#1,#3) \pgfnodealias{tkz@e3}{tkzPointResult} - \tkzCircumCenter(tkz@e1,tkz@e2,tkz@e3) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzRenamePoint(tkz@e1){tkzSecondPointResult} - \tkz@@CalcLengthcm(tkzPointResult,tkz@e1){tkzLengthResult} -\endgroup -} -\let\tkzDefNinePointsCircle\tkzEulerCircle% -\let\tkzFeuerBachCircle\tkzEulerCircle% - -\def\tkzDefEulerRadius(#1,#2,#3){% -\begingroup - \tkzEulerCenter(#1,#2,#3) - \pgfnodealias{eur@pta}{tkzPointResult} - \tkzDefMidPoint(#1,#2) - \tkz@@CalcLengthcm(eur@pta,tkzPointResult){tkzLengthResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -% Apollonius circle -%<--------------------------------------------------------------------------–> -\def\tkzDefApolloniusCircle(#1,#2){% -\begingroup - \tkzDefBarycentricPointTwo(#1,1,#2,\tkz@koeff) - \pgfnodealias{apo@pta}{tkzPointResult} - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} - \tkzDefBarycentricPointTwo(#1,1,#2,-\tkz@koeff) - \pgfnodealias{apo@ptb}{tkzPointResult} - \tkzDefMidPoint(apo@pta,apo@ptb) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkz@@CalcLengthcm(tkzFirstPointResult,apo@pta){tkzLengthResult} - \pgfnodealias{tkzThirdPointResult}{apo@ptb} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefOrthogonalCircle(#1,#2,#3){% -\begingroup - \tkzTgtFromP(#1,#2)(#3) - \tkz@@CalcLengthcm(#1,tkzFirstPointResult){tkzLengthResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefOrthoThroughCircle(#1,#2,#3,#4){% -\begingroup - \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% - \edef\tkz@lnc{\fpeval{1/\tkz@lnb}} - \tkzVecKNorm[\tkz@lnc](#1,#3) - \pgfnodealias{tkz@PointResult}{tkzPointResult} - \tkzCircumCenter(tkz@PointResult,#3,#4) - \tkz@@CalcLengthcm(tkzPointResult,#3){tkzLengthResult} - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \pgfnodealias{tkzSecondPointResult}{#3} -\endgroup -} -%<--------------------------------------------------------------------------–> -% Spieker Circle -%<--------------------------------------------------------------------------–> -\def\tkzDefSpiekerCircle(#1,#2,#3){% -\begingroup - \tkzSpiekerCenter(#1,#2,#3) - \pgfnodealias{tkzFirstPointResult}{tkzPointResult} - \tkzUProjection(tkz@m1,tkz@m2)(tkzPointResult) - \pgfnodealias{tkzSecondPointResult}{tkzPointResult} - \tkz@@CalcLength(tkzSecondPointResult,tkzFirstPointResult){tkzLengthResult} -\endgroup -} -%<--------------------------------------------------------------------------–> - -%<--------------------------------------------------------------------------–> -% End Def Circle -%<--------------------------------------------------------------------------–> -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex deleted file mode 100644 index 75c8b0629c..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex +++ /dev/null @@ -1,522 +0,0 @@ -% tkz-tools-lua-points-by.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. - -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-lua-points-by.tex} -\makeatletter -%<--------------------------------------------------------------------------–> -% Transformations Géométriques -%<--------------------------------------------------------------------------–> -\def\tkz@numtrsf{0} -\pgfkeys{/tkzDefPointBy/.cd, - translation/.code args={from #1 to #2}{ \def\tkzfrom{#1}% - \def\tkzto{#2}% - \def\tkz@numtrsf{0}}, - homothety/.code args={center #1 ratio #2}{ \def\tkzcenter{#1}% - \def\tkzratio{#2}% - \def\tkz@numtrsf{1}}, - reflection/.code args={over #1--#2}{ \def\tkzdeb{#1}% - \def\tkzfin{#2}% - \def\tkz@numtrsf{2}}, - symmetry/.code args={center #1}{ \def\tkzcenter{#1}% - \def\tkz@numtrsf{3}}, - projection/.code args={onto #1--#2}{ \def\tkzdeb{#1}% - \def\tkzfin{#2}% - \def\tkz@numtrsf{4}}, - rotation/.code args={center #1 angle #2}{ \def\tkzcenter{#1}% - \def\tkzangle{#2}% - \def\tkz@numtrsf{5}}, - rotation in rad/.code args={center #1 angle #2}{ \def\tkzcenter{#1}% - \def\tkzangle{#2}% - \def\tkz@numtrsf{6}}, - inversion/.code args={center #1 through #2}{ \def\tkzcenter{#1}% - \def\tkzpoint{#2}% - \def\tkz@numtrsf{7}}, - inversion negative/.code args={center #1 through #2}{ \def\tkzcenter{#1}% - \def\tkzpoint{#2}% - \def\tkz@numtrsf{8}}, - rotation with nodes/.code args={center #1 from #2 to #3}{ \def\tkzcenter{#1}% - \def\tkzfrom{#2}% - \def\tkzto{#3}% - \def\tkz@numtrsf{9}} -} -%<--------------------------------------------------------------------------–> -\def\tkzDefPointBy{\pgfutil@ifnextchar[{\tkz@DefPointBy}{\tkz@DefPointBy[]}} -\def\tkz@DefPointBy[#1](#2){% -\begingroup -\pgfqkeys{/tkzDefPointBy}{#1} - \ifcase\tkz@numtrsf% -% % first case 0 - \tkzUTranslation(\tkzfrom,\tkzto)(#2) -\or% 1 - \tkzUHomo(\tkzcenter,\tkzratio)(#2) -\or% 2 - \tkzUSymOrth(\tkzdeb,\tkzfin)(#2) -\or% 3 - \tkzUCSym(\tkzcenter)(#2) -\or% 4 - \tkzUProjection(\tkzdeb,\tkzfin)(#2) -\or% 5 - \tkzURotateAngle(\tkzcenter,\tkzangle)(#2) -\or% 6 - \tkzURotateInRad(\tkzcenter,\tkzangle)(#2) -\or% 7 - \tkzUInversePoint(\tkzcenter,\tkzpoint)(#2) -\or% 8 - \tkzUInverseNegativePoint(\tkzcenter,\tkzpoint)(#2) -\or% 9 - \tkzURotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2) -\fi -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzDefPointsBy{\pgfutil@ifnextchar[{\tkz@DefPointsBy}{\tkz@DefPointsBy[]}} -\def\tkz@DefPointsBy[#1](#2)#3{% -\begingroup -\pgfqkeys{/tkzDefPointBy}{#1} -\ifcase\tkz@numtrsf% - % first case 0 - \tkzTranslation(\tkzfrom,\tkzto)(#2){#3} - \or% 1 - \tkzHomo(\tkzcenter,\tkzratio)(#2){#3} - \or% 2 - \tkzSymOrth(\tkzdeb,\tkzfin)(#2){#3} - \or% 3 - \tkzCSym(\tkzcenter)(#2){#3} - \or% 4 - \tkzProjection(\tkzdeb,\tkzfin)(#2){#3} - \or% 5 - \tkzRotateAngle(\tkzcenter,\tkzangle)(#2){#3} - \or% 6 - \tkzRotateInRad(\tkzcenter,\tkzangle)(#2){#3} - \or% 7 - \tkzInversePoint(\tkzcenter,\tkzpoint)(#2){#3} - \or% 8 - \tkzInverseNegativePoint(\tkzcenter,\tkzpoint)(#2){#3} - \or% 9 - \tkzRotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2){#3} -\fi -\endgroup -} - -%<--------------------------------------------------------------------------–> - -\def\ExtractPoint#1,#2\@nil{% -\xdef\tkz@LastList{#2} -\xdef\tkz@FirstPoint{#1} -} -\def\FirstPointInList#1{% -\edef\tkz@templist{#1,} -\expandafter\ExtractPoint\tkz@templist\@nil -} -%<--------------------------------------------------------------------------–> -% Translation par rapport à un point -%<--------------------------------------------------------------------------–> -\def\tkzTranslation(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} -\foreach\PT in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \def\tkz@pointtsf{\PT '} - \else - \def\tkz@pointtsf{\tkz@FirstPoint} - \fi - \tkz@VecCoLinear(#1,#2,\PT) - \pgfnodealias{\tkz@pointtsf}{tkzPointResult} - } -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzUTranslation(#1,#2)(#3){% -\begingroup - \tkz@VecCoLinear(#1,#2,#3)% -\endgroup -} - -%<--------------------------------------------------------------------------–> -% Symétrie par rapport à un point Homo with (-1) -% #2 le centre #3 l'antécédent -%<--------------------------------------------------------------------------–> -\def\tkzCSym(#1)(#2)#3{% -\begingroup -\gdef\tkz@LastList{#3} - \foreach\PointCS in {#2}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \xdef\tkz@pointtsf{\PointCS '} - \else - \xdef\tkz@pointtsf{\tkz@FirstPoint} - \fi - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{\PointCS}{center}}% - \tkz@ax=\pgf@x% - \tkz@ay=\pgf@y% - \pgfinterruptboundingbox - \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (\tkz@pointtsf); - \endpgfinterruptboundingbox -} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzUCSym(#1)(#2){% -\begingroup - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% - \tkz@ax=\pgf@x% - \tkz@ay=\pgf@y% - \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (tkzPointResult); -\endgroup -} -%<--------------------------------------------------------------------------–> -% Symétrie orthogonale par rapport à une droite -%<--------------------------------------------------------------------------–> -\def\tkzSymOrth(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} - \foreach\PointSO in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \def\tkz@pointtsf{\PointSO '} - \else - \def\tkz@pointtsf{\tkz@FirstPoint} - \fi - \tkzUSymOrth(#1,#2)(\PointSO) - \pgfnodealias{\tkz@pointtsf}{tkzPointResult} - } -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzUSymOrth(#1,#2)(#3){% -\begingroup - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% - \tkz@ax =\pgf@y% - \tkz@ay =\pgf@x% - \pgfinterruptboundingbox - \path[coordinate] (#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); - \endpgfinterruptboundingbox - \tkzInterLL(#1,#2)(#3,tkz@point) - \pgfnodealias{tkzPointofSym}{tkzPointResult} - \tkz@VecK[2](#3,tkzPointofSym) -\endgroup -} - -%<--------------------------------------------------------------------------–> -% Projection orthogonale sur une droite -%<--------------------------------------------------------------------------–> -\def\tkzProjection(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} - \foreach\PointPJ in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \def\tkz@pointtsf{\PointPJ '} - \else - \def\tkz@pointtsf{\tkz@FirstPoint} - \fi - \tkzUProjection(#1,#2)(\PointPJ) - \pgfnodealias{\tkz@pointtsf}{tkzPointResult} - } -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzUProjection(#1,#2)(#3){% -\begingroup - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% - \tkz@ax =\pgf@y% - \tkz@ay =\pgf@x% - \pgfinterruptboundingbox - \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); - \tkzInterLL(#1,#2)(#3,tkz@point)% définit tkzPointResult - \endpgfinterruptboundingbox -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkz@Projection(#1,#2)(#3)#4{% -\begingroup - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% - \tkz@ax =\pgf@y% - \tkz@ay =\pgf@x% - \pgfinterruptboundingbox - \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); - \endpgfinterruptboundingbox - \tkz@InterLL(#1,#2)(#3,tkz@point){#4}% définit tkzPointResult -\endgroup -} -%<--------------------------------------------------------------------------–> -% Homothétie par rapport à un point -%<--------------------------------------------------------------------------–> -\def\tkzHomo(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} -\foreach\PointHO in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \xdef\tkz@pointtsf{\PointHO '} - \else - \xdef\tkz@pointtsf{\tkz@FirstPoint} - \fi - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{\PointHO}{center}}% - \pgf@xa=\pgf@x% - \pgf@ya=\pgf@y% - \pgfmathparse{#2} - \edef\tkz@coeff{\pgfmathresult}% - \pgfinterruptboundingbox - \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)% - coordinate(\tkz@pointtsf); - \endpgfinterruptboundingbox - } -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzUHomo(#1,#2)(#3){% -\begingroup - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#3}{center}}% - \pgf@xa=\pgf@x% - \pgf@ya=\pgf@y% - \pgfmathparse{#2} - \edef\tkz@coeff{\pgfmathresult}% - \pgfinterruptboundingbox - \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)% - coordinate(tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -} -%<--------------------------------------------------------------------------–> -% rotation en degré -%<--------------------------------------------------------------------------–> -\def\tkzRotateAngle(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} -\foreach\PointRot in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \def\tkz@pointtsf{\PointRot '} - \else - \def\tkz@pointtsf{\tkz@FirstPoint} - \fi - \tkz@@extractxy{\PointRot} - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \tkz@@extractxy{#1} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% - {\pgfpoint{\tkz@bx}{\tkz@by}}% - {#2} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \pgfinterruptboundingbox - \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);% - \endpgfinterruptboundingbox -} - \endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzURotateAngle(#1,#2)(#3){% -\begingroup - \pgf@process{\pgfpointanchor{#3}{center}}% - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \pgf@process{\pgfpointanchor{#1}{center}}% - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% - {\pgfpoint{\tkz@bx}{\tkz@by}}% - {#2} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \pgfinterruptboundingbox - \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);% - \endpgfinterruptboundingbox -\endgroup -} -%<--------------------------------------------------------------------------–> -% % rotation en radian -% %<--------------------------------------------------------------------------–> -\def\tkzRotateInRad(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} - \foreach\PointRot in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \xdef\tkz@pointtsf{\PointRot '} - \else - \xdef\tkz@pointtsf{\tkz@FirstPoint} - \fi - \pgfmathparse{#2 r} - \let\tkz@Angle\pgfmathresult - \tkz@@extractxy{\PointRot} - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \tkz@@extractxy{#1} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% - {\pgfpoint{\tkz@bx}{\tkz@by}}% - {\tkz@Angle} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \pgfinterruptboundingbox - \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf); - \endpgfinterruptboundingbox -} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzURotateInRad(#1,#2)(#3){% -\begingroup - \pgfmathparse{#2 r} - \let\tkz@Angle\pgfmathresult - \tkz@@extractxy{#3} - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \tkz@@extractxy{#1} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% - {\pgfpoint{\tkz@bx}{\tkz@by}}% - {\tkz@Angle} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \pgfinterruptboundingbox - \path[coordinate](\tkz@bx,\tkz@by)coordinate(tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -} -%<--------------------------------------------------------------------------–> -% Inverse of a point -%<--------------------------------------------------------------------------–> -\def\tkzInversePoint(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} - \foreach\PointIP in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \xdef\tkz@pointtsf{\PointIP '} - \else - \xdef\tkz@pointtsf{\tkz@FirstPoint} - \fi - \tkz@@CalcLengthcm(#1,#2){tkz@lna} - \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb} - \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} - \tkzVecKNorm[\tkz@lnc](#1,\PointIP) - \pgfnodealias{\tkz@pointtsf}{tkzPointResult} - } -\endgroup -} -\def\tkzUInversePoint(#1,#2)(#3){% -\begingroup - \tkz@@CalcLengthcm(#1,#2){tkz@lna}% - \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% - \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} - \tkzVecKNorm[\tkz@lnc](#1,#3) -\endgroup -} -% possible -% \tkzDefLine[tangent from =#3](#1,#2) -% \tkzTgtFromP(#1,#2)(#3) -% \tkzInterLL(tkzFirstPointResult,tkzSecondPointResult)(#1,#2) -%<--------------------------------------------------------------------------–> -% Inverse negative of a point -%<--------------------------------------------------------------------------–> -\def\tkzInverseNegativePoint(#1,#2)(#3)#4{% -\begingroup -\gdef\tkz@LastList{#4} - \foreach\PointIP in {#3}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \xdef\tkz@pointtsf{\PointIP '} - \else - \xdef\tkz@pointtsf{\tkz@FirstPoint} - \fi - \tkz@@CalcLengthcm(#1,#2){tkz@lna} - \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb} - \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} - \tkzVecKNorm[\tkz@lnc](#1,\PointIP) - \tkzUCSym(#1)(tkzPointResult) - \pgfnodealias{\tkz@pointtsf}{tkzPointResult} - } -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzUInverseNegativePoint(#1,#2)(#3){% -\begingroup - \tkz@@CalcLengthcm(#1,#2){tkz@lna}% - \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% - \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}} - \tkzVecKNorm[\tkz@lnc](#1,#3) - \tkzUCSym(#1)(tkzPointResult) -\endgroup -} -%<--------------------------------------------------------------------------–> -%<--------------- rotate with nodes ------------------------–> -%<--------------------------------------------------------------------------–> -\def\tkzRotateWithNodes(#1,#2,#3)(#4)#5{% -\begingroup -\gdef\tkz@LastList{#5} - \foreach\PointRotWN in {#4}{% - \FirstPointInList\tkz@LastList - \ifx\tkz@FirstPoint\tkzutil@empty - \def\tkz@pointtsf{\PointRotWN '} - \else - \def\tkz@pointtsf{\tkz@FirstPoint} - \fi - \tkzFindAngle(#2,#1,#3) - \tkz@@extractxy{\PointRotWN} - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \tkz@@extractxy{#1} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% - {\pgfpoint{\tkz@bx}{\tkz@by}}% - {\tkzAngleResult} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \pgfinterruptboundingbox - \path[coordinate](\tkz@bx,\tkz@by) coordinate (\tkz@pointtsf);% - \endpgfinterruptboundingbox -} -\endgroup -} -%<--------------------------------------------------------------------------–> -\def\tkzURotateWithNodes(#1,#2,#3)(#4){% -\begingroup - \tkzFindAngle(#2,#1,#3) - \pgf@process{\pgfpointanchor{#4}{center}}% - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \pgf@process{\pgfpointanchor{#1}{center}}% - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% - {\pgfpoint{\tkz@bx}{\tkz@by}}% - {\tkzAngleResult} - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \pgfinterruptboundingbox - \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);% - \endpgfinterruptboundingbox -\endgroup -} -%<--------------------------------------------------------------------------–> -% Fin des transformations -%<--------------------------------------------------------------------------–> -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex deleted file mode 100644 index ec4932d8ac..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex +++ /dev/null @@ -1,680 +0,0 @@ -% tkz-obj-lua-points.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. - -\def\fileversion{5.03c} -\def\filedate{2023/01/23} -\typeout{2023/01/23 5.03c tkz-obj-lua-points-spc.tex} -\makeatletter -%add ExCenter -%<--------------------------------------------------------------------------–> -% Specific points -%<--------------------------------------------------------------------------–> -% barycentre -%<--------------------------------------------------------------------------–> -\def\tkzDefBarycentricPoint(#1){% -\begingroup - \path[coordinate] (barycentric cs:#1) coordinate (tkzPointResult); -\endgroup -} -\let\tkzDefBCPoint\tkzDefBarycentricPoint - -\def\tkzDefBarycentricPointTwo(#1,#2,#3,#4){% -\begingroup -\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} -\tkz@ax\pgf@x % -\tkz@ay\pgf@y % -\edef\tkzcax{\strip@pt\tkz@ax}% -\edef\tkzcay{\strip@pt\tkz@ay}% -\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}} -\tkz@bx\pgf@x % -\tkz@by\pgf@y % -\edef\tkzcbx{\strip@pt\tkz@bx}% -\edef\tkzcby{\strip@pt\tkz@by}% -\edef\tkztpmx{\tkz@Dec{(\tkzcax*(#2) + \tkzcbx*(#4))/(#2 + #4 )}} -\edef\tkztpmy{\tkz@Dec{(\tkzcay*(#2) + \tkzcby*(#2))/(#2 + #4 )}} -\pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} -\endgroup -} - -%<--------------------------------------------------------------------------–> -% milieu de deux points -%<--------------------------------------------------------------------------–> -% possible \coordinate (#3) at ($(#1)!0.5!(#2)$); -%<--------------------------------------------------------------------------–> -% \def\tkzDefMidPoint(#1,#2){% -% \begingroup -% \path (#1) -- (#2) coordinate[pos=.5](tkzPointResult); -% \endgroup -% } -\def\tkzDefMidPoint(#1,#2){% -\begingroup - \pgf@process{\pgfpointanchor{#1}{center}}% - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \pgf@process{\pgfpointanchor{#2}{center}}% - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \advance\tkz@bx by\tkz@ax\relax% - \advance\tkz@by by\tkz@ay\relax% - \divide\tkz@bx by2\relax% - \divide\tkz@by by2\relax - \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkz@bx}{\tkz@by}} -\endgroup -} -\def\tkz@DefMidPoint(#1,#2,#3,#4){% -\begingroup - \tkz@ax#1% - \tkz@ay#2% - \tkz@bx#3% - \tkz@by#4% - \advance\tkz@bx by\tkz@ax\relax% - \advance\tkz@by by\tkz@ay\relax% - \divide\tkz@bx by2\relax% - \divide\tkz@by by2\relax - \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkz@bx}{\tkz@by}} -\endgroup -} - -%<--------------------------------------------------------------------------–> -\def\tkz@simicenter{0} -\pgfkeys{/tkzsimicenter/.cd, - ext/.code = \def\tkz@simicenter{0}, - int/.code = \def\tkz@simicenter{1}, - ext -}% - -\def\tkzDefSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefSimilitudeCenter}% - {\tkz@DefSimilitudeCenter[]}} -\def\tkz@DefSimilitudeCenter[#1](#2,#3)(#4,#5){% -\pgfqkeys{/tkzsimicenter}{#1} -\begingroup -\ifcase\tkz@simicenter% - \tkzDefExtSimilitudeCenter[#1](#2,#3)(#4,#5) - \or% 1 - \tkzDefIntSimilitudeCenter[#1](#2,#3)(#4,#5) -\fi -\endgroup -} -%<--------------------------------------------------------------------------–> -% Internal Similitude center -% Two circles have two similitude centers namely the internal center of -% similitude Si and the external similitude center Se. -%<--------------------------------------------------------------------------–> -\def\tkz@numhomo{0} -\pgfkeys{ -/tkzSimilitudeCenter/.cd, - node/.code = \def\tkz@numhomo{0}, - R/.code = \def\tkz@numhomo{1}, - node, - /tkzSimilitudeCenter/.unknown/.code = {\let\searchname=\pgfkeyscurrentname - \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}} -} -\def\tkzDefIntSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefIntSimilitudeCenter}{\tkz@DefIntSimilitudeCenter[]}} -\def\tkz@DefIntSimilitudeCenter[#1](#2,#3)(#4,#5){% -\begingroup -\pgfqkeys{/tkzSimilitudeCenter}{#1} -\ifcase\tkz@numhomo% - \tkz@@CalcLengthcm(#2,#3){tkz@rt}% - \tkz@@CalcLengthcm(#4,#5){tkz@rf}% - \or% 1 - \def\tkz@rt{#3}% - \def\tkz@rf{#5}% -\fi -\pgfinterruptboundingbox -\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}} -\tkz@ax\pgf@x % -\tkz@ay\pgf@y % -\edef\tkzcax{\strip@pt\tkz@ax}% -\edef\tkzcay{\strip@pt\tkz@ay}% -\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}} -\tkz@bx\pgf@x % -\tkz@by\pgf@y % -\edef\tkzcbx{\strip@pt\tkz@bx}% -\edef\tkzcby{\strip@pt\tkz@by}% -\edef\tkztpmx{\tkz@Dec{(\tkzcax*\tkz@rf + \tkzcbx*\tkz@rt)/(\tkz@rf + \tkz@rt )}} -\edef\tkztpmy{\tkz@Dec{(\tkzcay*\tkz@rf + \tkzcby*\tkz@rt)/(\tkz@rf + \tkz@rt )}} - \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefIntHomotheticCenter\tkzDefIntSimilitudeCenter -%<--------------------------------------------------------------------------–> -% External Similitude center -%<--------------------------------------------------------------------------–> -\def\tkzDefExtSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefExtSimilitudeCenter}{% -\tkz@DefExtSimilitudeCenter[]}} - -\def\tkz@DefExtSimilitudeCenter[#1](#2,#3)(#4,#5){% -\begingroup -\pgfqkeys{/tkzSimilitudeCenter}{#1} -\ifcase\tkz@numhomo% - \tkz@@CalcLengthcm(#2,#3){tkz@rt}% - \tkz@@CalcLengthcm(#4,#5){tkz@rf}% - \or% 1 - \def\tkz@rt{#3}% - \def\tkz@rf{#5}% -\fi -\pgfinterruptboundingbox -\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}} -\tkz@ax\pgf@x % -\tkz@ay\pgf@y % -\edef\tkzcax{\strip@pt\tkz@ax}% -\edef\tkzcay{\strip@pt\tkz@ay}% -\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}} -\tkz@bx\pgf@x % -\tkz@by\pgf@y % -\edef\tkzcbx{\strip@pt\tkz@bx}% -\edef\tkzcby{\strip@pt\tkz@by}% -\edef\tkztpmx{\tkz@Dec{(\tkzcax*(-\tkz@rf) + \tkzcbx*\tkz@rt)/(\tkz@rt - (\tkz@rf))}} -\edef\tkztpmy{\tkz@Dec{(\tkzcay*(-\tkz@rf) + \tkzcby*\tkz@rt)/(\tkz@rt - (\tkz@rf))}} - \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} - \endpgfinterruptboundingbox -\endgroup -} - -\let\tkzDefExtHomotheticCenter\tkzDefExtSimilitudeCenter -%<--------------------------------------------------------------------------–> -% Harmonic Division -%<--------------------------------------------------------------------------–> -% A , B , C ,D CA/CB = DA/DB -%<--------------------------------------------------------------------------–> -\def\tkz@numdha{0} -\pgfkeys{/tkzharmonic/.cd, - ext/.code = \def\tkz@numdha{0}, - int/.code = \def\tkz@numdha{1}, - both/.code = \def\tkz@numdha{2}, - both, -}% - -\def\tkzDivHarmonic{\pgfutil@ifnextchar[{\tkz@DivHarmonic}{\tkz@DivHarmonic[]}} -\def\tkz@DivHarmonic[#1](#2){% -\begingroup -\pgfqkeys{/tkzharmonic}{#1} - \ifcase\tkz@numdha% - \tkzDefDivHarmonicExt(#2) - \or% - \tkzDefDivHarmonicInt(#2) - \or% - \tkzDefDivHarmonicBoth(#2) - \fi -\endgroup -} - -\def\tkzDefDivHarmonicExt(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox - \tkz@VecKOrth[](#1,#2) \tkzGetPoint{tkz@px} - \tkzDefMidPoint(tkz@px,#2) \tkzGetPoint{tkz@py} - \tkzInterLL(tkz@px,#3)(#1,tkz@py) \tkzGetPoint{tkz@pz} - \tkzInterLL(#2,tkz@pz)(#1,tkz@px) \tkzGetPoint{tkz@px} - \tkzInterLL(tkz@py,tkz@px)(#1,#2) \tkzGetPoint{tkzPointResult} -\endpgfinterruptboundingbox -\endgroup -} - -\def\tkzDefDivHarmonicInt(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox - \tkz@VecKOrth[1](#1,#2) \tkzGetPoint{tkz@px} - \tkzDefMidPoint(tkz@px,#2) \tkzGetPoint{tkz@py} - \tkzInterLL(tkz@py,#3)(#1,tkz@px) \tkzGetPoint{tkz@pz} - \tkzInterLL(#2,tkz@pz)(#1,tkz@py) \tkzGetPoint{tkz@py} - \tkzInterLL(tkz@py,tkz@px)(#1,#2) \tkzGetPoint{tkzPointResult} -\endpgfinterruptboundingbox -\endgroup -} - -\def\tkzDefDivHarmonicBoth(#1,#2,#3){% -\begingroup -\edef\tkz@k{\fpeval{#3}} - \path[coordinate] (barycentric cs:#1=1,#2={\tkz@k}) coordinate (tkzFirstPointResult); - \path[coordinate] (barycentric cs:#1=1,#2={-\tkz@k}) coordinate (tkzSecondPointResult); -\endgroup -} - -\let\tkzDefHarmonic\tkzDivHarmonic -%<--------------------------------------------------------------------------–> -% golden ratio -%<--------------------------------------------------------------------------–> -\def\tkzDefGoldenRatio(#1,#2){% -\begingroup -\tkzDefPointWith[linear,K=\tkzInvPhi](#1,#2) -\endgroup -} -%<--------------------------------------------------------------------------–> -% triangle center -%<--------------------------------------------------------------------------–> - -\def\tkz@numtc{0} -\pgfkeys{/tkzDefTriangleCenter/.cd, - ortho/.code = \def\tkz@numtc{0}, - orthic/.code = \def\tkz@numtc{0}, - centroid/.code = \def\tkz@numtc{1}, - median/.code = \def\tkz@numtc{1}, - circum/.code = \def\tkz@numtc{2}, - in/.code = \def\tkz@numtc{3}, - ex/.code = \def\tkz@numtc{4}, - euler/.code = \def\tkz@numtc{5}, - symmedian/.code = \def\tkz@numtc{6}, - lemoine/.code = \def\tkz@numtc{6}, - grebe/.code = \def\tkz@numtc{6}, - spieker/.code = \def\tkz@numtc{7}, - gergonne/.code = \def\tkz@numtc{8}, - nagel/.code = \def\tkz@numtc{9}, - mittenpunkt/.code = \def\tkz@numtc{10}, - feuerbach/.code = \def\tkz@numtc{11}, - circum -} -\def\tkzDefTriangleCenter{\pgfutil@ifnextchar[{\tkz@DefTriangleCenter}{\tkz@DefTriangleCenter[]}} -\def\tkz@DefTriangleCenter[#1](#2){% -\begingroup -\pgfqkeys{/tkzDefTriangleCenter}{#1} -\ifcase\tkz@numtc% - \tkzOrthoCenter(#2) - \or% 1 - \tkzCentroid(#2) - \or% 2 - \tkzCircumCenter(#2) - \or% 3 - \tkzInCenter(#2) - \or% 4 - \tkzExCenter(#2) - \or% 5 - \tkzEulerCenter(#2) - \or% 6 - \tkzSymmedianCenter(#2) - \or% 7 - \tkzSpiekerCenter(#2) - \or% 8 - \tkzGergonneCenter(#2) - \or%9 - \tkzNagelCenter(#2) - \or%10 - \tkzMittenpunktCenter(#2) - \or%11 - \tkzFeuerbachCenter(#2) - \fi -\endgroup -} -%<--------------------------------------------------------------------------–> -% OrthoCenter -%<--------------------------------------------------------------------------–> -\def\tkzOrthoCenter(#1,#2,#3){% -\begingroup - \pgfinterruptboundingbox - \tkzUProjection(#1,#2)(#3) - \pgfnodealias{ort@pta}{tkzPointResult} - \tkzUProjection(#1,#3)(#2) - \pgfnodealias{ort@ptb}{tkzPointResult} - \tkzInterLL(#2,ort@ptb)(#3,ort@pta) - \endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefOrthoCenter\tkzOrthoCenter -%<--------------------------------------------------------------------------–> -% GravityCenter modif 3.03 -%<--------------------------------------------------------------------------–> -\def\tkzCentroid(#1,#2,#3){% -\begingroup - \pgf@process{\pgfpointanchor{#1}{center}}% - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \pgf@process{\pgfpointanchor{#2}{center}}% - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \pgf@process{\pgfpointanchor{#3}{center}}% - \tkz@cx\pgf@x% - \tkz@cy\pgf@y% - \edef\tkzcax{\strip@pt\tkz@ax}% - \edef\tkzcay{\strip@pt\tkz@ay}% - \edef\tkzcbx{\strip@pt\tkz@bx}% - \edef\tkzcby{\strip@pt\tkz@by}% - \edef\tkzccx{\strip@pt\tkz@cx}% - \edef\tkzccy{\strip@pt\tkz@cy}% - \edef\tkztpmx{\tkz@Dec{(\tkzcax + \tkzcbx + \tkzccx)/3}} - \edef\tkztpmy{\tkz@Dec{(\tkzcay + \tkzcby + \tkzccy)/3}} - \pgfinterruptboundingbox - \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} - \endpgfinterruptboundingbox -\endgroup -} -\let\tkzBaryCenter\tkzCentroid - -%<--------------------------------------------------------------------------–> -% CircumCenter -%<--------------------------------------------------------------------------–> -\def\tkzCircumCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox - \tkzDefMediatorLine(#1,#2) - \pgf@process{\pgfpointanchor{tkzFirstPointResult}{center}}% - \tkz@ax\pgf@x% - \tkz@ay\pgf@y% - \pgf@process{\pgfpointanchor{tkzSecondPointResult}{center}}% - \tkz@bx\pgf@x% - \tkz@by\pgf@y% - \tkzDefMediatorLine(#1,#3) - \pgf@process{\pgfpointanchor{tkzFirstPointResult}{center}}% - \tkz@cx\pgf@x% - \tkz@cy\pgf@y% - \pgf@process{\pgfpointanchor{tkzSecondPointResult}{center}}% - \tkz@dx\pgf@x% - \tkz@dy\pgf@y% -\tkzInterLLxy(\tkz@ax,\tkz@ay,\tkz@bx,\tkz@by)(\tkz@cx,\tkz@cy,\tkz@dx,\tkz@dy)% -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefCircumCenter\tkzCircumCenter -%<--------------------------------------------------------------------------–> -% InCenter -%<--------------------------------------------------------------------------–> -\def\tkzInCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox -\tkzDefBisectorLine(#3,#1,#2) -\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% -\tkz@bx\pgf@x% -\tkz@by\pgf@y% -\tkzDefBisectorLine(#3,#2,#1) -\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% -\tkz@dx\pgf@x% -\tkz@dy\pgf@y% -\pgf@process{\pgfpointanchor{#1}{center}}% -\tkz@ax\pgf@x% -\tkz@ay\pgf@y% -\pgf@process{\pgfpointanchor{#2}{center}}% -\tkz@cx\pgf@x% -\tkz@cy\pgf@y% -\tkzInterLLxy(\tkz@ax,\tkz@ay,\tkz@bx,\tkz@by)(\tkz@cx,\tkz@cy,\tkz@dx,\tkz@dy)% -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefInCenter\tkzInCenter -%<--------------------------------------------------------------------------–> -% ExCenter -%<--------------------------------------------------------------------------–> -\def\tkzExCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox -\tkzDefBisectorOutLine(#2,#1,#3) -\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% -\tkz@bx\pgf@x% -\tkz@by\pgf@y% -\tkzDefBisectorOutLine(#2,#3,#1) -\pgf@process{\pgfpointanchor{tkzPointResult}{center}}% -\tkz@dx\pgf@x% -\tkz@dy\pgf@y% -\pgf@process{\pgfpointanchor{#1}{center}}% -\tkz@ax\pgf@x% -\tkz@ay\pgf@y% -\pgf@process{\pgfpointanchor{#3}{center}}% -\tkz@cx\pgf@x% -\tkz@cy\pgf@y% -\tkzInterLLxy(\tkz@ax,\tkz@ay,\tkz@bx,\tkz@by)(\tkz@cx,\tkz@cy,\tkz@dx,\tkz@dy)% -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefExCenter\tkzExCenter -%<--------------------------------------------------------------------------–> -% EulerCenter neuf points -%<--------------------------------------------------------------------------–> -\def\tkzEulerCenter(#1,#2,#3){% -% mileu de orthocentre et centre cercle circonscrit -% passe par les midpoints par les pieds des hauteurs -\begingroup -\pgfinterruptboundingbox -\tkzDefMidPoint(#1,#2) -\pgfnodealias{eu@mic}{tkzPointResult} -\tkzDefMidPoint(#1,#3) -\pgfnodealias{eu@mib}{tkzPointResult} -\tkzDefMidPoint(#2,#3) -\pgfnodealias{eu@mia}{tkzPointResult} -\tkzCircumCenter(eu@mia,eu@mib,eu@mic) -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzNinePointCenter\tkzEulerCenter -\let\tkzDefEulerCenter\tkzEulerCenter -%<--------------------------------------------------------------------------–> -%Symmedian center Lemoine point Grebe point K -%<--------------------------------------------------------------------------–> -\def\tkzSymmedianCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox -\tkzDefMidPoint(#2,#3) -\pgfnodealias{eu@mic}{tkzPointResult} -\tkzDefMidPoint(#1,#3) -\pgfnodealias{eu@mib}{tkzPointResult} -\tkzUProjection(#2,#3)(#1) -\pgfnodealias{ort@pta}{tkzPointResult} -\tkzDefMidPoint(#1,ort@pta) -\pgfnodealias{eu@mid}{tkzPointResult} -\tkzUProjection(#1,#3)(#2) -\pgfnodealias{ort@ptb}{tkzPointResult} -\tkzDefMidPoint(#2,ort@ptb) -\pgfnodealias{eu@mie}{tkzPointResult} -\tkzInterLL(eu@mic,eu@mid)(eu@mib,eu@mie) -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzLemoinePoint\tkzSymmedianCenter -\let\tkzGrebePoint\tkzSymmedianCenter -\let\tkzDefLemoinePoint\tkzLemoinePoint -%<--------------------------------------------------------------------------–> -% Spieker center -%<--------------------------------------------------------------------------–> -\def\tkzSpiekerCenter(#1,#2,#3){% -\begingroup -% we need to get the midpoints -\pgfcoordinate{tkz@m3}{% - \pgfpointscale{0.5}{% - \pgfpointadd{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}}}% -\pgfcoordinate{tkz@m2}{% - \pgfpointscale{0.5}{% - \pgfpointadd{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#3}{center}}}}% -\pgfcoordinate{tkz@m1}{% - \pgfpointscale{0.5}{% - \pgfpointadd{\pgfpointanchor{#2}{center}}% - {\pgfpointanchor{#3}{center}}}}% -\tkzInCenter(tkz@m1,tkz@m2,tkz@m3) -\endgroup -} -\let\tkzDefSpiekerCenter\tkzSpiekerCenter -%<--------------------------------------------------------------------------–> -% Gergonne center Ge -%<--------------------------------------------------------------------------–> -\def\tkzGergonneCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox -\tkzInCenter(#1,#2,#3) -\pgfnodealias{tkz@ptin}{tkzPointResult} -\tkzUProjection(#2,#3)(tkz@ptin) -\pgfnodealias{tkz@oca}{tkzPointResult} -\tkzUProjection(#1,#3)(tkz@ptin) -\pgfnodealias{tkz@ocb}{tkzPointResult} -\tkzInterLL(#1,tkz@oca)(#2,tkz@ocb) -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefGergonneCenter\tkzGergonneCenter -%<--------------------------------------------------------------------------–> -% Nagel center Na -%<--------------------------------------------------------------------------–> -% INa = 3 IG. Nagel point % correction 02/02/20 -\def\tkzNagelCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox -\tkzDefExcentralTriangle(#1,#2,#3){tkz@a,tkz@b,tkz@c} -\tkzUProjection(#2,#3)(tkz@a) -\pgfnodealias{tkz@tgta}{tkzPointResult} -\tkzUProjection(#1,#2)(tkz@c) -\pgfnodealias{tkz@tgtc}{tkzPointResult} -\tkzInterLL(#1,tkz@tgta)(#3,tkz@tgtc) -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefNagelCenter\tkzNagelCenter -%<--------------------------------------------------------------------------–> -% Mittenpunkt -%<--------------------------------------------------------------------------–> -\def\tkzMittenpunktCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox -\tkzExCenter(#2,#3,#1) -\pgfnodealias{tkz@a}{tkzPointResult} -\tkzExCenter(#3,#1,#2) -\pgfnodealias{tkz@b}{tkzPointResult} -\pgfcoordinate{tkz@ma}{% -\pgfpointscale{0.5}{% -\pgfpointadd{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}}}% -\pgfcoordinate{tkz@mb}{% -\pgfpointscale{0.5}{% -\pgfpointadd{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}}}% -\tkzInterLL(tkz@a,tkz@ma)(tkz@b,tkz@mb) -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefMittenpunktCenter\tkzMittenpunktCenter -\let\tkzDefMiddlespoint\tkzMittenpunktCenter -%<--------------------------------------------------------------------------–> -% Feuerbach point -%<--------------------------------------------------------------------------–> -\def\tkzFeuerbachCenter(#1,#2,#3){% -\begingroup -\pgfinterruptboundingbox -\tkzEulerCenter(#1,#2,#3) -\pgfnodealias{tkz@euler}{tkzPointResult} -\tkzInCenter(#1,#2,#3) -\pgfnodealias{tkz@in}{tkzPointResult} -\tkzUProjection(#2,#3)(tkzPointResult) -\tkzInterLC(tkz@in,tkz@euler)(tkz@in,tkzPointResult)\tkzGetFirstPoint{tkz@fe} -\tkzRenamePoint(tkz@fe){tkzPointResult} -\endpgfinterruptboundingbox -\endgroup -} -\let\tkzDefFeuerbachCenter\tkzFeuerbachCenter -%<--------------------------------------------------------------------------–> -% Orthogonal center -%<--------------------------------------------------------------------------–> -\def\tkzOrthogonalCenter(#1,#2){% -\begingroup -\pgfinterruptboundingbox -\tkz@VecK[\tkz@koeff/(1+\tkz@koeff)](#1,#2) -\pgfnodealias{tkzFirstPointResult}{tkzPointResult} -\tkz@VecK[\tkz@koeff/(\tkz@koeff-1)](#1,#2) -\pgfnodealias{tkzSecondPointResult}{tkzPointResult} -\tkzDefMidPoint(tkzFirstPointResult,tkzSecondPointResult) -\endpgfinterruptboundingbox -\endgroup -} -%<--------------------------------------------------------------------------–> -% End Triangle center -%<--------------------------------------------------------------------------–> -%<--------------------------------------------------------------------------–> -% Projection center of excircles -%<--------------------------------------------------------------------------–> -\def\tkzDefProjExcenter{\pgfutil@ifnextchar[{% - \tkz@DefProjExcenter}{% - \tkz@DefProjExcenter[]} - } -\def\tkz@DefProjExcenter[#1](#2,#3,#4)(#5)#6{ -\begingroup - \SetUpPTTR{#1} - \foreach \name [count=\i] in {#5} {% - \global\expandafter\edef\csname tkz@pt\i\endcsname{\name} - } - \foreach \name [count=\i] in {#6} {% - \global\expandafter\edef\csname tkz@ppt\i\endcsname{\name} - } -\tkzDefPointBy[projection=onto #3--#4 ](\tkz@pttr@name \csname tkz@pt1\endcsname) -\pgfnodealias{\csname tkz@ppt1\endcsname\csname tkz@pt1\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #3--#4 ](\tkz@pttr@name \csname tkz@pt2\endcsname) -\pgfnodealias{\csname tkz@ppt1\endcsname\csname tkz@pt2\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #3--#4 ](\tkz@pttr@name \csname tkz@pt3\endcsname) -\pgfnodealias{\csname tkz@ppt1\endcsname\csname tkz@pt3\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #2--#4 ](\tkz@pttr@name \csname tkz@pt1\endcsname) -\pgfnodealias{\csname tkz@ppt2\endcsname\csname tkz@pt1\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #2--#4 ](\tkz@pttr@name \csname tkz@pt2\endcsname) -\pgfnodealias{\csname tkz@ppt2\endcsname\csname tkz@pt2\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #2--#4 ](\tkz@pttr@name \csname tkz@pt3\endcsname) -\pgfnodealias{\csname tkz@ppt2\endcsname\csname tkz@pt3\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #3--#2 ](\tkz@pttr@name \csname tkz@pt1\endcsname) -\pgfnodealias{\csname tkz@ppt3\endcsname\csname tkz@pt1\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #3--#2 ](\tkz@pttr@name \csname tkz@pt2\endcsname) -\pgfnodealias{\csname tkz@ppt3\endcsname\csname tkz@pt2\endcsname}{tkzPointResult} -\tkzDefPointBy[projection=onto #3--#2 ](\tkz@pttr@name \csname tkz@pt3\endcsname) -\pgfnodealias{\csname tkz@ppt3\endcsname\csname tkz@pt3\endcsname}{tkzPointResult} -\endgroup -} -%<--------------------------------------------------------------------------–> -% Point on circle -%<--------------------------------------------------------------------------–> -\def\tkz@numptcirc{0} -\pgfkeys{/tkzptcircle/.cd, -through/.code args = {center #1 angle #2 point #3} { \def\tkz@center{#1}% - \def\tkz@angle{#2}% - \def\tkz@through{#3}% - \def\tkz@numptcirc{0}}, -R/.code args = {center #1 angle #2 radius #3} { \def\tkz@center{#1}% - \def\tkz@angle{#2}% - \def\tkz@radius{#3}% - \def\tkz@numptcirc{1}}, -through in rad/.code args = {center #1 angle #2 point #3} { \def\tkz@center{#1}% - \def\tkz@angle{#2}% - \def\tkz@through{#3}% - \def\tkz@numptcirc{2}}, -R in rad/.code args = {center #1 angle #2 radius #3} { \def\tkz@center{#1}% - \def\tkz@angle{#2}% - \def\tkz@radius{#3}% - \def\tkz@numptcirc{3}} -} - -\def\tkzDefPointOnCircle{\pgfutil@ifnextchar[{\tkz@DefPointOnCircle}{% - \tkz@DefPointOnCircle[]}} -\def\tkz@DefPointOnCircle[#1]{% -\begingroup -\pgfqkeys{/tkzptcircle}{#1} - \ifcase\tkz@numptcirc% - \tkz@@CalcLengthcm(\tkz@center,\tkz@through){tkz@radius} - \or% 1 - \relax% - \or% 2 - \pgfmathparse{\tkz@angle\space r} - \let\tkz@angle\pgfmathresult - \tkz@@CalcLengthcm(\tkz@center,\tkz@through){tkz@radius} - \or% 3 - \pgfmathparse{\tkz@angle\space r} - \let\tkz@angle\pgfmathresult -\fi -\path (\tkz@center) --++(\tkz@angle:\tkz@radius) coordinate(tkzPointResult); -\endgroup -} -%<--------------------------------------------------------------------------–> -% Point on line -%<--------------------------------------------------------------------------–> -\def\tkzDefPointOnLine{\pgfutil@ifnextchar[{\tkz@DefPointOnLine}{\tkz@DefPointOnLine[]}} -\def\tkz@DefPointOnLine[#1](#2,#3){% -\begingroup -\path (#2) to [#1] coordinate (tkzPointResult) (#3); -\endgroup -} - -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex deleted file mode 100644 index 7b4cae6c57..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex +++ /dev/null @@ -1,269 +0,0 @@ -% tkz-obj-lua-points-with.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. - -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-lua-points-with.tex} -\makeatletter -%<--------------------------------------------------------------------------–> -% Vectors -%<--------------------------------------------------------------------------–> -% Objet : outils mathématiques pour la géométrie euclideienne avec pgf/tikz -% utilisable de préférence avec un repère orthonormé et le cm comme unité -% utile pour la compatibilité avec pgf 2 -%<--------------------------------------------------------------------------–> -% Duplicate Length à revoir pas de pt pas de global -% ||v(CN)||= ||v(AB)|| et v(CN) colineaire à v(CD) -% A-->#1 B-->#2 C-->#3 D-->#4 N-->#5 ????? -%<--------------------------------------------------------------------------–> -%<--------------------------------------------------------------------------–> -% Outils pour les vecteurs -%<--------------------------------------------------------------------------–> -% ce sont des outils élémentaires qui à partir de deux points en définissent -% un troisième -% #1 si c'est une option alors c'est un nombre réel -% #2 et #3 sont deux points -% #4 est le nom du point qui résulte de la transformation -% exemple : \tkzVecKNorm (A,B){C} définit un point C tel que AC = 1 et C est % % un point de la droite (AC). #1 peut être négatif - -\def\tkzDuplicateSegment(#1,#2)(#3,#4){% -\begingroup - \tkz@@CalcLength(#1,#2){tkz@firstlen}% - \tkz@@CalcLength(#3,#4){tkz@secondlen}% - \edef\tkz@ratio{\tkz@Dec{\tkz@firstlen/\tkz@secondlen}} - \tkz@VecKCoLinear[\tkz@ratio](#3,#4,#3)% -\endgroup -} -\let\tkzDuplicateLength\tkzDuplicateSegment -%<--------------------------------------------------------------------------–> -% Coordonnées d'un vecteur (couple de points) -% Deux points A et B donc un vecteur on récupère les coordonnées de v(AB) -% en cm -% tkzGetVecCoord en cm ou en pt ??? -%<--------------------------------------------------------------------------–> -%result in #3x et #3y #1 et #2 sont les points -% passage en cm avec fp ? -% 28.45274 =1 cm -\def\tkzGetVectxy(#1,#2)#3{% -\begingroup -\pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% -\pgfmathparse{\pgf@sys@tonumber{\pgf@x}/1cm}% -\let\tkzresultx\pgfmathresult -\pgfmathparse{\pgf@sys@tonumber{\pgf@y}/1cm}% -\let\tkzresulty\pgfmathresult -\global\expandafter\edef\csname #3x\endcsname{\tkzresultx}% -\global\expandafter\edef\csname #3y\endcsname{\tkzresulty}% -\endgroup -} -%<--------------------------------------------------------------------------–> -% options #1 two points #2,#3 result in #4 -% -%<--------------------------------------------------------------------------–> -%<--------------------------------------------------------------------------–> -% tkzDefPointWith -%<--------------------------------------------------------------------------–> -\def\tkz@numv{0} -\pgfkeys{/@pointwith/.cd, - colinear/.code args = {at #1}{\def\tkz@numv{0}\def\tkz@frompoint{#1}}, - orthogonal/.code = {\def\tkz@numv{1}}, - linear/.code = {\def\tkz@numv{2}}, - orthogonal normed/.code = {\def\tkz@numv{3}}, - linear normed/.code = {\def\tkz@numv{4}}, - colinear normed/.code args = {at #1}{\def\tkz@numv{5}\def\tkz@frompoint{#1}}, - K/.code = {\edef\tkz@coeff{\fpeval{#1}}}, - K = 1, - normed/.is if = tkz@line@normed, - normed/.default = true, - normed = false, - orthogonal -} -\def\tkzDefPointWith{\pgfutil@ifnextchar[{\tkz@DefPointWith}{\tkz@DefPointWith[]}} - -\def\tkz@DefPointWith[#1](#2,#3){% -\begingroup -\pgfkeys{/@pointwith/.cd,K=1} -\pgfqkeys{/@pointwith}{#1} -\ifcase\tkz@numv% - % first case 0 - \tkz@DefVectorColinearat[\tkz@coeff](#2,#3) - \or% 1 - \tkz@VecKOrth[\tkz@coeff](#2,#3) - \or% 2 - \tkz@VecK[\tkz@coeff](#2,#3) - \or% 3 - \tkz@VecKOrthNorm[\tkz@coeff](#2,#3) - \or% 4 - \tkz@VecKNorm[\tkz@coeff](#2,#3) - \or% 5 - \tkz@VecKColinearNorm[\tkz@coeff](#2,#3) - \fi -\endgroup -} -%<--------------------------------------------------------------------------–> -% tkzDefVectorfrom -%<--------------------------------------------------------------------------–> -% tkz@numv 0 -\def\tkz@DefVectorColinearat[#1](#2,#3){% -\iftkz@line@normed - \tkz@VecKColinearNorm[#1](#2,#3) -\else -\begingroup - \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}% - \pgf@xa=\pgf@x\relax% - \pgf@ya=\pgf@y\relax% - \pgfinterruptboundingbox - \path (\tkz@frompoint)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -\fi -} -%<--------------------------------------------------------------------------–> -% tkzVector K Orth coeff dans #1 -% v(AN) perp v(AB) (v(AB) , v(AN) ) sens direct cercle trigo -% ||v(AN)||=||v(AB)|| -%<--------------------------------------------------------------------------–> -% tkz@numv 1 -\def\tkzVecKOrth{\pgfutil@ifnextchar[{\tkz@VecKOrth}{\tkz@VecKOrth[1]}} -\def\tkz@VecKOrth[#1](#2,#3){% -\iftkz@line@normed - \tkz@VecKOrthNorm[#1](#2,#3) -\else -\begingroup - \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}% - \pgf@xa=-\pgf@y% - \pgf@ya=\pgf@x% - \pgfinterruptboundingbox - \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -\fi -}% - -%<--------------------------------------------------------------------------–> -% v(AN)=#1 x v(AB) -% #1 le coeff; #2--> A #3--> B #4-->N tq #4-#2 = #1*(#3-#2) -%<--------------------------------------------------------------------------–> -% tkz@numv 2 -\def\tkzVecK{\pgfutil@ifnextchar[{\tkz@VecK}{\tkz@VecK[1]}} -\def\tkz@VecK[#1](#2,#3){% -\iftkz@line@normed - \tkz@VecKNorm[#1](#2,#3) -\else -\begingroup - \pgfpointdiff{\pgfpointanchor{#2}{center}}% - {\pgfpointanchor{#3}{center}}% - \pgf@xa=\pgf@x\relax% - \pgf@ya=\pgf@y\relax% - \pgfmathparse{#1} - \let\tkz@coeff\pgfmathresult - \pgfinterruptboundingbox - \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -\fi -}% -%<--------------------------------------------------------------------------–> -% tkzVecKOrthNorm coeff dans #1 -% v(AN) perp v(AB) v(AB) v(AN) sens direct cercle trigo -% ||v(AN||=1 si #1 est vide ou =1 sinon ||v(AN||=K -%<--------------------------------------------------------------------------–> -% tkz@numv 3 -\def\tkzVecKOrthNorm{\pgfutil@ifnextchar[{\tkz@VecKOrthNorm}% - {\tkz@VecKOrthNorm[1]}} -\def\tkz@VecKOrthNorm[#1](#2,#3){% -\begingroup - \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#2}{center}}% - {\pgfpointanchor{#3}{center}}} - \pgf@xa=-\pgf@y\relax% - \pgf@ya=\pgf@x\relax% - \pgfmathparse{#1} - \let\tkz@tmp\pgfmathresult - \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}} - \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}} - \pgfinterruptboundingbox - \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -}% -%<--------------------------------------------------------------------------–> -% VectorNormalised ou K*VectorNormalised -% A-->#2 B-->#3 N-->#4 v(AB) devient v(AN) tq ||v(AN)||=1 si #1=1 -% sinon ||v(AN)||=#1 -%<--------------------------------------------------------------------------–> -% tkz@numv 4 -\def\tkzVecKNorm{\pgfutil@ifnextchar[{\tkz@VecKNorm}{\tkz@VecKNorm[1]}} -\def\tkz@VecKNorm[#1](#2,#3){% -\begingroup - \tkzpointnormalised{% - \pgfpointdiff{\pgfpointanchor{#2}{center}} - {\pgfpointanchor{#3}{center}}} - \pgf@xa=\pgf@x\relax% - \pgf@ya=\pgf@y\relax% - \pgfmathparse{#1} - \let\tkz@tmp\pgfmathresult - \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}} - \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}} - \pgfinterruptboundingbox - \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -}% -%<--------------------------------------------------------------------------–> -% \tkz@VecKColinearNorm -%<--------------------------------------------------------------------------–> -%% tkz@numv 5 -\def\tkz@VecKColinearNorm[#1](#2,#3){% -\begingroup - \tkzpointnormalised{% - \pgfpointdiff{\pgfpointanchor{#2}{center}} - {\pgfpointanchor{#3}{center}}} - \pgf@xa=\pgf@x\relax% - \pgf@ya=\pgf@y\relax% - \edef\tkz@x{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@xa}} - \edef\tkz@y{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@ya}} - \pgfinterruptboundingbox - \path (\tkz@frompoint)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -}% -%<--------------------------------------------------------------------------–> -% VecKCoLinear CN = K x AB #1 pt #2 pt #3 pt #4 nb #5 pt result -% il faut modifier cette macro : on supprime #3 pour la colinéarité -% Il suffit d'utiliser Replicate ou Duplicate coeff dans #1 -% v(CD)=#1 x v(AB) #1 le coeff; #2-->A #3-->B #4-->C -%<--------------------------------------------------------------------------–> -\def\tkz@VecKCoLinear[#1](#2,#3,#4){% -\begingroup - \pgfpointdiff{\pgfpointanchor{#2}{center}}% - {\pgfpointanchor{#3}{center}}% - \pgf@xa=\pgf@x\relax% - \pgf@ya=\pgf@y\relax% - \edef\tkz@coeff{\fpeval{#1}} - \pgfinterruptboundingbox - \path (#4)--+(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -}% -\def\tkz@VecCoLinear(#1,#2,#3){% -\begingroup - \pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% - \pgf@xa=\pgf@x\relax% - \pgf@ya=\pgf@y\relax% - \pgfinterruptboundingbox - \path (#3)--+(\pgf@xa,\pgf@ya) coordinate (tkzPointResult); - \endpgfinterruptboundingbox -\endgroup -}% -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex deleted file mode 100644 index 936955cba0..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex +++ /dev/null @@ -1,166 +0,0 @@ - % tkz-obj-lua-points.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. - -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-lua-points.tex} -\makeatletter -%<---------------------------------------------------------------------------> -% init def point -%<---------------------------------------------------------------------------> -% tkzDefPoint -%<---------------------------------------------------------------------------> -% macros complémentaires pour def point -%<---------------------------------------------------------------------------> -\def\tkz@parsecoordinate#1{% -\tkz@getseparator#1,\@nil -\iftkz@polar - \tkz@getfrompolar#1\@nil -\else - \tkz@getfromcart#1\@nil -\fi -} -\def\tkz@getseparator#1,#2\@nil{% -\ifx\tkzempty#2\tkzempty% - \tkz@polartrue -\else - \tkz@polarfalse -\fi -} -\def\tkz@getfrompolar#1:#2\@nil{% -\edef\tkz@a{\fpeval{#1}} -\edef\tkz@r{\fpeval{#2}} -\xdef\tkz@polarrad{\tkz@r} -\xdef\tkz@polarangle{\tkz@a} -} -\def\tkz@getfromcart#1,#2\@nil{% -\edef\tkz@x{\fpeval{#1}} -\edef\tkz@y{\fpeval{#2}} -\xdef\tkz@absc{\tkz@x} -\xdef\tkz@ord{\tkz@y} -} -%<---------------------------------------------------------------------------> -% options pour point definition -%<---------------------------------------------------------------------------> -\pgfkeys{/tkzPt/.cd, - polar/.is if = tkz@pt@polar, - polar/.default = true, - polar = false -} -%<---------------------------------------------------------------------------> -% tkz@ptStar -%<---------------------------------------------------------------------------> -\def\tkz@ptStar[#1](#2,#3)#{% -\pgfkeys{/tkzPt/.cd, polar = false} -\pgfqkeys{/tkzPt}{#1} -\iftkz@pt@polar% - \edef\tkz@x{\fpeval{#3*cosd(#2)}} - \edef\tkz@y{\fpeval{#3*sind(#2)}} -\else - \edef\tkz@x{\fpeval{#2}} - \edef\tkz@y{\fpeval{#3}} -\fi -\edef\tkzpt@xa{\tkz@Dec{(\tkz@x-(\tkz@init@xorigine))/\tkz@init@xstep}} -\edef\tkzpt@ya{\tkz@Dec{(\tkz@y-(\tkz@init@yorigine))/\tkz@init@ystep}} -\tkz@node -} -%<---------------------------------------------------------------------------> -% la macro defpoint les coordonnées cartésiennes ou polaires sont traitées -% afin de pouvoir être adaptées avec les unités choisies -%<---------------------------------------------------------------------------> -\def\tkzDefPoint{\pgfutil@ifnextchar[{\tkz@DefPoint}{\tkz@DefPoint[]}} - -\def\tkz@DefPoint[#1](#2)#{% -\tkz@parsecoordinate{#2} -\iftkz@polar - \tkz@ptStar[polar](\tkz@polarangle,\tkz@polarrad){tkz@coord@temp} -\else - \tkz@ptStar[](#2){tkz@coord@temp} -\fi -\tkz@DefPointEnd[#1] -}% -\def\tkz@DefPointEnd[#1]#2{\coordinate[#1] (#2) at (tkz@coord@temp);} -%<---------------------------------------------------------------------------> -% tkzDefPoints -%<---------------------------------------------------------------------------> -\def\tkzDefPoints{\pgfutil@ifnextchar[{\tkz@DefPoints}{\tkz@DefPoints[]}} -\def\tkz@DefPoints[#1]#2{% - \begingroup - \def\tkz@parenthesis@for@err{(}% - \def\tkz@maybe@parenthesis{#2}% - \ifx\tkz@maybe@parenthesis\tkz@parenthesis@for@err - \PackageError{tkz-base}{Syntax error use {} instead of ()}{You need to use {} instead of ()}% - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\tkz@absorb@bad@arg}% - {\foreach \ptx/\pty/\name in {#2}{\tkzDefPoint[#1](\ptx,\pty){\name}}% - \endgroup}% -} -\def\tkz@absorb@bad@arg#1){\endgroup} -%<---------------------------------------------------------------------------> -\def\tkz@node#1{ \pgfinterruptboundingbox -\path[coordinate](\tkzpt@xa,\tkzpt@ya) coordinate(#1); - \endpgfinterruptboundingbox} -%<---------------------------------------------------------------------------> -\def\tkzRenamePoint(#1)#2{\coordinate (#2) at (#1);} -\def\tkz@RenamePointEnd[#1]#2{\coordinate[#1] (#2) at (\tkz@ax,\tkz@ay);} -\def\tkzGetPoint#1{\coordinate (#1) at (tkzPointResult);} -\def\tkzGetPoints#1#2{\coordinate (#1) at (tkzFirstPointResult); - \coordinate (#2) at (tkzSecondPointResult);} -\def\tkzGetFirstPoint#1{\coordinate (#1) at (tkzFirstPointResult);} -\def\tkzGetSecondPoint#1{\coordinate (#1) at (tkzSecondPointResult);} -\def\tkzGetThirdPoint#1{\coordinate (#1) at (tkzThirdPointResult);} -\def\tkzDefShiftPointCoord[#1](#2)#3{% - \begin{scope}[shift={(#1)}] - \coordinate (#3) at (#2); - \end{scope} - }% -%<--------------------------------------------------------------------------–> -%<---------------------------------------------------------------------------> -% tkzDefShiftPoint -%<---------------------------------------------------------------------------> -\def\tkzDefShiftPoint[#1](#2)#3{% - \tkz@@extractxy{#1} - \tkz@ax\pgf@x % - \tkz@ay\pgf@y % -\begin{scope}[shift={(\tkz@ax,\tkz@ay)}] - \coordinate (#3) at (#2); -\end{scope} -} -%<---------------------------------------------------------------------------> -% Coordonnées d'un point -% result in #2x et #2y #1 est le point et on récupère ses coordonnées -% usage soit A un point \tkzGetPointCoord(A){V} alors \Vx = xA et \Vy = yA -% en cm -% tkzGetPointCoord avec [#1] cm ou bien pt ?? todo -%<---------------------------------------------------------------------------> -\def\tkzGetPointCoord(#1)#2{% -\begingroup - \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} - \pgfmathparse{\pgf@sys@tonumber{\pgf@x}/28.45274} - \global\let\tkzresultx\pgfmathresult - \global\expandafter\edef\csname #2x\endcsname{\tkzresultx}% - \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} - \pgfmathparse{\pgf@sys@tonumber{\pgf@y}/28.45274} - \global\let\tkzresulty\pgfmathresult - \global\expandafter\edef\csname #2y\endcsname{\tkzresulty} -\endgroup -} -\def\tkz@@extractxy#1{% -\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} -} -\let\tkzGetPointxy\tkzGetPointCoord -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex index 2505134139..1684d3b5cd 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-axesmin} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-axesmin} \makeatletter \def\removedot#1.{#1} diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex index f74d9b8b98..05b66f6f10 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-circles.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-circles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzCircle center and one point diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex index 7ddc7036d4..2f57f39d16 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-circles.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-circles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzCircle center and one point diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex index ca51a16e94..e09d0b5b53 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-grids.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-grids.tex} \makeatletter %<--------------------------------------------------------------------------–> % Setup Grid diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex index beb9b6dbb6..31bcc0d577 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-lines.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-lines.tex} \makeatletter %<--------------------------------------------------------------------------–> % les lignes diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex index dc4eac8267..b23f431925 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-points-by.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-points-by.tex} \makeatletter %<--------------------------------------------------------------------------–> % Transformations Géométriques diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex index 63cd1dc1a8..838d573ff2 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-points-rnd.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-points-rnd.tex} %<--------------------------------------------------------------------------–> \makeatletter %<-------------------------------------------------------------------------–> diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex index 38693d87f5..ac65123719 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-el-points.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-el-points.tex} \makeatletter %add ExCenter %<--------------------------------------------------------------------------–> diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex index 370a5a3e4d..9d73a8316f 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-points-with.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-points-with.tex} \makeatletter %<--------------------------------------------------------------------------–> % Vectors diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex index 3b3b5fe730..70e6c0702a 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-points.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-points.tex} \makeatletter %<---------------------------------------------------------------------------> % init def point diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex index 7600ce7925..6bdf499aa6 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-polygons.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-polygons.tex} % bug in regular polygon side 2020/03/09 \makeatletter %<--------------------------------------------------------------------------–> diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex index 2faf7a305d..0312eaca5d 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-triangles.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-triangles.tex} \makeatletter %<--------------------------------------------------------------------------–> % Triangle Equilateral diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg index 3fa2cfe477..b62312367e 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg @@ -16,9 +16,9 @@ % and save the file in a directory part of your TEXINPUTS environment % variable. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-euclide.cfg} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-euclide.cfg} %<------ colors ---------------------------------------–> \def\tkz@backgroundcolor{white} \def\tkz@textcolor{black} diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty index 508cf3a9c9..8c8208f98a 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty @@ -10,11 +10,11 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. %------------------------------------------------------------------------------- -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-euclide.sty} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-euclide.sty} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{tkz-euclide}[ 2023/10/20 5.03c for pure Euclidean Geometry ] +\ProvidesPackage{tkz-euclide}[ 2023/10/26 5.04c for pure Euclidean Geometry ] \newif\if@tkzlua \@tkzluafalse \DeclareOption{lua}{\@tkzluatrue} @@ -180,16 +180,16 @@ % % next from euclide \makeatletter \if@tkzlua -\input{tkz-tools-lua-base.tex} -\input{tkz-obj-lua-points.tex} -\input{tkz-tools-lua-math.tex} -\input{tkz-tools-lua-intersections.tex} -\input{tkz-obj-lua-points-by.tex} -\input{tkz-obj-lua-points-with.tex} -\input{tkz-obj-lua-points-spc.tex} -\input{tkz-tools-lua-angles.tex} -\input{tkz-obj-lua-circles.tex} -\input{tkz-obj-lua-circles-by.tex} +\input{tkz-tools-eu-lua-base.tex} +\input{tkz-obj-eu-lua-points.tex} +\input{tkz-tools-eu-lua-math.tex} +\input{tkz-tools-eu-lua-intersections.tex} +\input{tkz-obj-eu-lua-points-by.tex} +\input{tkz-obj-eu-lua-points-with.tex} +\input{tkz-obj-eu-lua-points-spc.tex} +\input{tkz-tools-eu-lua-angles.tex} +\input{tkz-obj-eu-lua-circles.tex} +\input{tkz-obj-eu-lua-circles-by.tex} \else \input{tkz-obj-eu-points.tex} \input{tkz-obj-eu-points-by.tex} diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex new file mode 100644 index 0000000000..e5c9d373c6 --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex @@ -0,0 +1,102 @@ +% tkz-tools-lua-angles.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. + +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-lua-angles.tex} +\makeatletter +\def\tkzmathrotatepointaround#1#2#3{% + \pgf@process{% + \pgf@process{#1}% + \pgf@xc=\pgf@x% + \pgf@yc=\pgf@y% + \pgf@process{#2}% + \pgf@xa\pgf@x% + \pgf@ya\pgf@y% + \pgf@xb\pgf@x% + \pgf@yb\pgf@y% + \pgf@x=\pgf@xc% + \pgf@y=\pgf@yc% + \advance\pgf@x-\pgf@xa% + \advance\pgf@y-\pgf@ya% + \pgfmathsetmacro\angle{#3}% + \edef\sineangle{\tkz@Dec{\tkz@Sin{\tkz@Rad{\angle}}}}% + \edef\cosineangle{\tkz@Dec{\tkz@Cos{\tkz@Rad{\angle}}}}% + \pgf@xa\cosineangle\pgf@x% + \advance\pgf@xa-\sineangle\pgf@y% + \pgf@ya\sineangle\pgf@x% + \advance\pgf@ya\cosineangle\pgf@y% + \pgf@x\pgf@xb% + \pgf@y\pgf@yb% + \advance\pgf@x\pgf@xa% + \advance\pgf@y\pgf@ya% + }% +} + +%<--------------------------------------------------------------------------> +% Angles +%<--------------------------------------------------------------------------> +\def\tkzmathanglebetweenpoints#1#2{ +\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}% +\edef\tkzax{\strip@pt\pgf@x}% +\edef\tkzay{\strip@pt\pgf@y}% +\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}% +\edef\tkzbx{\strip@pt\pgf@x}% +\edef\tkzby{\strip@pt\pgf@y}% +\edef\tkz@tmp{\tkz@Angle{\tkzax}{\tkzay}{\tkzbx}{\tkzby}} +\edef\pgfmathresult{\tkz@Dec{\tkz@Round{\tkz@tmp}{2}}} +} +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +% thanks karu : http://tex.stackexchange.com/questions/151667/tkzgetangle-strange-behavior/196224#196224 +% \tkzGetAngle strange behavior +% defines \tkz@FirstAngle and \tkz@SecondAngle sens trigo +%<--------------------------------------------------------------------------–> + +\def\tkzNormalizeAngle(#1,#2){% +\directlua{angleA, angleB = normalize(#1,#2) +token.set_macro("tkz@FirstAngle", angleA) +token.set_macro("tkz@SecondAngle", angleB) +}} +%<--------------------------------------------------------------------------–> +% Angle +% Recherche l'angle formé par #1 et #2 par rapport à l'horizontale +%<--------------------------------------------------------------------------–> +\def\tkzFindSlopeAngle(#1,#2){% +\begingroup + \tkzmathanglebetweenpoints{#1}{#2} + \global\let\tkzAngleResult\pgfmathresult +\endgroup +} +%<--------------------------------------------------------------------------–> +% Angle avec trois nodes +%<--------------------------------------------------------------------------–> +\def\tkzFindAngle(#1,#2,#3){% new code 2016 +\begingroup + \tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle} + \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle} + \tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle) + \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}} + \global\let\tkzAngleResult\tkz@Angle +\endgroup +} + +%<--------------------------------------------------------------------------–> +% Find angle +%<--------------------------------------------------------------------------–> +\def\tkzGetAngle#1{% + \global\expandafter\edef\csname #1\endcsname{\tkzAngleResult} +} +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex new file mode 100644 index 0000000000..45068a64e3 --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex @@ -0,0 +1,89 @@ +% tkz-tools-lua-base.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. + +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-lua-base.tex} +\makeatletter +%<--------------------------------------------------------------------------–> +\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016 +\global\let\tkz@tmp@xb\tkz@init@xmax% modif 2016 +\global\let\tkz@tmp@ya\tkz@init@ymin% modif 2016 +\global\let\tkz@tmp@yb\tkz@init@ymax% modif 2016 +%<--------------------------------------------------------------------------–> +\pgfkeys{ + /tkzInit/.cd, + xmin/.store in = \tkz@init@xmin, + xmax/.store in = \tkz@init@xmax, + xstep/.store in = \tkz@init@xstep, + ymin/.store in = \tkz@init@ymin, + ymax/.store in = \tkz@init@ymax, + ystep/.store in = \tkz@init@ystep, + NO/.is if = tkz@init@NO, + NO/.default = true, + xmin = 0, + xmax = 10, + xstep = 1, + ymin = 0, + ymax = 10, + ystep = 1, + NO = false + } + +\def\tkzInit{\pgfutil@ifnextchar[{\tkz@Init}{\tkz@Init[]}} +\def\tkz@Init[#1]{% + \pgfqkeys{/tkzInit}{#1} + \ifx\tkzfctloaded\undefined + \else + \tkz@tkzf@fct=0 % only if tkz-fct loaded + \fi + \xdef\tkz@init@xorigine{0} + \xdef\tkz@init@yorigine{0} + \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}} + \edef\@xsgmax{\fpeval{sign(\tkz@init@xmax)}} + \edef\@ysgmin{\fpeval{sign(\tkz@init@ymin)}} + \edef\@ysgmax{\fpeval{sign(\tkz@init@ymax)}} + \let\tkz@tmp@xa\tkz@init@xmin %modif 2016 + \let\tkz@tmp@xb\tkz@init@xmax %modif 2016 + \let\tkz@tmp@ya\tkz@init@ymin %modif 2016 + \let\tkz@tmp@yb\tkz@init@ymax %modif 2016 + \tkz@init@NOfalse + \ifx\@xsgmin\@xsgmax \tkz@init@NOtrue \fi + \ifx\@ysgmin\@ysgmax \tkz@init@NOtrue \fi + \iftkz@init@NO% + \ifx\@xsgmin\@xsgmax + \edef\tkz@init@xmax{\tkz@Dec{\tkz@init@xmax-(\tkz@init@xmin)}} + \edef\tkz@init@xorigine{\tkz@init@xmin} + \edef\tkz@init@xmin{0} + \fi + \ifx\@ysgmin\@ysgmax + \edef\tkz@init@ymax{\tkz@Dec{\tkz@init@ymax-(\tkz@init@ymin)}} + \edef\tkz@init@yorigine{\tkz@init@ymin} + \edef\tkz@init@ymin{0} + \fi + \fi + \edef\tkz@xa{\tkz@Dec{\tkz@init@xmin/\tkz@init@xstep}} + \edef\tkz@xb{\tkz@Dec{\tkz@init@xmax/\tkz@init@xstep}} + \edef\tkz@ya{\tkz@Dec{\tkz@init@ymin/\tkz@init@ystep}} + \edef\tkz@yb{\tkz@Dec{\tkz@init@ymax/\tkz@init@ystep}} + \tkz@getdecimal{\tkz@init@xstep} % amélioration nb dec et integer + \xdef\tkz@init@xdec{\number\c@pgfmath@countb} + \tkz@getdecimal{\tkz@init@ystep} + \xdef\tkz@init@ydec{\number\c@pgfmath@countb} +}% +\def\tkzAddName{\pgfutil@ifnextchar[{\tkz@AddName}{\tkz@AddName[]}} +\def\tkz@AddName[#1]#2{% +\node[above left,#1] at (\pgf@path@lastx,\pgf@path@lasty){#2}; +}% +%<--------------------------------------------------------------------------–> +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex new file mode 100644 index 0000000000..127db80eba --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex @@ -0,0 +1,525 @@ +% tkz-tools-lua-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.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-lua-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\tkzax{\strip@pt\tkz@ax}% +\edef\tkzay{\strip@pt\tkz@ay}% +\edef\tkzbx{\strip@pt\tkz@bx}% +\edef\tkzby{\strip@pt\tkz@by}% +\edef\tkzcx{\strip@pt\tkz@cx}% +\edef\tkzcy{\strip@pt\tkz@cy}% +\edef\tkzdx{\strip@pt\tkz@dx}% +\edef\tkzdy{\strip@pt\tkz@dy}% +\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}} +\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}} +\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}} +\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}} +\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}} +\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}} +\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}} +\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}} +\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}} +\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}} +\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}} +\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}} +\edef\tkz@ys{\tkz@Round{\tkz@ys}{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\tkzax{\strip@pt\tkz@ax}% +\edef\tkzay{\strip@pt\tkz@ay}% +\edef\tkzbx{\strip@pt\tkz@bx}% +\edef\tkzby{\strip@pt\tkz@by}% +\edef\tkzcx{\strip@pt\tkz@cx}% +\edef\tkzcy{\strip@pt\tkz@cy}% +\edef\tkzdx{\strip@pt\tkz@dx}% +\edef\tkzdy{\strip@pt\tkz@dy}% +\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}} +\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}} +\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}} +\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}} +\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}} +\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}} +\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}} +\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}} +\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}} +\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}} +\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}} +\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}} +\edef\tkz@ys{\tkz@Round{\tkz@ys}{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 % +\edef\tkzcax{\strip@pt\tkz@ax}% +\edef\tkzcay{\strip@pt\tkz@ay}% +\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}} +\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}} +\tkz@bx\pgf@x % +\tkz@by\pgf@y % +\edef\tkzcbx{\strip@pt\tkz@bx}% +\edef\tkzcby{\strip@pt\tkz@by}% +\tkz@cx#2cm % +\tkz@cy#4cm % +\edef\tkzccx{\strip@pt\tkz@cx}% +\edef\tkzccy{\strip@pt\tkz@cy}% +\edef\tkz@aa{\tkz@Dec{((\tkzccx+\tkzccy)/(2*\tkz@dd))*(\tkzccx-(\tkzccy))+\tkz@dd/2}} +\edef\tkz@xx{\tkz@Dec{\tkzcax+\tkz@aa/\tkz@dd*(\tkzcbx - (\tkzcax))}} +\edef\tkz@yy{\tkz@Dec{\tkzcay+\tkz@aa/\tkz@dd*(\tkzcby - (\tkzcay))}} +\path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter); +\edef\tkz@hh{\tkz@Abs{(\tkzccx+\tkz@aa)*(\tkzccx-(\tkz@aa))}} +\edef\tkz@hh{\tkz@Dec{\tkz@Sqrt{\tkz@hh}}} + \edef\tkz@rx{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcay - (\tkzcby))}} +\edef\tkz@ry{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcbx - (\tkzcax))}} +\edef\tkz@xs{\tkz@Dec{\tkz@xx + \tkz@rx}} +\edef\tkz@ys{\tkz@Dec{\tkz@yy + \tkz@ry}} +\path[coordinate](\tkz@xs pt,\tkz@ys pt) coordinate (#5); +\edef\tkz@xss{\tkz@Dec{\tkz@xx - \tkz@rx}} +\edef\tkz@yss{\tkz@Dec{\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 diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex new file mode 100644 index 0000000000..dc92fb70ca --- /dev/null +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex @@ -0,0 +1,310 @@ +% tkz-tools-lua-math.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. + +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-lua-math.tex} +\makeatletter +%<--------------------------------------------------------------------------> +%<--------------------------------------------------------------------------> +% Lengths +%<--------------------------------------------------------------------------> +%<--------------------------------------------------------------------------> + +\begin{luacode*} + function normalize(angleA,angleB) + if angleA > 0 then + if angleA > angleB then + angleA = angleA - 360 + end + else + if angleA > angleB then + angleB = angleB + 360 + end + end + return angleA, angleB + end + + function math.angle(x1, y1, x2, y2) + local a = math.deg(math.atan(y2 - y1, x2 - x1)) + if a < 0 then + return a + 360 + else + return a + end + end + + function tkzop(...) + inf = math.huge + return ... +end + +function tkzround(nb, ND) + local p = 10^(ND or 0) + return math.floor(nb * p + 0.5) / p +end +\end{luacode*} + +\def\tkz@Dec#1{% + \directlua{tex.print(string.format('\@percentchar.6f',#1))} + } +\def\tkz@Op#1{\directlua{tex.sprint(tostring(tkzop(#1)))}} +\def\tkz@Log#1{\directlua{tex.sprint(math.log(#1))}} +\def\tkz@Exp#1{\directlua{tex.sprint(math.exp(#1))}} +\def\tkz@Sqrt#1{\directlua{tex.sprint(math.sqrt(#1))}} +\def\tkz@Abs#1{\directlua{tex.sprint(math.abs(#1))}} +\def\tkz@Pi{\directlua{tex.sprint(math.pi)}} +\def\tkz@Cos#1{\directlua{tex.sprint(math.cos(#1))}} +\def\tkz@Sin#1{\directlua{tex.sprint(tostring(math.sin(#1)))}} +\def\tkz@Tan#1{\directlua{tex.sprint(math.tan(#1))}} +\def\tkz@Rad#1{\directlua{tex.sprint(math.rad(#1))}} +\def\tkz@Acos#1{\directlua{tex.sprint(math.acos(#1))}} +\def\tkz@Asin#1{\directlua{tex.sprint(math.asin(#1))}} +\def\tkz@Atan#1{\directlua{tex.sprint(math.atan(#1))}} +\def\tkz@Round#1#2{\directlua{tex.sprint(tostring(tkzround(#1,#2)))}} +\def\tkz@Angle#1#2#3#4{\directlua{tex.sprint(math.angle(#1,#2,#3,#4))}} +\def\tkz@Ceil#1{\directlua{tex.sprint(math.ceil(#1))}} +\def\tkz@Floor#1{\directlua{tex.sprint(math.floor(#1))}} +\def\tkz@Huge{\directlua{tex.sprint(math.huge)}} +\def\tkz@Max#1{\directlua{tex.sprint(math.max(#1))}} +\def\tkz@Min#1{\directlua{tex.sprint(math.min(#1))}} +\def\tkz@Random#1{\directlua{tex.sprint(math.random(#1))}} +\def\tkz@veclen#1#2{% + \directlua{% + tex.print(string.format('\@percentchar.6f',math.sqrt((#1)^2+(#2)^2)))% + }% +} +\let\tkzSqrt\tkz@Sqrt +\let\tkzPi\tkz@Pi +\let\tkzExp\tkz@Exp +\let\tkzLog\tkz@Log +\let\tkzSin\tkz@Sin +\let\tkzCos\tkz@Cos + +% \tkzpointnormalised normalise un point A-->A' tq ||v(OA')=1|| +% example +% \tkzpointnormalised{% +% \pgfpointdiff{\pgfpointanchor{A}{center}} +% {\pgfpointanchor{B}{center}}} + +% or +% \pgf@x=1 cm +% \pgf@y=12 cm +% \tkzpointnormalised{} +%<-------------------------------------------------------------------------- +\def\tkzpointnormalised#1{% +\pgf@process{#1}% +\pgf@xa=\pgf@x% +\pgf@ya=\pgf@y% +\edef\tkz@temp@xa{\strip@pt\pgf@xa}% +\edef\tkz@temp@ya{\strip@pt\pgf@ya}% +\edef\tkz@den{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}} +\edef\tkz@coordx{\tkz@Op{\tkz@temp@xa/\tkz@den}} +\edef\tkz@coordx{\tkz@Dec{\tkz@Round{\tkz@coordx}{5}}} +\edef\tkz@coordy{\tkz@Op{\tkz@temp@ya/\tkz@den}} +\edef\tkz@coordy{\tkz@Dec{\tkz@Round{\tkz@coordy}{5}}} +\pgf@x = \tkz@coordx pt +\pgf@y = \tkz@coordy pt +} +%\def\tkz@Dec#1{\directlua{tex.print(string.format('\@percentchar.12f',#1))}} +%<--------------------------------------------------------------------------> +% restaure and save length +\def\tkz@save@length{\global\let\tkz@temp@length\tkzLengthResult}% +\def\tkz@restore@length{\global\let\tkzLengthResult\tkz@temp@length }% +%<--------------------------------------------------------------------------> +% \tkzCalcLength Distance entre deux points en pt ou en cm avec xfp +% \veclen mais avec fp +% option cm le résultat est en cm sinon en pt with cm=false +%<--------------------------------------------------------------------------> +\pgfkeys{tkzcalclen/.cd, + cm/.is if = tkzLengthIncm, + cm/.default = true, + cm = true} + +\def\tkzCalcLength{\pgfutil@ifnextchar[{\tkz@CalcLength}{\tkz@CalcLength[]}} +\def\tkz@CalcLength[#1](#2,#3){% +\pgfqkeys{/tkzcalclen}{#1}% +\begingroup +\tkz@@CalcLength(#2,#3){tkzLengthResult} +\iftkzLengthIncm + \edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkzLengthResult/28.45274}{6}}} + \global\let\tkzLengthResult\tkz@xfpMathLen +\fi +\endgroup +}% + +\def\tkz@@CalcLength(#1,#2)#3{% +\pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% +\edef\tkz@xa{\strip@pt\pgf@x}% +\edef\tkz@ya{\strip@pt\pgf@y}% +\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}} +\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen} +} + +\def\tkz@@CalcLengthcm(#1,#2)#3{% +\pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% +\edef\tkz@xa{\strip@pt\pgf@x}% +\edef\tkz@ya{\strip@pt\pgf@y}% +\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}} +\edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkz@xfpMathLen/28.45274}{6}}} +\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen} +} +\def\tkz@@CalcLengthb(#1,#2)#3{% +\pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% +\edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}} +\edef\tkz@xfpMathLen{\fpeval{round(\tkz@xfpMathLen,6)}} +\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen} +} +%<--------------------------------------------------------------------------> +\def\tkzGetLength#1{% +\global\expandafter\edef\csname #1\endcsname{\tkzLengthResult}} +%<--------------------------------------------------------------------------> +% \tkzpttocm passage de pt   cm div par 28.45274 +%<--------------------------------------------------------------------------> +\def\tkzpttocm(#1)#2{% +\begingroup + \edef\tkz@mathresult{\tkz@Round{#1/28.45274}{6}} + \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}% +\endgroup +}% +%<--------------------------------------------------------------------------> +% \tkzcmtopt passage de cm   pt mul par 28.45274 +%<-------------------------------------------------------------------------- +\def\tkzcmtopt(#1)#2{% +\begingroup + \edef\tkz@mathresult{\tkz@Round{#1*28.45274}{6}} + \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}% +\endgroup +}% +%<---------------------------------------------------------–> + \def\tkzGetResult#1{% + \global\expandafter\edef\csname #1\endcsname{\tkzMathResult}} +%<---------------------------------------------------------–> +% Schrodinger's cat idea 03/01/20 +\tikzset{veclen/.code={% +\pgfmathdeclarefunction*{veclen}{2}{% +\begingroup% + \pgfmath@x##1pt\relax% + \pgfmath@y##2pt\relax% + \pgf@xa=\pgf@x% + \pgf@ya=\pgf@y% + \edef\tkz@temp@xa{\strip@pt\pgf@xa}% + \edef\tkz@temp@ya{\strip@pt\pgf@ya}% + \edef\tkz@xfpMathLen{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}}% + \pgfmath@returnone\tkz@xfpMathLen pt% +\endgroup% +}}}% +%<---------------------------------------------------------–> +\def\tkzSwapPoints(#1,#2){ + \pgfnodealias{tkzPointTmp}{#2} + \pgfnodealias{#2}{#1} + \pgfnodealias{#1}{tkzPointTmp}} +%<---------------------------------------------------------–> +\def\tkzPermute(#1,#2,#3){ + \tkzURotateWithNodes(#1,#3,#2)(#3) \tkzGetPoint{tkzpt} + \tkzURotateWithNodes(#1,#2,#3)(#2) \tkzGetPoint{#2} + \tkzSwapPoints(tkzpt,#3) +} +%<---------------------------------------------------------–> +\def\tkzDotProduct(#1,#2,#3){% +\begingroup +\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}% +\edef\tkzax{\strip@pt\pgf@x}% +\edef\tkzay{\strip@pt\pgf@y}% +\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}% +\edef\tkzbx{\strip@pt\pgf@x}% +\edef\tkzby{\strip@pt\pgf@y}% +\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}% +\edef\tkzcx{\strip@pt\pgf@x}% +\edef\tkzcy{\strip@pt\pgf@y}% +\edef\tkz@tmp{\tkz@Dec{\tkz@Round{((\tkzbx-(\tkzax))*(\tkzcx-(\tkzax))+(\tkzby-(\tkzay))*(\tkzcy-(\tkzay)))/809.55841}{6}}} +\global\let\tkzMathResult\tkz@tmp +\endgroup +} + +% #1,#2 and #3 aligned +\def\tkzIsLinear(#1,#2,#3){% +\begingroup +\tkz@@CalcLengthcm(#1,#2){tkz@la} +\tkz@@CalcLengthcm(#1,#3){tkz@lb} +\tkzDotProduct(#1,#2,#3) +\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}-(\tkz@la)*(\tkz@lb)}} +\ifdim \tkzResult pt < 0.01 pt\relax% +\global\tkzLineartrue +\else +\global\tkzLinearfalse +\fi +\endgroup +} +%<---------------------------------------------------------–> +% syntax : vec(#2,#1) ortho vec(#3,#1) +\def\tkzIsOrtho(#1,#2,#3){% +\begingroup +\tkzDotProduct(#1,#2,#3) +\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}}} +\ifdim \tkzResult pt < 1 pt\relax% +\global\tkzOrthotrue +\else +\global\tkzOrthofalse +\fi +\endgroup +} +%<---------------------------------------------------------–> +% \tkzPowerCircle(M)(O,A) --> OM^2-OA^2 +\def\tkzPowerCircle(#1)(#2,#3){% +\begingroup +\tkz@@CalcLengthcm(#2,#3){tkz@ra} +\tkz@@CalcLengthcm(#1,#2){tkz@om} +\gdef\tkzMathResult{\tkz@Dec{(\tkz@om)^2-(\tkz@ra)^2}} +\endgroup +} +%<---------------------------------------------------------–> +\def\tkzDefRadicalAxis(#1,#2)(#3,#4){% +\begingroup +\tkz@@CalcLengthcm(#1,#3){tkz@d} +\tkz@@CalcLengthcm(#1,#2){tkz@ra} +\tkz@@CalcLengthcm(#3,#4){tkz@rb} +\edef\tkzMathResult{\tkz@Dec{\tkz@d-(\tkz@ra+\tkz@rb)}} +\edef\tkzMathResultb{\tkz@Dec{\tkz@Abs{(\tkz@d-(\tkz@ra+\tkz@rb))}}} +\edef\tkzMathResultc{\tkz@Dec{\tkz@Abs{\tkz@d-\tkz@Abs{(\tkz@ra-(\tkz@rb))}}}} +\ifdim \tkzMathResultc pt < 0.1 pt\relax% + \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult} + \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult} +\else +\ifdim \tkzMathResultb pt < 0.1 pt\relax% + \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult} + \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult} + \else +\ifdim \tkzMathResult pt > 1 pt\relax% + \tkzURotateAngle(#1,60)(#3) \tkzGetPoint{tkz@aux} + \tkzInterCC(#1,#2)(tkz@aux,#1) \tkzGetPoints{tkz@pta}{tkz@ptb} + \tkzInterCC(#3,#4)(tkz@aux,#1) \tkzGetPoints{tkz@ptc}{tkz@ptd} + \tkzInterLL(tkz@pta,tkz@ptb)(tkz@ptc,tkz@ptd) \tkzGetPoint{tkz@pta} + \tkzUProjection(#1,#3)(tkz@pta) \tkzGetPoint{tkz@ptb} + \pgfnodealias{tkzSecondPointResult}{tkz@ptb} + \pgfnodealias{tkzFirstPointResult}{tkz@pta} +\else +\tkzInterCCR(#1,\tkz@ra)(#3,\tkz@rb){tkzFirstPointResult}{tkzSecondPointResult} +\fi +\fi +\fi +\endgroup +} + +\makeatother +\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex deleted file mode 100644 index c104de0808..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex +++ /dev/null @@ -1,102 +0,0 @@ -% tkz-tools-lua-angles.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. - -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-lua-angles.tex} -\makeatletter -\def\tkzmathrotatepointaround#1#2#3{% - \pgf@process{% - \pgf@process{#1}% - \pgf@xc=\pgf@x% - \pgf@yc=\pgf@y% - \pgf@process{#2}% - \pgf@xa\pgf@x% - \pgf@ya\pgf@y% - \pgf@xb\pgf@x% - \pgf@yb\pgf@y% - \pgf@x=\pgf@xc% - \pgf@y=\pgf@yc% - \advance\pgf@x-\pgf@xa% - \advance\pgf@y-\pgf@ya% - \pgfmathsetmacro\angle{#3}% - \edef\sineangle{\tkz@Dec{\tkz@Sin{\tkz@Rad{\angle}}}}% - \edef\cosineangle{\tkz@Dec{\tkz@Cos{\tkz@Rad{\angle}}}}% - \pgf@xa\cosineangle\pgf@x% - \advance\pgf@xa-\sineangle\pgf@y% - \pgf@ya\sineangle\pgf@x% - \advance\pgf@ya\cosineangle\pgf@y% - \pgf@x\pgf@xb% - \pgf@y\pgf@yb% - \advance\pgf@x\pgf@xa% - \advance\pgf@y\pgf@ya% - }% -} - -%<--------------------------------------------------------------------------> -% Angles -%<--------------------------------------------------------------------------> -\def\tkzmathanglebetweenpoints#1#2{ -\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}% -\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}% -\edef\tkzax{\strip@pt\pgf@x}% -\edef\tkzay{\strip@pt\pgf@y}% -\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}% -\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}% -\edef\tkzbx{\strip@pt\pgf@x}% -\edef\tkzby{\strip@pt\pgf@y}% -\edef\tkz@tmp{\tkz@Angle{\tkzax}{\tkzay}{\tkzbx}{\tkzby}} -\edef\pgfmathresult{\tkz@Dec{\tkz@Round{\tkz@tmp}{2}}} -} -%<--------------------------------------------------------------------------–> -%<--------------------------------------------------------------------------–> -% thanks karu : http://tex.stackexchange.com/questions/151667/tkzgetangle-strange-behavior/196224#196224 -% \tkzGetAngle strange behavior -% defines \tkz@FirstAngle and \tkz@SecondAngle sens trigo -%<--------------------------------------------------------------------------–> - -\def\tkzNormalizeAngle(#1,#2){% -\directlua{angleA, angleB = normalize(#1,#2) -token.set_macro("tkz@FirstAngle", angleA) -token.set_macro("tkz@SecondAngle", angleB) -}} -%<--------------------------------------------------------------------------–> -% Angle -% Recherche l'angle formé par #1 et #2 par rapport à l'horizontale -%<--------------------------------------------------------------------------–> -\def\tkzFindSlopeAngle(#1,#2){% -\begingroup - \tkzmathanglebetweenpoints{#1}{#2} - \global\let\tkzAngleResult\pgfmathresult -\endgroup -} -%<--------------------------------------------------------------------------–> -% Angle avec trois nodes -%<--------------------------------------------------------------------------–> -\def\tkzFindAngle(#1,#2,#3){% new code 2016 -\begingroup - \tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle} - \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle} - \tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle) - \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}} - \global\let\tkzAngleResult\tkz@Angle -\endgroup -} - -%<--------------------------------------------------------------------------–> -% Find angle -%<--------------------------------------------------------------------------–> -\def\tkzGetAngle#1{% - \global\expandafter\edef\csname #1\endcsname{\tkzAngleResult} -} -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex deleted file mode 100644 index c2dc0b146b..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex +++ /dev/null @@ -1,89 +0,0 @@ -% tkz-tools-lua-base.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. - -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-lua-base.tex} -\makeatletter -%<--------------------------------------------------------------------------–> -\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016 -\global\let\tkz@tmp@xb\tkz@init@xmax% modif 2016 -\global\let\tkz@tmp@ya\tkz@init@ymin% modif 2016 -\global\let\tkz@tmp@yb\tkz@init@ymax% modif 2016 -%<--------------------------------------------------------------------------–> -\pgfkeys{ - /tkzInit/.cd, - xmin/.store in = \tkz@init@xmin, - xmax/.store in = \tkz@init@xmax, - xstep/.store in = \tkz@init@xstep, - ymin/.store in = \tkz@init@ymin, - ymax/.store in = \tkz@init@ymax, - ystep/.store in = \tkz@init@ystep, - NO/.is if = tkz@init@NO, - NO/.default = true, - xmin = 0, - xmax = 10, - xstep = 1, - ymin = 0, - ymax = 10, - ystep = 1, - NO = false - } - -\def\tkzInit{\pgfutil@ifnextchar[{\tkz@Init}{\tkz@Init[]}} -\def\tkz@Init[#1]{% - \pgfqkeys{/tkzInit}{#1} - \ifx\tkzfctloaded\undefined - \else - \tkz@tkzf@fct=0 % only if tkz-fct loaded - \fi - \xdef\tkz@init@xorigine{0} - \xdef\tkz@init@yorigine{0} - \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}} - \edef\@xsgmax{\fpeval{sign(\tkz@init@xmax)}} - \edef\@ysgmin{\fpeval{sign(\tkz@init@ymin)}} - \edef\@ysgmax{\fpeval{sign(\tkz@init@ymax)}} - \let\tkz@tmp@xa\tkz@init@xmin %modif 2016 - \let\tkz@tmp@xb\tkz@init@xmax %modif 2016 - \let\tkz@tmp@ya\tkz@init@ymin %modif 2016 - \let\tkz@tmp@yb\tkz@init@ymax %modif 2016 - \tkz@init@NOfalse - \ifx\@xsgmin\@xsgmax \tkz@init@NOtrue \fi - \ifx\@ysgmin\@ysgmax \tkz@init@NOtrue \fi - \iftkz@init@NO% - \ifx\@xsgmin\@xsgmax - \edef\tkz@init@xmax{\tkz@Dec{\tkz@init@xmax-(\tkz@init@xmin)}} - \edef\tkz@init@xorigine{\tkz@init@xmin} - \edef\tkz@init@xmin{0} - \fi - \ifx\@ysgmin\@ysgmax - \edef\tkz@init@ymax{\tkz@Dec{\tkz@init@ymax-(\tkz@init@ymin)}} - \edef\tkz@init@yorigine{\tkz@init@ymin} - \edef\tkz@init@ymin{0} - \fi - \fi - \edef\tkz@xa{\tkz@Dec{\tkz@init@xmin/\tkz@init@xstep}} - \edef\tkz@xb{\tkz@Dec{\tkz@init@xmax/\tkz@init@xstep}} - \edef\tkz@ya{\tkz@Dec{\tkz@init@ymin/\tkz@init@ystep}} - \edef\tkz@yb{\tkz@Dec{\tkz@init@ymax/\tkz@init@ystep}} - \tkz@getdecimal{\tkz@init@xstep} % amélioration nb dec et integer - \xdef\tkz@init@xdec{\number\c@pgfmath@countb} - \tkz@getdecimal{\tkz@init@ystep} - \xdef\tkz@init@ydec{\number\c@pgfmath@countb} -}% -\def\tkzAddName{\pgfutil@ifnextchar[{\tkz@AddName}{\tkz@AddName[]}} -\def\tkz@AddName[#1]#2{% -\node[above left,#1] at (\pgf@path@lastx,\pgf@path@lasty){#2}; -}% -%<--------------------------------------------------------------------------–> -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex deleted file mode 100644 index 1632ee208b..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex +++ /dev/null @@ -1,525 +0,0 @@ -% tkz-tools-lua-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.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-lua-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\tkzax{\strip@pt\tkz@ax}% -\edef\tkzay{\strip@pt\tkz@ay}% -\edef\tkzbx{\strip@pt\tkz@bx}% -\edef\tkzby{\strip@pt\tkz@by}% -\edef\tkzcx{\strip@pt\tkz@cx}% -\edef\tkzcy{\strip@pt\tkz@cy}% -\edef\tkzdx{\strip@pt\tkz@dx}% -\edef\tkzdy{\strip@pt\tkz@dy}% -\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}} -\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}} -\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}} -\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}} -\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}} -\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}} -\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}} -\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}} -\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}} -\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}} -\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}} -\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}} -\edef\tkz@ys{\tkz@Round{\tkz@ys}{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\tkzax{\strip@pt\tkz@ax}% -\edef\tkzay{\strip@pt\tkz@ay}% -\edef\tkzbx{\strip@pt\tkz@bx}% -\edef\tkzby{\strip@pt\tkz@by}% -\edef\tkzcx{\strip@pt\tkz@cx}% -\edef\tkzcy{\strip@pt\tkz@cy}% -\edef\tkzdx{\strip@pt\tkz@dx}% -\edef\tkzdy{\strip@pt\tkz@dy}% -\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}} -\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}} -\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}} -\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}} -\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}} -\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}} -\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}} -\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}} -\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}} -\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}} -\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}} -\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}} -\edef\tkz@ys{\tkz@Round{\tkz@ys}{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 % -\edef\tkzcax{\strip@pt\tkz@ax}% -\edef\tkzcay{\strip@pt\tkz@ay}% -\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}} -\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}} -\tkz@bx\pgf@x % -\tkz@by\pgf@y % -\edef\tkzcbx{\strip@pt\tkz@bx}% -\edef\tkzcby{\strip@pt\tkz@by}% -\tkz@cx#2cm % -\tkz@cy#4cm % -\edef\tkzccx{\strip@pt\tkz@cx}% -\edef\tkzccy{\strip@pt\tkz@cy}% -\edef\tkz@aa{\tkz@Dec{((\tkzccx+\tkzccy)/(2*\tkz@dd))*(\tkzccx-(\tkzccy))+\tkz@dd/2}} -\edef\tkz@xx{\tkz@Dec{\tkzcax+\tkz@aa/\tkz@dd*(\tkzcbx - (\tkzcax))}} -\edef\tkz@yy{\tkz@Dec{\tkzcay+\tkz@aa/\tkz@dd*(\tkzcby - (\tkzcay))}} -\path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter); -\edef\tkz@hh{\tkz@Abs{(\tkzccx+\tkz@aa)*(\tkzccx-(\tkz@aa))}} -\edef\tkz@hh{\tkz@Dec{\tkz@Sqrt{\tkz@hh}}} - \edef\tkz@rx{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcay - (\tkzcby))}} -\edef\tkz@ry{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcbx - (\tkzcax))}} -\edef\tkz@xs{\tkz@Dec{\tkz@xx + \tkz@rx}} -\edef\tkz@ys{\tkz@Dec{\tkz@yy + \tkz@ry}} -\path[coordinate](\tkz@xs pt,\tkz@ys pt) coordinate (#5); -\edef\tkz@xss{\tkz@Dec{\tkz@xx - \tkz@rx}} -\edef\tkz@yss{\tkz@Dec{\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 diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex deleted file mode 100644 index f7509fb217..0000000000 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex +++ /dev/null @@ -1,310 +0,0 @@ -% tkz-tools-lua-math.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. - -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-lua-math.tex} -\makeatletter -%<--------------------------------------------------------------------------> -%<--------------------------------------------------------------------------> -% Lengths -%<--------------------------------------------------------------------------> -%<--------------------------------------------------------------------------> - -\begin{luacode*} - function normalize(angleA,angleB) - if angleA > 0 then - if angleA > angleB then - angleA = angleA - 360 - end - else - if angleA > angleB then - angleB = angleB + 360 - end - end - return angleA, angleB - end - - function math.angle(x1, y1, x2, y2) - local a = math.deg(math.atan(y2 - y1, x2 - x1)) - if a < 0 then - return a + 360 - else - return a - end - end - - function tkzop(...) - inf = math.huge - return ... -end - -function tkzround(nb, ND) - local p = 10^(ND or 0) - return math.floor(nb * p + 0.5) / p -end -\end{luacode*} - -\def\tkz@Dec#1{% - \directlua{tex.print(string.format('\@percentchar.6f',#1))} - } -\def\tkz@Op#1{\directlua{tex.sprint(tostring(tkzop(#1)))}} -\def\tkz@Log#1{\directlua{tex.sprint(math.log(#1))}} -\def\tkz@Exp#1{\directlua{tex.sprint(math.exp(#1))}} -\def\tkz@Sqrt#1{\directlua{tex.sprint(math.sqrt(#1))}} -\def\tkz@Abs#1{\directlua{tex.sprint(math.abs(#1))}} -\def\tkz@Pi{\directlua{tex.sprint(math.pi)}} -\def\tkz@Cos#1{\directlua{tex.sprint(math.cos(#1))}} -\def\tkz@Sin#1{\directlua{tex.sprint(tostring(math.sin(#1)))}} -\def\tkz@Tan#1{\directlua{tex.sprint(math.tan(#1))}} -\def\tkz@Rad#1{\directlua{tex.sprint(math.rad(#1))}} -\def\tkz@Acos#1{\directlua{tex.sprint(math.acos(#1))}} -\def\tkz@Asin#1{\directlua{tex.sprint(math.asin(#1))}} -\def\tkz@Atan#1{\directlua{tex.sprint(math.atan(#1))}} -\def\tkz@Round#1#2{\directlua{tex.sprint(tostring(tkzround(#1,#2)))}} -\def\tkz@Angle#1#2#3#4{\directlua{tex.sprint(math.angle(#1,#2,#3,#4))}} -\def\tkz@Ceil#1{\directlua{tex.sprint(math.ceil(#1))}} -\def\tkz@Floor#1{\directlua{tex.sprint(math.floor(#1))}} -\def\tkz@Huge{\directlua{tex.sprint(math.huge)}} -\def\tkz@Max#1{\directlua{tex.sprint(math.max(#1))}} -\def\tkz@Min#1{\directlua{tex.sprint(math.min(#1))}} -\def\tkz@Random#1{\directlua{tex.sprint(math.random(#1))}} -\def\tkz@veclen#1#2{% - \directlua{% - tex.print(string.format('\@percentchar.6f',math.sqrt((#1)^2+(#2)^2)))% - }% -} -\let\tkzSqrt\tkz@Sqrt -\let\tkzPi\tkz@Pi -\let\tkzExp\tkz@Exp -\let\tkzLog\tkz@Log -\let\tkzSin\tkz@Sin -\let\tkzCos\tkz@Cos - -% \tkzpointnormalised normalise un point A-->A' tq ||v(OA')=1|| -% example -% \tkzpointnormalised{% -% \pgfpointdiff{\pgfpointanchor{A}{center}} -% {\pgfpointanchor{B}{center}}} - -% or -% \pgf@x=1 cm -% \pgf@y=12 cm -% \tkzpointnormalised{} -%<-------------------------------------------------------------------------- -\def\tkzpointnormalised#1{% -\pgf@process{#1}% -\pgf@xa=\pgf@x% -\pgf@ya=\pgf@y% -\edef\tkz@temp@xa{\strip@pt\pgf@xa}% -\edef\tkz@temp@ya{\strip@pt\pgf@ya}% -\edef\tkz@den{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}} -\edef\tkz@coordx{\tkz@Op{\tkz@temp@xa/\tkz@den}} -\edef\tkz@coordx{\tkz@Dec{\tkz@Round{\tkz@coordx}{5}}} -\edef\tkz@coordy{\tkz@Op{\tkz@temp@ya/\tkz@den}} -\edef\tkz@coordy{\tkz@Dec{\tkz@Round{\tkz@coordy}{5}}} -\pgf@x = \tkz@coordx pt -\pgf@y = \tkz@coordy pt -} -%\def\tkz@Dec#1{\directlua{tex.print(string.format('\@percentchar.12f',#1))}} -%<--------------------------------------------------------------------------> -% restaure and save length -\def\tkz@save@length{\global\let\tkz@temp@length\tkzLengthResult}% -\def\tkz@restore@length{\global\let\tkzLengthResult\tkz@temp@length }% -%<--------------------------------------------------------------------------> -% \tkzCalcLength Distance entre deux points en pt ou en cm avec xfp -% \veclen mais avec fp -% option cm le résultat est en cm sinon en pt with cm=false -%<--------------------------------------------------------------------------> -\pgfkeys{tkzcalclen/.cd, - cm/.is if = tkzLengthIncm, - cm/.default = true, - cm = true} - -\def\tkzCalcLength{\pgfutil@ifnextchar[{\tkz@CalcLength}{\tkz@CalcLength[]}} -\def\tkz@CalcLength[#1](#2,#3){% -\pgfqkeys{/tkzcalclen}{#1}% -\begingroup -\tkz@@CalcLength(#2,#3){tkzLengthResult} -\iftkzLengthIncm - \edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkzLengthResult/28.45274}{6}}} - \global\let\tkzLengthResult\tkz@xfpMathLen -\fi -\endgroup -}% - -\def\tkz@@CalcLength(#1,#2)#3{% -\pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% -\edef\tkz@xa{\strip@pt\pgf@x}% -\edef\tkz@ya{\strip@pt\pgf@y}% -\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}} -\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen} -} - -\def\tkz@@CalcLengthcm(#1,#2)#3{% -\pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% -\edef\tkz@xa{\strip@pt\pgf@x}% -\edef\tkz@ya{\strip@pt\pgf@y}% -\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}} -\edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkz@xfpMathLen/28.45274}{6}}} -\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen} -} -\def\tkz@@CalcLengthb(#1,#2)#3{% -\pgfpointdiff{\pgfpointanchor{#1}{center}}% - {\pgfpointanchor{#2}{center}}% -\edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}} -\edef\tkz@xfpMathLen{\fpeval{round(\tkz@xfpMathLen,6)}} -\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen} -} -%<--------------------------------------------------------------------------> -\def\tkzGetLength#1{% -\global\expandafter\edef\csname #1\endcsname{\tkzLengthResult}} -%<--------------------------------------------------------------------------> -% \tkzpttocm passage de pt   cm div par 28.45274 -%<--------------------------------------------------------------------------> -\def\tkzpttocm(#1)#2{% -\begingroup - \edef\tkz@mathresult{\tkz@Round{#1/28.45274}{6}} - \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}% -\endgroup -}% -%<--------------------------------------------------------------------------> -% \tkzcmtopt passage de cm   pt mul par 28.45274 -%<-------------------------------------------------------------------------- -\def\tkzcmtopt(#1)#2{% -\begingroup - \edef\tkz@mathresult{\tkz@Round{#1*28.45274}{6}} - \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}% -\endgroup -}% -%<---------------------------------------------------------–> - \def\tkzGetResult#1{% - \global\expandafter\edef\csname #1\endcsname{\tkzMathResult}} -%<---------------------------------------------------------–> -% Schrodinger's cat idea 03/01/20 -\tikzset{veclen/.code={% -\pgfmathdeclarefunction*{veclen}{2}{% -\begingroup% - \pgfmath@x##1pt\relax% - \pgfmath@y##2pt\relax% - \pgf@xa=\pgf@x% - \pgf@ya=\pgf@y% - \edef\tkz@temp@xa{\strip@pt\pgf@xa}% - \edef\tkz@temp@ya{\strip@pt\pgf@ya}% - \edef\tkz@xfpMathLen{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}}% - \pgfmath@returnone\tkz@xfpMathLen pt% -\endgroup% -}}}% -%<---------------------------------------------------------–> -\def\tkzSwapPoints(#1,#2){ - \pgfnodealias{tkzPointTmp}{#2} - \pgfnodealias{#2}{#1} - \pgfnodealias{#1}{tkzPointTmp}} -%<---------------------------------------------------------–> -\def\tkzPermute(#1,#2,#3){ - \tkzURotateWithNodes(#1,#3,#2)(#3) \tkzGetPoint{tkzpt} - \tkzURotateWithNodes(#1,#2,#3)(#2) \tkzGetPoint{#2} - \tkzSwapPoints(tkzpt,#3) -} -%<---------------------------------------------------------–> -\def\tkzDotProduct(#1,#2,#3){% -\begingroup -\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}% -\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}% -\edef\tkzax{\strip@pt\pgf@x}% -\edef\tkzay{\strip@pt\pgf@y}% -\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}% -\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}% -\edef\tkzbx{\strip@pt\pgf@x}% -\edef\tkzby{\strip@pt\pgf@y}% -\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}% -\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}% -\edef\tkzcx{\strip@pt\pgf@x}% -\edef\tkzcy{\strip@pt\pgf@y}% -\edef\tkz@tmp{\tkz@Dec{\tkz@Round{((\tkzbx-(\tkzax))*(\tkzcx-(\tkzax))+(\tkzby-(\tkzay))*(\tkzcy-(\tkzay)))/809.55841}{6}}} -\global\let\tkzMathResult\tkz@tmp -\endgroup -} - -% #1,#2 and #3 aligned -\def\tkzIsLinear(#1,#2,#3){% -\begingroup -\tkz@@CalcLengthcm(#1,#2){tkz@la} -\tkz@@CalcLengthcm(#1,#3){tkz@lb} -\tkzDotProduct(#1,#2,#3) -\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}-(\tkz@la)*(\tkz@lb)}} -\ifdim \tkzResult pt < 0.01 pt\relax% -\global\tkzLineartrue -\else -\global\tkzLinearfalse -\fi -\endgroup -} -%<---------------------------------------------------------–> -% syntax : vec(#2,#1) ortho vec(#3,#1) -\def\tkzIsOrtho(#1,#2,#3){% -\begingroup -\tkzDotProduct(#1,#2,#3) -\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}}} -\ifdim \tkzResult pt < 1 pt\relax% -\global\tkzOrthotrue -\else -\global\tkzOrthofalse -\fi -\endgroup -} -%<---------------------------------------------------------–> -% \tkzPowerCircle(M)(O,A) --> OM^2-OA^2 -\def\tkzPowerCircle(#1)(#2,#3){% -\begingroup -\tkz@@CalcLengthcm(#2,#3){tkz@ra} -\tkz@@CalcLengthcm(#1,#2){tkz@om} -\gdef\tkzMathResult{\tkz@Dec{(\tkz@om)^2-(\tkz@ra)^2}} -\endgroup -} -%<---------------------------------------------------------–> -\def\tkzDefRadicalAxis(#1,#2)(#3,#4){% -\begingroup -\tkz@@CalcLengthcm(#1,#3){tkz@d} -\tkz@@CalcLengthcm(#1,#2){tkz@ra} -\tkz@@CalcLengthcm(#3,#4){tkz@rb} -\edef\tkzMathResult{\tkz@Dec{\tkz@d-(\tkz@ra+\tkz@rb)}} -\edef\tkzMathResultb{\tkz@Dec{\tkz@Abs{(\tkz@d-(\tkz@ra+\tkz@rb))}}} -\edef\tkzMathResultc{\tkz@Dec{\tkz@Abs{\tkz@d-\tkz@Abs{(\tkz@ra-(\tkz@rb))}}}} -\ifdim \tkzMathResultc pt < 0.1 pt\relax% - \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult} - \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult} -\else -\ifdim \tkzMathResultb pt < 0.1 pt\relax% - \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult} - \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult} - \else -\ifdim \tkzMathResult pt > 1 pt\relax% - \tkzURotateAngle(#1,60)(#3) \tkzGetPoint{tkz@aux} - \tkzInterCC(#1,#2)(tkz@aux,#1) \tkzGetPoints{tkz@pta}{tkz@ptb} - \tkzInterCC(#3,#4)(tkz@aux,#1) \tkzGetPoints{tkz@ptc}{tkz@ptd} - \tkzInterLL(tkz@pta,tkz@ptb)(tkz@ptc,tkz@ptd) \tkzGetPoint{tkz@pta} - \tkzUProjection(#1,#3)(tkz@pta) \tkzGetPoint{tkz@ptb} - \pgfnodealias{tkzSecondPointResult}{tkz@ptb} - \pgfnodealias{tkzFirstPointResult}{tkz@pta} -\else -\tkzInterCCR(#1,\tkz@ra)(#3,\tkz@rb){tkzFirstPointResult}{tkzSecondPointResult} -\fi -\fi -\fi -\endgroup -} - -\makeatother -\endinput \ No newline at end of file diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex index ed1fd5387e..3212c55e44 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-obj-eu-BB.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-obj-eu-BB.tex} \makeatletter %<--------------------------------------------------------------------------–> \def\tkzShowBB{\pgfutil@ifnextchar[{\tkz@ShowBB}{\tkz@ShowBB[]}} diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex index 8ba68fa57b..f32c105855 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-angles.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-angles.tex} \makeatletter %<--------------------------------------------------------------------------–> %<--------------------------------------------------------------------------–> diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex index ce0e6db135..22a7787ae6 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-base.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-base.tex} \makeatletter %<--------------------------------------------------------------------------–> \global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016 diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex index f91f7535ad..b991a2fd22 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-colors} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-colors} \makeatletter %<------ Initialisation of the colors with tkzSetUpColors -----------------> 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 index daad8f7f9d..fdab77f658 100644 --- 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 @@ -13,9 +13,9 @@ % The Current Maintainer of this work is Alain Matthes. % utf8 encoding -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-intersections.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-intersections.tex} \makeatletter %<--------------------------------------------------------------------------–> % intersection de deux lignes diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex index 701b594e52..9e39d90217 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-math.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-math.tex} \makeatletter %<--------------------------------------------------------------------------> % \tkzpointnormalised# diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex index 4b2a86591d..916b166af9 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-utilities.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-utilities.tex} \makeatletter %<------------- % chargement des modules ----------------------------------> \def\tkz@obj@all{angles,arcs,compass,defcircles,deflines,defpoints,defpointsby,defpointsrnd,defpointswith,polygons,protractor,sectors,show,triangles}% diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex index 59fce4bcb6..66dbf64bd7 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-text.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-text.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzText diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex index 27f6079312..0bf0b046a9 100644 --- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex +++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{5.03c} -\def\filedate{2023/10/20} -\typeout{2023/10/20 5.03c tkz-tools-eu-utilities.tex} +\def\fileversion{5.04c} +\def\filedate{2023/10/26} +\typeout{2023/10/26 5.04c tkz-tools-eu-utilities.tex} \makeatletter \pgfkeys{/tkzClip/.cd, space/.store in = {\tkz@CLI@space}, -- cgit v1.2.3