Прямоугольник с точками, равномерно распределенными внутри в Тикз

Я пытаюсь нарисовать прямоугольник со случайными точками внутри с помощью tikz. Моя попытка такова:

\documentclass[tikz]{standalone}

\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usetikzlibrary{calc}

\pgfmathsetseed{20}

\tikzset{
    particle/.style = {draw,circle,inner sep=0,outer sep=0,minimum size=3}
}

\tikzset{
    pics/PE/.style
        2 args={
            code={
                \node[
                draw,rectangle,
                minimum width=80,minimum height=40] (main) at (0,0) {};
                \foreach \i in {1,...,#2}
                {
                    \path let \p1 = (main.south west), \p2 = (main.north east) in
                    node[particle] at 
                    ($ (main.south west) + ({random(\x1,\x2)},{random(\y1,\y2)}) $) {};
                }
            }
        }
}

\begin{document}


    \begin{tikzpicture}
        \draw pic {PE={1}{30}};
    \end{tikzpicture}


\end{document}

... но это не работает. Кажется, я не могу использовать координату внутри вызова случайной функции. Это так? Любой обходной путь?

Ваше здоровье!!


person manu    schedule 04.12.2015    source источник


Ответы (1)


Как бы то ни было, в итоге я сделал это вот так (вероятно, не лучшее решение ...)

\newcommand{\PEwidth}{10}
\newcommand{\PEheight}{5}

\tikzset{
    pics/PE/.style
            2 args={
                    code={
                            \draw (0,0) rectangle (\PEwidth,\PEheight);
                            \foreach \i in {1,...,#2}
                            {
                                    \pgfmathsetmacro\x{0.1*\PEwidth + 0.8*\PEwidth*rnd}
                                    \pgfmathsetmacro\y{0.1*\PEheight + 0.8*\PEheight*rnd}
                                    \node[particle] at (\x,\y) (-\i) {};
                            }
                    }
            }
}
person manu    schedule 10.12.2015