% tkz-obj-eu-points-rnd.tex % Copyright 2020 by Alain Matthes % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. \def\fileversion{3.02c} \def\filedate{2020/01/24} \typeout{2020/01/24 3.02c 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#2 % \edef\tkz@xa{\fpeval{\tkz@ax*cosd(\tkzrnd)}} \edef\tkz@xb{\fpeval{\tkz@ax*sind(\tkzrnd)}} \path[coordinate]($(#1) + (\tkz@xa pt,\tkz@xb pt) $) coordinate (tkzPointResult); } \def\tkzRandPointOnCircleThrough(#1,#2){% \pgfmathrandominteger{\tkzrnd}{0}{360} \tkzCalcLength(#1,#2) \edef\tkz@xa{\fpeval{\tkzLengthResult*cosd(\tkzrnd)}} \edef\tkz@xb{\fpeval{\tkzLengthResult*sind(\tkzrnd)}} \path[coordinate]($(#1) + (\tkz@xa pt ,\tkz@xb pt) $) coordinate (tkzPointResult); } %<--------------------------------------------------------------------------–> \def\tkzRandPointOnDisk(#1,#2){% \pgfmathrandominteger{\tkzrnd}{0}{360} \tkzCalcLength(#1,#2) \edef\tkz@xa{\fpeval{\tkzLengthResult*cosd(\tkzrnd)}} \edef\tkz@xb{\fpeval{\tkzLengthResult*sind(\tkzrnd)}} \path[coordinate]($(#1) + (\tkz@xa pt ,\tkz@xb pt) $) coordinate (tkz@tmp); \pgfmathparse{rnd} \let\myrnd\pgfmathresult \path[coordinate] ($ (#1)!\myrnd!(tkz@tmp) $) coordinate (tkzPointResult); } \makeatother \endinput