我正在画两个同心圆,箭头表示收缩。理想情况下,这些箭头都从两个圆的边缘开始,而不是像现在这样从外面或里面开始(见图)。我不知道如何做到这一点,同时像图中所示那样以随机步骤变形路径。
我怎样才能让箭头从变形的圆圈开始?
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
\draw[fill=gray!75,even odd rule,decorate,decoration={random steps,segment length=0.2cm,amplitude=.1cm}] (0,0) circle (1.2)circle (.5) ++(0,-1.2);
\foreach \n in {0,60,...,300}{
\draw[-stealth] (0,0)++(\n:0.5)--++(\n:.2);
\draw[-stealth] (0,0)++(\n:1.2)--++(\n:-.2);
}
\end{tikzpicture}
\end{document}
答案1
我会将环绘制为两条单独的路径,一条灰色,一条白色,然后可以与库一起使用intersections
。为了获得正确闭合的路径,我没有使用装饰random steps
来绘制环。
\documentclass[tikz,borde=5]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[>=stealth]
\draw [fill=gray!75, name path=A] (0:1.2)
\foreach \i [evaluate={\r=1.2+rand/10;}] in {10, 20,..., 350} { -- (\i:\r)}
-- cycle;
\draw [fill=white, name path=B] (0:0.5)
\foreach \i [evaluate={\r=0.5+rand/10;}] in {20, 40,..., 350} { -- (\i:\r)}
-- cycle;
\foreach \i in {0,45,...,315}{
\path [name path=C](0:0) -- (\i:2);
\draw [->, name intersections={of=A and C}]
(intersection-1) -- ++(\i+180:1/4);
\draw [->, name intersections={of=B and C}]
(intersection-1) -- ++(\i:1/4);
}
\end{tikzpicture}
\end{document}
一个稍微有点狡猾的方法是让路径有一个固定的半径,箭头从该半径“发射”,而其他地方则是随机的。然后中间的洞就可以成为一个真正的洞了:
\documentclass[tikz,border=5]{standalone}
\begin{document}
\begin{tikzpicture}[>=stealth]
\node [gray!20, scale=2] {Background};
\draw [fill=gray!75, even odd rule] (0:1.2)
\foreach \i [evaluate={\r=mod(\i, 45) ? 1.2+rand/20 : 1.2;}] in {5, 10,..., 355} { -- (\i:\r)}
-- cycle (0:0.5)
\foreach \i [evaluate={\r=mod(\i, 45) ? 0.5+rand/25 : 0.5;}] in {7.5,15,..., 352.5} { -- (\i:\r)}
-- cycle;
\foreach \i in {0,45,...,315}{
\draw [->] (\i:1.2) -- ++(\i+180:1/4);
\draw [->] (\i:0.5) -- ++(\i:1/4);
}
\end{tikzpicture}
\end{document}