% tkz-obj-eu-points-rnd.tex % Copyright 2022 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{4.25c} \def\filedate{2022/09/23} \typeout{2022/09/23 4.25c 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