更新

更新

如何在随机位置(在xy方向上随机间隔)绘制如下所示的圆形路径?

梅威瑟:

\documentclass[border = 0.12cm,tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing,snakes}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[x = 4.5in, y = 2in]
\fill [blue!20] (0,0) -- (1,0) -- (1,0.5) -- (0,0.5) -- cycle;

\foreach \x in {0.05,0.075,0.25,0.35,0.45,0.55,0.65,0.85}
  \draw [>=stealth,->] (\x,0.1) arc (280:0:.1cm) -- +(283:0.05cm);

\end{tikzpicture}
\end{document}

答案1

您可以使用泊松圆盘采样库(您可以在这个答案)。

您需要将该答案的内容复制/粘贴到具有这些名称的两个文件中。您还需要一个poisson.sty编译工作。poisson.lualualatex

然后,使用它,您可以编译以下代码(这一个需要 PGF=>3.0,稍后请参阅与 PGF<3.0 一起使用的其他示例)

\documentclass{article}
\usepackage{tikz}
\usepackage{poisson}
\begin{document}
\edef\mylist{\poissonpointslist{5}{5}{0.5}{20}}

\tikzset{
    circular arrow/.pic={
      \draw [>=stealth,->] (0,0.1) arc (280:0:.1cm) -- +(283:0.05cm);
    }
}
\begin{tikzpicture}
     \foreach \x/\y in \mylist {
         \path (\x,\y) pic {circular arrow};
     }
\end{tikzpicture}
\end{document}

结果

该行\edef\mylist{\poissonpointslist{5}{5}{0.5}{20}}用于创建放置每个图片的随机坐标。您可以更改参数:前两个参数是放置坐标的矩形的宽度和高度。第三个参数(0.5)是随机坐标之间允许的最小距离。最后一个参数(20)由算法内部使用,并在速度和结果之间进行权衡,通常将其设置为 15 或 30 之间的值。

这是另一个例子,其中箭头更密集,并且不使用pic(因此它使用 PGF<3.0 进行编译,但仍然需要 lualatex)

\documentclass{article}
\usepackage{tikz}
\usepackage{poisson}
\begin{document}
\edef\mylist{\poissonpointslist{5}{5}{0.25}{20}}

\begin{tikzpicture}
     \foreach \x/\y in \mylist {
         \draw[>=stealth, ->] (\x,\y) arc (280:0:.1cm) -- +(283:0.05cm);
     }
\end{tikzpicture}
\end{document}

结果:

第二个例子

更新

x为了创建您在示例中提供的矩形,我将在和中使用相同的比例y,以强制中心均匀分布。此外,算法要填充的区域的大小应该比您填充的矩形小一点(因为算法只生成坐标,事先不知道您将在每个坐标处绘制的图片的大小)。因此,例如:

\edef\mylist{\poissonpointslist{4.4}{0.9}{0.2}{20}}
\begin{tikzpicture}[x=1in, y=1in]
    \fill[blue!20] (0,0) rectangle (4.5,1);
     \foreach \x/\y in \mylist {
         \draw[>=stealth, ->] (.02,0.02) +(\x,\y) arc (280:0:.1cm) -- +(283:0.05cm);
     }
\end{tikzpicture}

此示例不需要 PGF3.0,并且产生:

结果

答案2

另一种方法是很多速度较慢,并导致很多比 JLDiaz 的泊松抽样结果更不吸引人的结果来自tikz:均匀随机分布圆圈. 唯一的优点是这不需要lualatex

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\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{0.5*#3+rnd*(#1-#3)}
        \pgfmathsetmacro\y{0.5*#3+rnd*(#2-#3)}
        \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}
            \draw [>=stealth,->] (\x,\y) ++(280:#3) arc (280:0:#3) -- +(283:0.05cm);
        \fi 

    }
}

\begin{tikzpicture}
\pgfmathsetseed{1}
\fillrandomly{10}{4}{0.1}{50}

\end{tikzpicture}
\end{document}

相关内容