我有兴趣制作一系列包含运动图形的球来代表气体。因此,我想对这组“运动中的球”(我以后将其简称为 mball)中的每一个应用旋转根据随机角度。
我到目前为止的代码如下所示
\documentclass{article}
\usepackage{tikz}
\usepackage{xcolor}
\usetikzlibrary{arrows,snakes,backgrounds}
%Colors%
\definecolor{Red}{rgb}{0.922526, 0.385626, 0.209179}
%Defs%
\def\ball at (#1,#2){\draw[fill=Red!30,Red!30] (#1,#2) circle (4pt);
\draw[fill=Red!50,Red!50] (#1,#2)+(.15cm,0) circle (4pt);
\draw[fill=Red!70,Red!70] (#1,#2)+(.3cm,0) circle (4pt);}
\begin{document}
\begin{tikzpicture}
\foreach \x in {-2,...,2}
\foreach \y in {-2,...,2}
{\ball at (\x,\y)}
\end{tikzpicture}
\end{document}
产生
到目前为止,我尝试了几种方法,但我的问题在于,特别是让每个 mball 获得不同的角度。也就是说,角度的随机性并不是什么大问题,但如果我尝试在循环中添加角度,这可能取决于变量 \x 或 \y,它就行不通,我的意思是,我尝试了类似
\foreach \x in {-2,...,2}
\foreach \y in {-2,...,2}
{[rotate=15*\x*\y]\ball at (\x,\y)}
或甚至固定角度
\foreach \x in {-2,...,2}
\foreach \y in {-2,...,2}
{[rotate=30]\ball at (\x,\y)}
甚至固定角度。所以,总结一下,我的问题是:
(1) 我应该如何调整语法才能使其正常工作?也就是说,我希望仍然能够执行循环并在每个步骤中对 mball 进行旋转。
(2)不太重要,但相关,从这个角度实现随机性的最佳方法是什么?
答案1
您选择以自己的方式定义命令\ball
会消除轻松将可选参数(如旋转角度)传递给构造的可能性。
这可以通过重写命令的定义来解决。但是 tikZ/pgf 为您的问题提供了现成的解决方案:pic
s。
来自手册:
这个想法是,图片只是一些代码,您可以使用 pic 命令将其添加到图片的不同位置,该命令的语法几乎与节点命令相同。
根据您的情况(我已根据我的个人喜好调整了您的代码),
\tikzset{balls/.pic={
\fill[Red!30] (-.15cm,0) circle (4pt);
\fill[Red!50] (0,0) circle (4pt);
\fill[Red!70] (.15cm,0) circle (4pt);}
}
在您之前插入tikzpicture
将允许您在任意位置插入三个球的旋转版本:
\pic[rotate=10] at (3,2) {balls};
现在,Jairo A. del Rio 的评论很容易实现:
\documentclass{article}
\usepackage{tikz}
%Colors%
\definecolor{Red}{rgb}{0.922526, 0.385626, 0.209179}
\tikzset{balls/.pic={
\fill[Red!30] (-.15cm,0) circle (4pt);
\fill[Red!50] (0,0) circle (4pt);
\fill[Red!70] (.15cm,0) circle (4pt);}
}
\begin{document}
\begin{tikzpicture}
\foreach \x in {-2,...,2}
\foreach \y in {-2,...,2}
{\pgfmathsetmacro{\myangle}{360*rnd}
\pic[rotate=\myangle] at (\x,\y) {balls};}
\end{tikzpicture}
\end{document}