% tkz-obj-eu-points-rnd.tex
% Copyright 2011-2026  Alain Matthes
% SPDX-License-Identifier: LPPL-1.3c
% Maintainer: Alain Matthes

\typeout{2026/01/25 5.13c 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