谢谢您的回答。在下面的代码中:
\begin{tikzpicture}
\path[use as bounding box] (-1.8,-1.8) rectangle (1.8,1.8);
\draw[clip] plot[smooth cycle,variable=\t,samples at={0,45,...,315}] (\t:{1.5*(1+0.1*rnd)});
\foreach \X [count=\Y starting from 0] in {red,blue,green!70!black}
{\draw[\X] plot[smooth,variable=\t,samples at={0,0.25,...,1.75}]
({15+6*(rnd-0.5)+120*\Y}:\t);
}
\end{tikzpicture}
答案1
这是通过构造 来使参数更加明显的尝试pic
。例如考虑
\path (4,0) pic{random circle={radius=2,rays=4,offset angle=60,radius variation=0.2}};
这(4,0)
是中心,半径为 2,有四条射线和稍大的半径变化。输出是右侧圆,左侧圆保留(0,0)
以供比较。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[pics/random circle/.style={code={
\tikzset{random circle/.cd,#1}
\begin{scope}
\draw[clip] plot[smooth cycle,variable=\t,samples at={0,45,...,315}]
(\t:{\pgfkeysvalueof{/tikz/random circle/radius}*(1+
\pgfkeysvalueof{/tikz/random circle/radius variation}*(rnd-0.5))});
\pgfmathsetmacro{\endrad}{\pgfkeysvalueof{/tikz/random circle/radius}*(1+\pgfkeysvalueof{/tikz/random circle/radius variation})}
\foreach \Y in {0,...,\the\numexpr\pgfkeysvalueof{/tikz/random circle/rays}-1}
{\pgfmathsetmacro{\mycolor}{{\pgfkeysvalueof{/tikz/random circle/colors}}[\Y]}
\draw[\mycolor] plot[smooth,variable=\t,samples at={0,0.25,...,\endrad}]
({\pgfkeysvalueof{/tikz/random circle/offset angle}+
\pgfkeysvalueof{/tikz/random circle/angle variation}*(rnd-0.5)+\Y*360/\pgfkeysvalueof{/tikz/random circle/rays}}:\t);
}
\end{scope}}},random circle/.cd,radius/.initial=1.5,radius variation/.initial=0.1,
rays/.initial=3,offset angle/.initial=15,angle variation/.initial=6,
colors/.initial={"red","blue","green!70!black","orange","purple","cyan"}]
\path (0,0) pic{random circle}
(4,0) pic{random circle={radius=2,rays=4,offset angle=60,radius variation=0.2}};
\end{tikzpicture}
\end{document}
您可以改变的参数还有更多,例如颜色和光线的随机性,甚至可以设置更多参数 pgf 键。这是否有意义取决于这一切的最终目的。
答案2
以下代码绘制一个以 (0,0) 为中心、半径为 1cm 的圆
\begin{tikzpicture}
\draw (0,0) circle [radius=1cm];
\draw[draw=red,thick] (0,0)--(1,0);
\draw[draw=blue,thick] (0,0)--({cos(120)},{sin(120)});
\draw[draw=green,thick] (0,0)--({cos(240)},{sin(240)});
\fill (0,0) circle (1.3pt);
\end{tikzpicture}
以及以下代码
\begin{tikzpicture}
\path[use as bounding box] (-1.8,-1.8) rectangle (1.8,1.8);
\draw[clip] plot[smooth cycle,variable=\t,samples at={0,45,...,315}] (\t:{1*(1+0.1*rnd)});
\foreach \X [count=\Y starting from 0] in {red,blue,green!70!black}
{\draw[\X] plot[smooth,variable=\t,samples at={0,0.25,...,1.75}]
({15+6*(rnd-0.5)+120*\Y}:\t);
}
\end{tikzpicture}
绘制半径为 1 的圆的随机变形。现在,我想问一些问题。如果您能帮助我,我将不胜感激。
- 对上面的第二段代码(上面的代码)做哪些修改我可以绘制一个以(-3,0)为中心的圆?
第二段代码第一行的用途是什么?
\path[用作边界框] (-1.8,-1.8) 矩形 (1.8,1.8);
在 tikz 中,(x,x) 和 (\x:{\x}) 有什么不同,例如 (0,0) 在
\绘制(0,0)圆[半径=1cm];
和 (\t:{1*(1+0.1*rnd)}) 在
\draw[clip] plot[smooth cycle,variable=\t,samples at={0,45,...,315}] (\t:{1*(1+0.1*rnd)});