summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex')
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex119
1 files changed, 119 insertions, 0 deletions
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
new file mode 100644
index 0000000000..a5aa32776a
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
@@ -0,0 +1,119 @@
+% tkz-obj-eu-points-rnd.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-eu-points-rnd.tex}
+%<--------------------------------------------------------------------------–>
+\makeatletter
+%<-------------------------------------------------------------------------–>
+% Points aléatoires sur un segment, une droite, une demi-droite un cercle
+%<--------------------------------------------------------------------------–>
+% les points aléatoires
+%<--------------------------------------------------------------------------–>
+\def\tkz@numrp{0}
+\pgfkeys{/@tkzDefRandPoint/.cd,
+ rectangle/.code args = {#1 and #2}{\def\tkz@numrp{0}%
+ \def\tkz@infl{#1}%
+ \def\tkz@supr{#2}},
+ segment/.code args = {#1--#2}{\def\tkz@numrp{1}%
+ \def\tkz@start{#1}%
+ \def\tkz@end{#2}},
+ line/.code args = {#1--#2}{\def\tkz@numrp{2}%
+ \def\tkz@start{#1}%
+ \def\tkz@end{#2}},
+ circle/.code args = {center #1 radius #2}{\def\tkz@numrp{3}%
+ \def\tkz@center{#1}
+ \def\tkz@rad{#2}},
+ circle through/.code args = {center #1 through #2}{\def\tkz@numrp{4}%
+ \def\tkz@center{#1}
+ \def\tkz@point{#2}},
+ disk through/.code args = {center #1 through #2}{\def\tkz@numrp{5}%
+ \def\tkz@center{#1}
+ \def\tkz@point{#2}},
+}
+%<------------------------ version 2019 ---------------------------------->
+\def\tkzDefRandPointOn{\pgfutil@ifnextchar[{\tkz@DefRandPointOn}{%
+ \tkz@DefRandPointOn[]}}
+\def\tkz@DefRandPointOn[#1]{%
+\begingroup
+\pgfqkeys{/@tkzDefRandPoint}{#1}
+\ifcase\tkz@numrp%
+ % first case 0
+ \tkzRandPointOnRect(\tkz@infl,\tkz@supr)
+ \or% 1
+ \tkzRandPointOnSegment(\tkz@start,\tkz@end)
+ \or% 2
+ \tkzRandPointOnLine(\tkz@start,\tkz@end)
+ \or% 3
+ \tkzRandPointOnCircle(\tkz@center,\tkz@rad)
+ \or% 4
+ \tkzRandPointOnCircleThrough(\tkz@center,\tkz@point)
+ \or% 5
+ \tkzRandPointOnDisk(\tkz@center,\tkz@point)
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzRandPointOnRect(#1,#2){%
+\tkz@@extractxy{#1}
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \tkz@@extractxy{#2}
+ \pgf@xb=\pgf@x\relax%
+ \pgf@yb=\pgf@y\relax%
+ \edef\tkz@a{\fpeval{\pgf@xb-\pgf@xa}}
+ \edef\tkz@b{\fpeval{\pgf@yb-\pgf@ya}}
+ \pgfmathparse{rnd}\global\let\tkzrndone\pgfmathresult
+ \pgfmathparse{rnd}\global\let\tkzrndtwo\pgfmathresult
+ \path[coordinate] ($(#1)+(\tkzrndone*\tkz@a pt,\tkzrndtwo*\tkz@b pt)$) coordinate (tkzPointResult);
+ }
+%<--------------------------------------------------------------------------–>
+\def\tkzRandPointOnSegment(#1,#2){%
+ \pgfmathparse{rnd}
+ \let\myrnd\pgfmathresult
+\path[coordinate] ($ (#1)!\myrnd!(#2) $) coordinate (tkzPointResult);
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzRandPointOnLine(#1,#2){%
+ \pgfmathparse{rand}
+ \let\myrnd\pgfmathresult
+\path[coordinate] ($ (#1)!\myrnd!(#2) $) coordinate (tkzPointResult);
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzRandPointOnCircle(#1,#2){%
+\pgfmathrandominteger{\tkzrnd}{0}{360}
+\tkz@ax#2cm %
+ \edef\tkz@pxa{\fpeval{\tkz@ax*cosd(\tkzrnd)}}
+ \edef\tkz@pxb{\fpeval{\tkz@ax*sind(\tkzrnd)}}
+ \path[coordinate]($(#1) + (\tkz@pxa pt,\tkz@pxb pt) $) coordinate (tkzPointResult);
+}
+\def\tkzRandPointOnCircleThrough(#1,#2){%
+\pgfmathrandominteger{\tkzrnd}{0}{360}
+\tkz@@CalcLength(#1,#2){tkzLengthResult}
+ \edef\tkz@pxa{\fpeval{\tkzLengthResult*cosd(\tkzrnd)}}
+ \edef\tkz@pxb{\fpeval{\tkzLengthResult*sind(\tkzrnd)}}
+\path[coordinate]($(#1) + (\tkz@pxa pt ,\tkz@pxb pt) $) coordinate (tkzPointResult);
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzRandPointOnDisk(#1,#2){%
+ \pgfmathrandominteger{\tkzrnd}{0}{360}
+ \tkz@@CalcLength(#1,#2){tkzLengthResult}
+ \edef\tkz@pxa{\fpeval{\tkzLengthResult*cosd(\tkzrnd)}}
+ \edef\tkz@pxb{\fpeval{\tkzLengthResult*sind(\tkzrnd)}}
+ \path[coordinate]($(#1) + (\tkz@pxa pt ,\tkz@pxb pt) $) coordinate (tkz@tmp);
+ \pgfmathparse{rnd}
+ \let\myrnd\pgfmathresult
+ \path[coordinate] ($ (#1)!\myrnd!(tkz@tmp) $) coordinate (tkzPointResult);
+}
+\makeatother
+\endinput \ No newline at end of file