diff options
author | Karl Berry <karl@freefriends.org> | 2023-01-23 20:49:38 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-01-23 20:49:38 +0000 |
commit | 9dbf0a9ef83c156ec53ed1ce64cf67a1c3ba3efe (patch) | |
tree | 410040db66a29173ebab406a02ec3bafc78e578b /Master/texmf-dist/tex/latex/tkz-euclide | |
parent | ce87d3e82b1424ed0f553a02b4d5aee2f80e791e (diff) |
tkz-euclide (23jan23)
git-svn-id: svn://tug.org/texlive/trunk@65610 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tkz-euclide')
42 files changed, 2741 insertions, 386 deletions
diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-angles.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-angles.tex index 5b8f9747ba2..36764224418 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-angles.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-angles.tex @@ -1,5 +1,5 @@ % tkz-tool-eu-angles.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tool-eu-angles.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tool-eu-angles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzSetUpArc @@ -93,10 +93,10 @@ \def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}} \def\tkz@DrawArcN[#1](#2,#3)(#4){% \begingroup - \tkz@@CalcLength(#2,#3){tkz@radius} + \tkz@@CalcLengthcm(#2,#3){tkz@radius} \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle} \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle} - \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstAngle,\tkz@SecondAngle) + \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle) \endgroup } %<--------------------------------------------------------------------------–> @@ -300,35 +300,38 @@ \def\tkz@mymark{\pgfsetplotmarksize{\tkz@mksize}\pgfuseplotmark{\tkz@markang}} % draw the arcs -\begin{scope}[decoration= {markings, - mark=at position \tkz@mkpos with {\tkz@mymark}}] - \ifx\tkz@arc\tkz@arcsimple - \tkzDrawArcRAN[#1,fill=none]% - (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% - \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]% - (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle) - \else - \ifx\tkz@arc\tkz@arcdouble - \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)% - (\tkz@FirstAngle,\tkz@SecondAngle) - \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]% - (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% - \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)% - (\tkz@FirstAngle,\tkz@SecondAngle)% - \else - \ifx\tkz@arc\tkz@arctriple - \tkzDrawArcRAN[#1,fill=none]% - (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% - \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]% - (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% - \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)% - (\tkz@FirstAngle,\tkz@SecondAngle)% - \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)% - (\tkz@FirstAngle,\tkz@SecondAngle)% +\begin{scope}[veclen] + \begin{scope}[decoration= {markings, + mark=at position \tkz@mkpos with {\tkz@mymark}}] + \ifx\tkz@arc\tkz@arcsimple + \tkzDrawArcRAN[#1,fill=none]% + (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% + \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]% + (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle) + \else + \ifx\tkz@arc\tkz@arcdouble + \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)% + (\tkz@FirstAngle,\tkz@SecondAngle) + \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]% + (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% + \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)% + (\tkz@FirstAngle,\tkz@SecondAngle)% + \else + \ifx\tkz@arc\tkz@arctriple + \tkzDrawArcRAN[#1,fill=none]% + (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% + \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]% + (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)% + \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)% + (\tkz@FirstAngle,\tkz@SecondAngle)% + \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)% + (\tkz@FirstAngle,\tkz@SecondAngle)% + \fi \fi - \fi - \fi + \fi + \end{scope} \end{scope} + \endgroup } %<---------------------------------------------------------------------------> @@ -465,31 +468,31 @@ dotsize = 3 pt, /tkzrightangle/.search also={/tikz}, } -\newcommand*{\tkzMarkRightAngle}[1][]{\tkz@RightAngle[#1]} -\def\tkz@RightAngle[#1](#2,#3,#4){% +\newcommand*{\tkzMarkRightAngle}[1][]{\tkz@MarkRightAngle[#1]} +\def\tkz@MarkRightAngle[#1](#2,#3,#4){% \begingroup \normtkzcode@executetrue \pgfqkeys{/tkzrightangle}{#1} \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#3}{center}}{% - \pgfpointanchor{#2}{center}}} + \pgfpointanchor{#2}{center}}} \tkz@ax=\pgf@x\relax% - \tkz@ay=\pgf@y\relax% + \tkz@ay=\pgf@y\relax% \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#3}{center}}{% - \pgfpointanchor{#4}{center}}} + \pgfpointanchor{#4}{center}}} \tkz@bx=\pgf@x\relax% \tkz@by=\pgf@y\relax% \ifnormtkzcode@execute% - \draw[/tkzrightangle/.cd,#1] - (#3) --++( 28.45274*\tkz@ra@size\tkz@ax , 28.45274*\tkz@ra@size\tkz@ay) + \draw[/tkzrightangle/.cd,#1] + (#3) --++( 28.45274*\tkz@ra@size\tkz@ax , 28.45274*\tkz@ra@size\tkz@ay) --++( 28.45274*\tkz@ra@size\tkz@bx , 28.45274*\tkz@ra@size\tkz@by) --++(-28.45274*\tkz@ra@size\tkz@ax ,-28.45274*\tkz@ra@size\tkz@ay) - -- (#3); + -- (#3); \else% % find angles \tkzFindSlopeAngle(#3,#2)\tkzGetAngle{tkz@dirOne} \tkzFindSlopeAngle(#3,#4)\tkzGetAngle{tkz@dirTwo} \tkzNormalizeAngle(\tkz@dirOne,\tkz@dirTwo) - \edef\tkzCircleAngle{\fpeval{(\tkz@SecondAngle+\tkz@FirstAngle)/2}} + \edef\tkzCircleAngle{\fpeval{(\tkz@SecondAngle+\tkz@FirstAngle)/2}} \tkzDrawArcRAN[/tkzrightangle/.cd,#1](#3,\tkz@ra@size)% (\tkz@FirstAngle,\tkz@SecondAngle) \path (#3) --+ (\tkzCircleAngle:\tkz@ra@size/2) @@ -531,4 +534,5 @@ \endgroup } \makeatother + \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-circles.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-circles.tex index e168ae60048..8a9764d7630 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-circles.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-circles.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-draw-circles.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-draw-circles.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-draw-circles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzSetUpCircle @@ -49,6 +49,9 @@ \def\tkz@DrawCircle[#1](#2,#3){% \begingroup \node [draw,circle through=(#3), circle style,#1] at (#2) {}; +%perhaps I need to use the last method + % \tkzCalcLength(#2,#3) \tkzGetLength{tkz@ncradius} + % \draw[circle style,#1](#2) circle (\tkz@ncradius); \endgroup } %<--------------------------------------------------------------------------–> @@ -81,8 +84,8 @@ {\pgfpointanchor{#3}{center}}% \tkz@ax=\pgf@x% \tkz@ay=\pgf@y% - \path(#2)--++(-\tkz@ax,-\tkz@ay)coordinate (tkz@pt); - \tkzDrawArc[#1,delta=0](#2,#3)(tkz@pt) + \path(#2)--++(-\tkz@ax,-\tkz@ay) coordinate (tkz@pt); + \tkzDrawArc[#1,delta=0](#2,#3)(tkz@pt) \endgroup }% %<--------------------------------------------------------------------------–> diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-compass.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-compass.tex index 9798e98f4fe..76f3a888be1 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-compass.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-compass.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-compass.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-compass.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-compass.tex} \makeatletter %<--------------------------------------------------------------------------–> % Author Alain Matthes diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-lines.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-lines.tex index 8c0d448ac8c..216bc15fcb9 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-lines.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-lines.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-draw-lines.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-draw-lines.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-draw-lines.tex} \makeatletter %<--------------------------------------------------------------------------–> diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-points.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-points.tex index 4a80f44f178..eeffaecff2c 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-points.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-points.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-points.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-points.tex} \makeatletter %<---------------------------------------------------------------------------> % tkzSetUpPoint définit la forme d'un point @@ -168,5 +168,4 @@ \endgroup } \let\tkzShowPointCoord\tkzPointShowCoord -\makeatother \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-polygons.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-polygons.tex index 6b3d2246e97..a0f59a0a654 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-draw-polygons.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-polygons.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-polygons.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-polygons.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-polygons.tex} \makeatletter %<--------------------------------------------------------------------------–> % Polygon diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-protractor.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-protractor.tex index 6aa6624611c..fb995eead7a 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-protractor.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-protractor.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-protractor.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-protractor.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-protractor.tex} \makeatletter %<--------------------------------------------------------------------------–> % !!! idea from Y. Combe !!! diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-sectors.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-sectors.tex index a934e871222..685ee592423 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-sectors.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-sectors.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-sectors.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-sectors.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-sectors.tex} \makeatletter %<----------------------- Sectors ------------------------------–> \gdef\tkz@nums{0} diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-show.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-show.tex index 3b3a00e7454..2f5d97bc986 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-show.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-draw-eu-show.tex @@ -1,5 +1,5 @@ %tkz-obj-eu-show.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-show.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-show.tex} \makeatletter %<--------------------------------------------------------------------------–> % finding specific points in a triangle @@ -121,6 +121,7 @@ \tkzCompass[compass style,#1](#3,MED@2) \endgroup } + \def\tkzShowLLLine{\pgfutil@ifnextchar[{\tkz@ShowLLLine}{\tkz@ShowLLLine[]}} \def\tkz@ShowLLLine[#1](#2,#3)(#4){% \begingroup @@ -328,18 +329,18 @@ translation/.code args={from #1 to #2}{% \pgfnodealias{tkz@pointtsf}{tkzPointResult} \tkz@VecKCoLinear[1](#2,#3,tkz@pointtsf) \pgfnodealias{SO@tmp1}{tkzPointResult} - \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf) + \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf) \pgfnodealias{SO@tmp2}{tkzPointResult} - \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1) + \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1) \pgfnodealias{SO@1}{tkzPointResult} - \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2) + \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2) \pgfnodealias{SO@2}{tkzPointResult} - \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4) + \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4) \pgfnodealias{SO@3}{tkzPointResult} \tkzCompass[compass style,#1](#4,SO@1) \tkzCompass[compass style,#1](#4,SO@2) \tkzCompass[compass style,#1](SO@1,SO@3) - \tkzCompass[compass style,#1,length=\tkz@show@ratio*\tkz@show@length](SO@2,SO@3) + \tkzCompass[compass style,#1,length=\tkz@show@ratio*\tkz@show@length](SO@2,SO@3) \endgroup } \makeatother diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.cfg b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.cfg index 4d7415232e2..a67e46e31a1 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.cfg +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.cfg @@ -1,5 +1,5 @@ % tkz-euclide.cfg -% Copyright 2022 Alain Matthes +% 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. @@ -16,9 +16,9 @@ % and save the file in a directory part of your TEXINPUTS environment % variable. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-euclide.cfg} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-euclide.cfg} %<------ colors ---------------------------------------–> \def\tkz@backgroundcolor{white} \def\tkz@textcolor{black} @@ -134,7 +134,7 @@ arc style/.style={% \def\tkz@mk@fill{\tkz@otherlinecolor} %<--------------------------------------------------------------------------–> %<------------------------------ styles ---------------------------------–> -\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2022 +\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2023 \tikzset{xlabel style/.style = {below = 3 pt, inner sep = 1pt, diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.sty b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.sty index d0eb08def55..3b2c9f43652 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.sty +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-euclide.sty @@ -1,5 +1,5 @@ % tkz-euclide.sty -% Copyright 2022 Alain Matthes +% 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. @@ -10,11 +10,16 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. %------------------------------------------------------------------------------- -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-euclide.sty} +\def\fileversion{5.00c} +\def\filedate{2023/11/03} +\typeout{2023/11/03 5.00c tkz-euclide.sty} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{tkz-euclide}[ 2022/09/23 4.25c for pure Euclidean Geometry ] +\ProvidesPackage{tkz-euclide}[ 2023/11/03 5.00c for pure Euclidean Geometry ] +\newif\if@tkzlua +\@tkzluafalse +\DeclareOption{lua}{\@tkzluatrue} +\ProcessOptions\relax + \@ifpackageloaded{tkz-base}{ \newdimen\tkzRadius \newdimen\tkzLength @@ -148,45 +153,66 @@ \def\tkz@tmp@ya{-5} \def\tkz@tmp@yb{+5} %------------------------------------------------------------------------------- -\DeclareOption*{} -\ProcessOptions +% \DeclareOption*{} +% \ProcessOptions %<----------------------------------------------------------> % Initialisation %<----------------------------------------------------------> +\if@tkzlua +\RequirePackage{luacode} +\fi + + \@ifpackageloaded{tkz-base}{}{% -% from base +% from base +\input{tkz-lib-eu-marks.tex} +\input{tkz-lib-eu-shape.tex} \input{tkz-tools-eu-base.tex} \input{tkz-tools-eu-utilities.tex} \input{tkz-tools-eu-BB.tex} -\input{tkz-obj-eu-grids.tex} -\input{tkz-lib-eu-marks.tex} +\input{tkz-tools-eu-colors.tex} \input{tkz-tools-eu-text.tex} -\input{tkz-lib-eu-shape.tex} +\input{tkz-obj-eu-grids.tex} \input{tkz-obj-eu-axesmin.tex} -\input{tkz-tools-eu-colors.tex} \input{tkz-obj-eu-points.tex} -\input{tkz-obj-eu-draw-points.tex} +\input{tkz-draw-eu-points.tex} } -% next from euclide -\input{tkz-tools-eu-angles} -\input{tkz-tools-eu-intersections} +% % 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} +\else +\input{tkz-obj-eu-points.tex} +\input{tkz-obj-eu-points-by.tex} \input{tkz-tools-eu-math.tex} -\input{tkz-obj-eu-compass.tex} +\input{tkz-tools-eu-intersections.tex} +\input{tkz-obj-eu-points-with.tex} +\input{tkz-obj-eu-points-spc.tex} +\input{tkz-tools-eu-angles.tex} + \fi + +\input{tkz-obj-eu-points-rnd.tex} \input{tkz-obj-eu-circles.tex} \input{tkz-obj-eu-circles-by.tex} -\input{tkz-obj-eu-draw-angles.tex} -\input{tkz-obj-eu-draw-circles.tex} -\input{tkz-obj-eu-draw-lines.tex} -\input{tkz-obj-eu-draw-polygons.tex} \input{tkz-obj-eu-lines.tex} -\input{tkz-obj-eu-points-by.tex} -\input{tkz-obj-eu-points-rnd.tex} -\input{tkz-obj-eu-points-spc.tex} -\input{tkz-obj-eu-points-with.tex} \input{tkz-obj-eu-polygons.tex} -\input{tkz-obj-eu-protractor.tex} -\input{tkz-obj-eu-sectors.tex} -\input{tkz-obj-eu-show.tex} \input{tkz-obj-eu-triangles} +% drawings +\input{tkz-draw-eu-lines.tex} +\input{tkz-draw-eu-circles.tex} +\input{tkz-draw-eu-polygons.tex} +\input{tkz-draw-eu-angles.tex} +\input{tkz-draw-eu-sectors.tex} +\input{tkz-draw-eu-compass.tex} +\input{tkz-draw-eu-show.tex} +\input{tkz-draw-eu-protractor.tex} + \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-marks.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-marks.tex index 999b28734ea..3e536edc330 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-marks.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-marks.tex @@ -1,5 +1,5 @@ % tkz-eu-lib-marks.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-lib-eu-marks.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-lib-eu-marks.tex} \makeatletter %<--------------------------------------------------------------------------–> % Création des symboles diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-shape.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-shape.tex index 12965c9e51b..522e2051620 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-shape.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-lib-eu-shape.tex @@ -1,5 +1,5 @@ % tkz-lib-eu-shape.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,10 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-lib-eu-shape.tex} -\makeatletter +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-lib-eu-shape.tex} %<--------------------------------------------------------------------------–> % Création des symboles %<--------------------------------------------------------------------------–> @@ -47,5 +46,4 @@ \pgfpathlineto{\pgfqpoint{\pgf@xb}{0 pt}} } } -\makeatother \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-axesmin.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-axesmin.tex index ab81c6d3ec9..3d2fedacc2d 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-axesmin.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-axesmin.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-axesmin.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-axesmin} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-axesmin} \makeatletter \def\removedot#1.{#1} diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles-by.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles-by.tex index 03f81e35f84..b4f7f8ebaf1 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles-by.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles-by.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-circles.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-circles.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-circles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzCircle center and one point @@ -118,10 +118,9 @@ \tkz@@CalcLengthcm(#1,#2){tkz@lna}% \tkz@@CalcLengthcm(#1,#3){tkz@lnb}% \gdef\tkzMathResult{\fpeval{round(abs(\tkz@lnb - \tkz@lna),6)}} - \ifdim\tkzMathResult pt < 1 pt\relax% + \ifdim\tkzMathResult pt < 1 pt\relax% \tkzURotateAngle(#1,-90)(#2) \pgfnodealias{tkz@a}{tkzPointResult} - \tkzUInversePoint(#3,#4)(tkz@a) \pgfnodealias{tkzFirstPointResult}{tkzPointResult} \tkzUInversePoint(#3,#4)(#2) diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles.tex index 487ef547cdb..4428f407f59 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-circles.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-circles.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-circles.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-circles.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzCircle center and one point @@ -80,16 +80,6 @@ \tkzRenamePoint(tkzSecondPointResult){tkzPointResult} \endgroup } -%<--------------------------------------------------------------------------–> -% Through Circle center and point -%<--------------------------------------------------------------------------–> -\def\tkzDefCircleThrough(#1,#2){% -\begingroup - \tkz@@CalcLengthcm(#1,#2){tkzLengthResult} - \node [draw,circle through=(#2)] at (#1) {}; - \tkzRenamePoint(#1){tkzPointResult} -\endgroup -} %<--------------------------------------------------------------------------–> % Diameter Circle diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-grids.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-grids.tex index 14d476fede6..c6c1be300de 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-grids.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-grids.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-grids.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-grids.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-grids.tex} \makeatletter %<--------------------------------------------------------------------------–> % Setup Grid diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-lines.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-lines.tex index 3a2875c829a..5d5e2934fe5 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-lines.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-lines.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-lines.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-lines.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-lines.tex} \makeatletter %<--------------------------------------------------------------------------–> % les lignes @@ -162,7 +162,7 @@ %<--------------------------------------------------------------------------–> \def\tkzDefBisectorOutLine(#1,#2,#3){% \begingroup - \pgfinterruptboundingbox +\pgfinterruptboundingbox \tkzDuplicateLength(#2,#1)(#2,#3) \pgfnodealias{out@tmp}{tkzPointResult} \tkzDefMidPoint(#1,out@tmp) @@ -175,7 +175,7 @@ \iftkz@line@normed \tkzVecKNorm[\tkz@koeff](#2,tkzPointResult) \fi - \endpgfinterruptboundingbox +\endpgfinterruptboundingbox \endgroup } %<--------------------------------------------------------------------------–> diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex index fc8b53160c2..2af038e9571 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex @@ -1,5 +1,5 @@ % tkz-tools-eu-points-by.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-points-by.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-points-by.tex} \makeatletter %<--------------------------------------------------------------------------–> % Transformations Géométriques @@ -130,7 +130,7 @@ \ifx\tkz@FirstPoint\tkzutil@empty \def\tkz@pointtsf{\PT '} \else - \def\tkz@pointtsf{\tkz@FirstPoint} + \def\tkz@pointtsf{\tkz@FirstPoint} \fi \tkz@VecCoLinear(#1,#2,\PT) \pgfnodealias{\tkz@pointtsf}{tkzPointResult} @@ -328,21 +328,21 @@ %<--------------------------------------------------------------------------–> \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% - \pgfmathrotatepointaround{\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 + \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% + \pgfmathrotatepointaround{\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 diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-rnd.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-rnd.tex index 8d604321edd..a5aa32776ab 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-rnd.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-rnd.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-points-rnd.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-points-rnd.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-points-rnd.tex} %<--------------------------------------------------------------------------–> \makeatletter %<-------------------------------------------------------------------------–> diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-with.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-with.tex index e530dd5dfda..b650e327270 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-with.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-with.tex @@ -1,5 +1,5 @@ % tkz-obj-el-points-with.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-points-with.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-points-with.tex} \makeatletter %<--------------------------------------------------------------------------–> % Vectors diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points.tex index e3dbc6e7cf8..5a247848dd7 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-points.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-points.tex} \makeatletter %<---------------------------------------------------------------------------> % init def point diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-polygons.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-polygons.tex index 79fd6e561a3..4c798267340 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-polygons.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-polygons.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-polygons.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-polygons.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-polygons.tex} % bug in regular polygon side 2020/03/09 \makeatletter %<--------------------------------------------------------------------------–> diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-triangles.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-triangles.tex index 9879bd6768d..738221b1b64 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-triangles.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-triangles.tex @@ -1,5 +1,5 @@ % tkz-obj-eu-triangles.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-triangles.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-triangles.tex} \makeatletter %<--------------------------------------------------------------------------–> % Triangle Equilateral diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-circles.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-circles.tex new file mode 100644 index 00000000000..9be8dd8be75 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points-by.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points-by.tex new file mode 100644 index 00000000000..1db32f48bf4 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-spc.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points-spc.tex index 0ce48fcda55..9ed94b26e08 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-spc.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points-spc.tex @@ -1,5 +1,5 @@ -% tkz-obj-eu-points.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-lua-points.tex} \makeatletter %add ExCenter %<--------------------------------------------------------------------------–> @@ -27,21 +27,41 @@ } \let\tkzDefBCPoint\tkzDefBarycentricPoint -\def\tkzDefCentroid(#1){% +\def\tkzDefBarycentricPointTwo(#1,#2,#3,#4){% \begingroup - \xdef\tkz@arg{} - \foreach \X in {#1} - {% - \ifx\tkzutil@empty\tkz@arg% - \xdef\tkz@arg{\X=1} - \else - \xdef\tkz@arg{\tkz@arg,\X=1} - \fi - } - \path[coordinate] (barycentric cs:\tkz@arg) coordinate (tkzPointResult); +\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{#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*(#2) + \tkzcbx*(#4))/(#2 + #4 )}} +\edef\tkztpmy{\tkz@Dec{(\tkzcay*(#2) + \tkzcby*(#2))/(#2 + #4 )}} +\pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} \endgroup } +% \def\tkzDefCentroid(#1){% +% \begingroup +% \xdef\tkz@arg{} +% \foreach \X in {#1} +% {% +% \ifx\tkzutil@empty\tkz@arg% +% \xdef\tkz@arg{\X=1} +% \else +% \xdef\tkz@arg{\tkz@arg,\X=1} +% \fi +% } +% \path[coordinate] (barycentric cs:\tkz@arg) coordinate (tkzPointResult); +% \endgroup +% } + %<--------------------------------------------------------------------------–> % milieu de deux points %<--------------------------------------------------------------------------–> @@ -127,28 +147,57 @@ \def\tkz@rf{#5}% \fi \pgfinterruptboundingbox - \path[coordinate](barycentric cs:#2=\tkz@rf,#4=\tkz@rt)coordinate (tkzPointResult); - \endpgfinterruptboundingbox +\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\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}% + \tkz@@CalcLengthcm(#2,#3){tkz@rt}% + \tkz@@CalcLengthcm(#4,#5){tkz@rf}% + \or% 1 + \def\tkz@rt{#3}% + \def\tkz@rf{#5}% \fi - \pgfinterruptboundingbox - \path[coordinate](barycentric cs:#2=-\tkz@rf,#4=\tkz@rt) coordinate(tkzPointResult); +\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 } @@ -306,14 +355,16 @@ \pgf@process{\pgfpointanchor{#3}{center}}% \tkz@cx\pgf@x% \tkz@cy\pgf@y% - \advance\tkz@cx by\tkz@ax\relax% - \advance\tkz@cy by\tkz@ay\relax% - \advance\tkz@cx by\tkz@bx\relax% - \advance\tkz@cy by\tkz@by\relax% - \divide\tkz@cx by3\relax% - \divide\tkz@cy by3\relax + \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{\tkz@cx}{\tkz@cy}} + \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}} \endpgfinterruptboundingbox \endgroup } diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points-with.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points-with.tex new file mode 100644 index 00000000000..73a3d9799ff --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points.tex new file mode 100644 index 00000000000..4a81392c5d3 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-lua-points.tex @@ -0,0 +1,169 @@ + % 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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-BB.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-BB.tex index 4ac1e79ba9e..2276dead1a0 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-BB.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-BB.tex @@ -1,5 +1,5 @@ % tkz-tools-eu-BB.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-obj-eu-BB.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-obj-eu-BB.tex} \makeatletter %<--------------------------------------------------------------------------–> \def\tkzShowBB{\pgfutil@ifnextchar[{\tkz@ShowBB}{\tkz@ShowBB[]}} diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-angles.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-angles.tex index ddf83dc0fa5..f8ec42d3e06 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-angles.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-angles.tex @@ -1,5 +1,5 @@ % tkz-tools-angles.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-angles.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-angles.tex} \makeatletter %<--------------------------------------------------------------------------–> %<--------------------------------------------------------------------------–> @@ -20,24 +20,24 @@ % \tkzGetAngle strange behavior % defines \tkz@FirstAngle and \tkz@SecondAngle sens trigo %<--------------------------------------------------------------------------–> - \def\tkzNormalizeAngle(#1,#2){% - \begingroup - \pgfmathparse{#1}\xdef\tkz@FirstAngle{\pgfmathresult}% - \pgfmathparse{#2}\xdef\tkz@SecondAngle{\pgfmathresult}% - \pgfmathgreaterthan{\tkz@FirstAngle}{0} - \ifdim\pgfmathresult pt=1 pt\relax% - \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle} - \ifdim\pgfmathresult pt=1 pt\relax% - \pgfmathsubtract{\tkz@FirstAngle}{360} - \xdef\tkz@FirstAngle{\pgfmathresult}% - \fi - \else - \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle} - \ifdim\pgfmathresult pt=1 pt\relax% - \pgfmathadd{\tkz@SecondAngle}{360} - \xdef\tkz@SecondAngle{\pgfmathresult}% - \fi - \fi +\def\tkzNormalizeAngle(#1,#2){% +\begingroup +\pgfmathparse{#1}\xdef\tkz@FirstAngle{\pgfmathresult}% +\pgfmathparse{#2}\xdef\tkz@SecondAngle{\pgfmathresult}% +\pgfmathgreaterthan{\tkz@FirstAngle}{0} +\ifdim\pgfmathresult pt=1 pt\relax% + \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle} + \ifdim\pgfmathresult pt=1 pt\relax% + \pgfmathsubtract{\tkz@FirstAngle}{360} + \xdef\tkz@FirstAngle{\pgfmathresult}% + \fi +\else + \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle} + \ifdim\pgfmathresult pt=1 pt\relax% + \pgfmathadd{\tkz@SecondAngle}{360} + \xdef\tkz@SecondAngle{\pgfmathresult}% + \fi +\fi \endgroup } %<--------------------------------------------------------------------------–> @@ -47,7 +47,7 @@ \def\tkzFindSlopeAngle(#1,#2){% \begingroup \pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}{% - \pgfpointanchor{#2}{center}} + \pgfpointanchor{#2}{center}} \global\let\tkzAngleResult\pgfmathresult \endgroup } @@ -59,10 +59,11 @@ \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}} + \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}} \global\let\tkzAngleResult\tkz@Angle \endgroup } + %<--------------------------------------------------------------------------–> % Find angle %<--------------------------------------------------------------------------–> diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-base.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-base.tex index 4bc2e5d072e..23117033630 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-base.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-base.tex @@ -1,5 +1,5 @@ % tkz-tools-eu-base.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-base.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-base.tex} \makeatletter %<--------------------------------------------------------------------------–> \global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016 @@ -48,7 +48,7 @@ \fi \xdef\tkz@init@xorigine{0} \xdef\tkz@init@yorigine{0} - \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}} + \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}} % -> -1 or 1 \edef\@xsgmax{\fpeval{sign(\tkz@init@xmax)}} \edef\@ysgmin{\fpeval{sign(\tkz@init@ymin)}} \edef\@ysgmax{\fpeval{sign(\tkz@init@ymax)}} diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-colors.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-colors.tex index d0a921c9936..94995906f97 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-colors.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-colors.tex @@ -1,5 +1,5 @@ % tkz-tools-eu-colors -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-colors} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-colors} \makeatletter %<------ Initialisation of the colors with tkzSetUpColors -----------------> diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-intersections.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-intersections.tex index 4c05e5a3dca..bb741fc59ee 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-intersections.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-intersections.tex @@ -1,5 +1,5 @@ % tkz-tools-intersections.tex -% Copyright 2022 Alain Matthes +% 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. @@ -13,9 +13,9 @@ % The Current Maintainer of this work is Alain Matthes. % utf8 encoding -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-intersections.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-intersections.tex} \makeatletter %<--------------------------------------------------------------------------–> % intersection de deux lignes @@ -25,37 +25,34 @@ } \def\tkz@InterLL(#1,#2)(#3,#4)#5{% -\path (intersection of #1--#2 and #3--#4) coordinate(#5); -% méthode with tikz -% \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}% -% \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}% -% \tkz@ax\pgf@x% -% \tkz@ay\pgf@y% -% \pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}% -% \pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}} -% \tkz@bx\pgf@x% -% \tkz@by\pgf@y% -% \pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}% -% \pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}% -% \tkz@cx\pgf@x% -% \tkz@cy\pgf@y% -% \pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}% -% \pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}% -% \tkz@dx\pgf@x% -% \tkz@dy\pgf@y% -% -% \edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}} -% \edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}} -% \edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}} -% \edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}} -% \edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}} -% \edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}} -% \edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}} -% \edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}} -% \edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}} -% \edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}} -% \edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}} -% \path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5); +\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}% +\tkz@ax\pgf@x% +\tkz@ay\pgf@y% +\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}} +\tkz@bx\pgf@x% +\tkz@by\pgf@y% +\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}% +\tkz@cx\pgf@x% +\tkz@cy\pgf@y% +\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}% +\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}% +\tkz@dx\pgf@x% +\tkz@dy\pgf@y% +\edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}} +\edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}} +\edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}} +\edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}} +\edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}} +\edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}} +\edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}} +\edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}} +\edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}} +\edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}} +\edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}} +\path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5); } @@ -418,8 +415,7 @@ \tkz@@CalcLengthcm(#2,#3){tkz@rayA} \tkz@@CalcLengthcm(#4,#5){tkz@rayB} \tkz@restore@length - \tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{% - tkzSecondPointResult} + \tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{tkzSecondPointResult} \or% 1 \tkzInterCCR(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}% \or%2 @@ -463,10 +459,10 @@ \tkz@cx#2cm % \tkz@cy#4cm % \edef\tkz@aa{\fpeval{((\tkz@cx+\tkz@cy)/(2*\tkz@dd))*(\tkz@cx-\tkz@cy)+\tkz@dd/2}} -\edef\tkz@xx{\fpeval{\tkz@ax+\tkz@aa/\tkz@dd*(\tkz@bx - \tkz@ax)}} + \edef\tkz@xx{\fpeval{\tkz@ax+\tkz@aa/\tkz@dd*(\tkz@bx - \tkz@ax)}} \edef\tkz@yy{\fpeval{\tkz@ay+\tkz@aa/\tkz@dd*(\tkz@by - \tkz@ay)}} \path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter); -\edef\tkz@hh{\fpeval{sqrt(abs((\tkz@cx+\tkz@aa)*(\tkz@cx-\tkz@aa)))}}% abs !2022 +\edef\tkz@hh{\fpeval{sqrt(abs((\tkz@cx+\tkz@aa)*(\tkz@cx-\tkz@aa)))}}% abs !2023 \edef\tkz@rx{\fpeval{\tkz@hh / \tkz@dd * (\tkz@ay - \tkz@by)}} \edef\tkz@ry{\fpeval{\tkz@hh / \tkz@dd * (\tkz@bx - \tkz@ax)}} \edef\tkz@xs{\fpeval{\tkz@xx + \tkz@rx}} diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-math.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-math.tex index 7c11e8be03d..9ec079f0921 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-math.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-math.tex @@ -1,5 +1,5 @@ % tkz-tools-eu-math.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-math.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-math.tex} \makeatletter %<--------------------------------------------------------------------------> % \tkzpointnormalised# @@ -113,7 +113,7 @@ }% % Schrodinger's cat idea 03/01/20 -\tikzset{xfp/.code={% +\tikzset{veclen/.code={% \pgfmathdeclarefunction*{veclen}{2}{% \begingroup% \pgfmath@x##1pt\relax% @@ -147,7 +147,7 @@ \pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}% \tkz@cx\pgf@x% \tkz@cy\pgf@y% -\edef\tkz@@dotprod{\fpeval{round(abs((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(28.45274*28.45274),5)}} +\edef\tkz@@dotprod{\fpeval{round(((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(809.55841),5)}} \global\let\tkzMathResult\tkz@@dotprod \endgroup} %<---------------------------------------------------------–> @@ -160,7 +160,7 @@ \tkz@@CalcLengthcm(#1,#2){tkz@la} \tkz@@CalcLengthcm(#1,#3){tkz@lb} \tkzDotProduct(#1,#2,#3) -\edef\tkzResult{\fpeval{abs((\tkzMathResult)-(\tkz@la)*(\tkz@lb))}} +\edef\tkzResult{\fpeval{abs(\tkzMathResult)-(\tkz@la)*(\tkz@lb)}} \ifdim \tkzResult pt < 0.01 pt\relax% \global\tkzLineartrue \else @@ -223,5 +223,34 @@ \fi \endgroup } +\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}% + \mathSin{\mathRad{\angle}}% + \let\sineangle\pgfmathresult% + \mathCos{\mathRad{\angle}}% + \let\cosineangle\pgfmathresult% + \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% + }% +} \makeatother \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-modules.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-modules.tex index 86c9f6947d0..eb0dae14e6a 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-modules.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-modules.tex @@ -1,5 +1,5 @@ % tkz-tools-modules -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-utilities.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-text.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-text.tex index 8afaae338ef..3f52c84c28e 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-text.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-text.tex @@ -1,5 +1,5 @@ % tkz-tools-eu-text.tex -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-text.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-text.tex} \makeatletter %<--------------------------------------------------------------------------–> % tkzText diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-utilities.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-utilities.tex index 05649512dc2..eb9c52317f9 100644 --- a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-utilities.tex +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-eu-utilities.tex @@ -1,5 +1,5 @@ % tkz-tools-eu-utilities -% Copyright 2022 Alain Matthes +% 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. @@ -10,9 +10,9 @@ % This work has the LPPL maintenance status “maintained”. % The Current Maintainer of this work is Alain Matthes. -\def\fileversion{4.25c} -\def\filedate{2022/09/23} -\typeout{2022/09/23 4.25c tkz-tools-eu-utilities.tex} +\def\fileversion{5.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-eu-utilities.tex} \makeatletter \pgfkeys{/tkzClip/.cd, space/.store in = {\tkz@CLI@space}, @@ -37,7 +37,6 @@ space = {}} \def\extractxy#1{% \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} -\typeout{#1 \the\pgf@x,\the\pgf@y} } %<-------------- some tools -------------------------------------------------> \def\tkzutil@empty{} @@ -168,64 +167,7 @@ space = {}} } \def\EnabledNumprint{\let\numprint\tkz@numprint} %<---------------------------------------------------------–> -\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}}% -\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% -\edef\tkz@dotprod{\fpeval{round(((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(809.55841),5)}} -\global\let\tkzMathResult\tkz@dotprod -\endgroup} -%<---------------------------------------------------------–> - \def\tkzGetResult#1{% - \global\expandafter\edef\csname #1\endcsname{\tkzMathResult}} -%<---------------------------------------------------------–> -% #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\tkzMathResult{\fpeval{abs(abs(\tkzMathResult)-(\tkz@la)*(\tkz@lb))}} -\ifdim \tkzMathResult pt < 0.0001 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\tkzMathResult{\fpeval{abs(\tkzMathResult)}} -\ifdim \tkzMathResult pt < 0.0001 pt\relax% -\global\tkzOrthotrue -\else -\global\tkzOrthofalse -\fi -\endgroup -} + %<---------------------------------------------------------–> \def\tkzHelpGrid{% \draw[help lines] (current bounding box.south west) grid diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-angles.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-angles.tex new file mode 100644 index 00000000000..69fd1110abe --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-base.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-base.tex new file mode 100644 index 00000000000..c31c9251878 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-intersections.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-intersections.tex new file mode 100644 index 00000000000..050697a1bb2 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c 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/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-math.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-math.tex new file mode 100644 index 00000000000..1a0491d5991 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-lua-math.tex @@ -0,0 +1,417 @@ +% 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.00c} +\def\filedate{2023/01/23} +\typeout{2023/01/23 5.00c tkz-tools-lua-math.tex} +\makeatletter +%<--------------------------------------------------------------------------> +%<--------------------------------------------------------------------------> +% Lengths +%<--------------------------------------------------------------------------> +%<--------------------------------------------------------------------------> +\begin{luacode*} +complex = {} -- global complex numbers registry +M = {} -- the module +local mt = {} --metatable for complex numbers +setmetatable(_ENV, {__index = complex}) + function new (r, i) + local cp = {} + cp = {r=r, i=i} + return setmetatable(cp,mt) + end + M.new = new -- add 'new' to the module + -- create constant 'i' + M.i = new(0, 1) + + function M.add (c1, c2) + return new(c1.r + c2.r, c1.i + c2.i) + end + + function M.sub (c1, c2) + return new(c1.r - c2.r, c1.i - c2.i) + end + + function M.mul (c1, c2) + return new(c1.r*c2.r - c1.i*c2.i, c1.r*c2.i + c1.i*c2.r) + end + + function M.inv (c) + local n = c.r^2 + c.i^2 + return new(c.r/n, -c.i/n) + end + + function M.div (c1, c2) + return M.mul(c1, M.inv(c2)) + end + + function M.re (c) + return new(c.r,0) + end + + function M.im (c) + return new(c.i,0) + end + + function M.mod (c) + local n = c.r^2 + c.i^2 + return new(n,0) + end + + function M.prinarg(c) + local arg + if c.r > 0 then + arg = math.atan(c.i/c.r) + elseif c.r < 0 and c.i >= 0 then + arg = math.atan(c.i/c.r) + math.pi + elseif c.r < 0 and c.i < 0 then + arg = math.atan(c.i/c.r) - math.pi + elseif c.r == 0 and c.i > 0 then + arg = math.pi / 2 + elseif c.r == 0 and c.i < 0 then + arg = - math.pi / 2 + else + error("Principal argument not defined.") + end + return arg + end + + function M.op (...) + return ... + end + + function M.tostring (c) + if c.i ==0 then + return string.format("%g", c.r) + elseif c.i> 0 and c.i==1 then + return string.format("%g+i", c.r) + elseif c.i> 0 and c.i~=1 then + return string.format("%g+%gi", c.r, c.i) + else + return string.format("%g%gi", c.r, c.i) --to avoid +- + end + end + + --Setting Metatable operations. + mt.__add = M.add + mt.__mul = M.mul + mt.__sub = M.sub + mt.__tostring = M.tostring +\end{luacode*} + + + +\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*} + +\newcommand\cpxNew[2]{% +\directlua{complex[\luastringN{#1}] = M.new(#2)}} +\newcommand\cpxPrint[1]{% +\directlua{tex.sprint(tostring(complex[\luastringN{#1}]))}} +\newcommand\cpxAdd[3]{% +\directlua{complex[\luastringN{#1}]% + =M.add(complex[\luastringN{#2}],complex[\luastringN{#3}])}} + + +\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# +% tkzCalcLength +% \tkzGetLength +% \tkzpttocm +% \tkzcmtopt +% \tkzFindSlope +% option xfp + +% \tkzpointnormalised normalise un point A-->A' tq ||v(OA')=1|| +% équivalent de \pgfpointnormalised avec fp +% 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 |