summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-math.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-math.tex')
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-math.tex126
1 files changed, 126 insertions, 0 deletions
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-math.tex
new file mode 100644
index 0000000000..97bc6c698a
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-math.tex
@@ -0,0 +1,126 @@
+% tkz-tools-math.tex
+% Copyright 2020 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{3.05c}
+\def\filedate{2020/03/03}
+\typeout{2020/03/03 3.05c tkz-tools-math.tex}
+\makeatletter
+%<-------------------------------------------------------------------------->
+% \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}%
+\edef\tkz@den{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}}
+\edef\tkz@coordx{\fpeval{\pgf@x/\tkz@den}}
+\edef\tkz@coordx{\fpeval{round(\tkz@coordx,5)}}
+\edef\tkz@coordy{\fpeval{\pgf@y/\tkz@den}}
+\edef\tkz@coordy{\fpeval{round(\tkz@coordy,5)}}
+\pgf@x = \tkz@coordx pt
+\pgf@y = \tkz@coordy pt
+}
+%<-------------------------------------------------------------------------->
+% 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
+%<-------------------------------------------------------------------------->
+\pgfkeys{tkzcalclen/.cd,
+ cm/.is if = tkzLengthIncm,
+ cm/.default = true}
+
+\def\tkzCalcLength{\pgfutil@ifnextchar[{\tkz@CalcLength}{\tkz@CalcLength[]}}
+\def\tkz@CalcLength[#1](#2,#3){%
+\pgfkeys{tkzcalclen/.cd, cm = false}
+\pgfqkeys{/tkzcalclen}{#1}%
+\begingroup
+\tkz@@CalcLength(#2,#3){tkzLengthResult}
+\iftkzLengthIncm
+ \pgfmathparse{\tkz@xfpMathLen pt/1cm}
+ \edef\tkz@xfpMathLen{\fpeval{round(\pgfmathresult,5)}}
+ \global\let\tkzLengthResult\tkz@xfpMathLen
+\fi
+\endgroup
+}%
+\def\tkz@@CalcLength(#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,5)}}
+\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
+ \pgfmathparse{#1/1cm}
+ \edef\tkz@mathresult{\fpeval{round(\pgfmathresult,5)}}
+ \global\let\tkz@mathresult\tkz@mathresult
+ \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}%
+\endgroup
+}%
+%<-------------------------------------------------------------------------->
+% \tkzcmtopt passage de cm   pt mul par 28.45274
+%<--------------------------------------------------------------------------
+\def\tkzcmtopt(#1)#2{%
+\begingroup
+ \pgfmathparse{#1/1pt}
+ \edef\tkz@mathresult{\fpeval{round(\pgfmathresult,5)}}
+ \global\let\tkz@mathresult\tkz@mathresult
+ \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}%
+\endgroup
+}%
+%<-------------------------------------------------------------------------->
+% Slope
+%<-------------------------------------------------------------------------->
+\def\tkzFindSlope{\tkz@FindSlope}
+\def\tkz@FindSlope(#1,#2)#3{%
+\begingroup
+ \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}}
+ \edef\tkz@Slope{\fpeval{\pgfmath@tonumber{\pgf@y}/\pgfmath@tonumber{\pgf@x}}}
+ \edef\tkz@Slope{\fpeval{round(\tkz@Slope,5)}}
+ \global\expandafter\edef\csname #3\endcsname{\tkz@Slope}%
+\endgroup
+}
+% Schrodinger's cat idea 03/01/20
+\tikzset{xfp/.code={%
+\pgfmathdeclarefunction*{veclen}{2}{%
+\begingroup%
+ \pgfmath@x##1pt\relax%
+ \pgfmath@y##2pt\relax%
+ \edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}}
+ \pgfmath@returnone\tkz@xfpMathLen pt%
+\endgroup%
+}}}
+ \makeatother
+\endinput \ No newline at end of file