这个问题扩展了已经回答过的问题:在投影机中随机排列图像。由于发布正确答案的人似乎不再活跃,因此我正在创建一个新问题。
问题是:有没有办法让节点不互相重叠,但仍然随机分布在幻灯片上?
我尝试找到一个结构来存储节点,然后检查重叠并尝试移动它们,但我没有找到正确的数据结构。开始认为这可能是不可能的。
答案1
修改https://tex.stackexchange.com/a/87518/190633:
\documentclass{beamer}
\usepackage{tikz}
\def\xlist{4}
\def\ylist{4}
\newcommand{\fillrandomly}[4]{
\pgfmathsetmacro\diameter{#3*2}
% \draw (0,0) rectangle (#1,#2);
\foreach \i in {1,...,#4}{
\pgfmathsetmacro\x{rnd*#1}
\pgfmathsetmacro\y{rnd*#2}
\xdef\collision{0}
\foreach \element [count=\i] in \xlist{
\pgfmathtruncatemacro\j{\i-1}
\pgfmathsetmacro\checkdistance{ sqrt( ({\xlist}[\j]-(\x))^2 + ({\ylist}[\j]-(\y))^2 ) }
\ifdim\checkdistance pt<\diameter pt
\xdef\collision{1}
\breakforeach
\fi
}
\ifnum\collision=0
\xdef\xlist{\xlist,\x}
\xdef\ylist{\ylist,\y}
\node at (\x,\y) {\includegraphics[width=1cm]{example-image}};
% \draw [red, thick] (\x,\y) circle [radius=#3];
\fi
}
}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\pgfmathsetseed{2}
\fillrandomly{10}{5}{0.65}{100}
\end{tikzpicture}
\end{frame}
\end{document}