2015-12-04 3 views
1

Я пытаюсь нарисовать прямоугольник с случайными точками внутри, используя tikz. Я стараюсь:Прямоугольник с точками, равномерно распределенными внутри в 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} 

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

Cheers !!

ответ

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) {}; 
          } 
        } 
      } 
}