summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex')
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex111
1 files changed, 99 insertions, 12 deletions
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex
index 6723a41a35..e3c602abb3 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.051b}
-\def\filedate{2022/02/25}
-\typeout{2022/02/25 4.051b tkz-tools-eu-math.tex}
+\def\fileversion{4.2c}
+\def\filedate{2022/07/14}
+\typeout{2022/07/14 4.2c tkz-tools-eu-math.tex}
\makeatletter
%<-------------------------------------------------------------------------->
% \tkzpointnormalised#
@@ -23,7 +23,7 @@
% \tkzFindSlope
% option xfp
-% \tkzpointnormalised normalise un point A-->A' tq ||v(OA')=1||
+% \tkzpointnormalised normalise un point A-->A' tq v(OA')=1
% équivalent de \pgfpointnormalised avec fp
% example
% \tkzpointnormalised{%
@@ -52,7 +52,7 @@
%<-------------------------------------------------------------------------->
% \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
+% option cm le résultat est en cm sinon en pt with cm=false
%<-------------------------------------------------------------------------->
\pgfkeys{tkzcalclen/.cd,
cm/.is if = tkzLengthIncm,
@@ -67,7 +67,7 @@
\tkz@@CalcLength(#2,#3){tkzLengthResult}
\iftkzLengthIncm
\pgfmathparse{\tkzLengthResult pt/1cm}
- \edef\tkz@xfpMathLen{\fpeval{round(\pgfmathresult,5)}}
+ \edef\tkz@xfpMathLen{\fpeval{round(\pgfmathresult,6)}}
\global\let\tkzLengthResult\tkz@xfpMathLen
\fi
\endgroup
@@ -76,16 +76,14 @@
\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)}}
+\edef\tkz@xfpMathLen{\fpeval{round(\tkz@xfpMathLen,6)}}
\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
}
\def\tkz@@CalcLengthcm(#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)}}
-\pgfmathparse{\tkz@xfpMathLen pt/1cm}
-\edef\tkz@xfpMathLen{\fpeval{round(\pgfmathresult,5)}}
+\edef\tkz@xfpMathLen{\fpeval{round(\tkz@xfpMathLen/28.45274,6)}}
\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
}
%<-------------------------------------------------------------------------->
@@ -120,9 +118,98 @@
\begingroup%
\pgfmath@x##1pt\relax%
\pgfmath@y##2pt\relax%
- \edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}}
+ \edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}}
\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}}%
+\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(abs((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(28.45274*28.45274),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\tkzResult{\fpeval{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{\fpeval{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{\fpeval{round(\tkz@om*\tkz@om -\tkz@ra*\tkz@ra,5)}}
+\endgroup
+}
+%<---------------------------------------------------------–>
+\def\tkzDefRadicalAxis(#1,#2)(#3,#4){%
+\begingroup
+\tkz@@CalcLengthcm(#1,#3){tkz@da}
+\tkz@@CalcLengthcm(#1,#2){tkz@ra}
+\tkz@@CalcLengthcm(#3,#4){tkz@rb}
+\edef\tkzMathResult{\fpeval{(\tkz@ra+\tkz@rb)}}
+\ifdim \tkzMathResult pt < \tkz@da 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
+\endgroup
+}
\makeatother
\endinput \ No newline at end of file