diff options
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.tex | 119 |
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 |