如何绘制不规则的圆形(形状)?

如何绘制不规则的圆形(形状)?

我想在我的无线场景中绘制一些不规则的圆圈(形状)。

中心处有一个基站。

周围是一些不规则的圆圈(形状)。

我在这个网站上找到了一些可用的东西(但我觉得它太大了)


现在老师让我把这个圆尽量弄小,但是我发现当我把半径调小时,不规则圆的圆度就不那么明显了。有什么办法可以解决这个问题吗?

答案1

使用 PSTricks(仅用于打字练习)。

单身的

在此处输入图片描述

  • 详细:

    \documentclass[pstricks,border=12pt]{standalone}
    \usepackage{pst-node,pst-plot}
    \pstVerb{realtime srand}
    \psset{plotpoints=50}
    \def\points{}
    
    \begin{document}
    \begin{pspicture}(-2,-2)(2,2)
        \curvepnodes{0}{360}{Rand 1.50 add t PtoC}{X}
        \multido{\i=0+1}{\Xnodecount}{\xdef\points{\points (X\i)}}
        \expandafter\psccurve\points
    \end{pspicture}
    \end{document}
    
  • 袖珍的:

    \psnccurve是一个新的宏(还有其他宏),用于pst-node传递节点数组,而 \psccurve无需创建连接宏\points(如上面的代码中所使用的)。现在我可以节省更多击键次数。

    \documentclass[pstricks,border=12pt]{standalone}
    \usepackage{pst-node,pst-plot}
    \pstVerb{realtime srand}
    \psset{plotpoints=50}
    
    \begin{document}
    \begin{pspicture}(-2,-2)(2,2)
        \curvepnodes{0}{360}{Rand 1.50 add t PtoC}{X}
        \psnccurve(0,\Xnodecount){X}
    \end{pspicture}
    \end{document}
    

多种的

在此处输入图片描述

  • 详细:

    \documentclass[pstricks,border=12pt]{standalone}
    \usepackage{pst-node,pst-plot}
    \pstVerb{realtime srand}
    \psset{plotpoints=50}
    
    \begin{document}
    \psLoop{10}{%
    \begin{pspicture}(-2,-2)(2,2)
        \curvepnodes{0}{360}{Rand 1.50 add t PtoC}{X}
        \def\points{}% empty for each iteration
        \multido{\i=0+1}{\Xnodecount}{\xdef\points{\points (X\i)}}
        \expandafter\psccurve\points
    \end{pspicture}}
    \end{document}
    
  • 袖珍的:

    \documentclass[pstricks,border=12pt]{standalone}
    \usepackage{pst-node,pst-plot}
    \pstVerb{realtime srand}
    \psset{plotpoints=50}
    
    \begin{document}
    \psLoop{10}{%
    \begin{pspicture}(-2,-2)(2,2)
        \curvepnodes{0}{360}{Rand 1.50 add t PtoC}{X}
        \psnccurve(0,\Xnodecount){X}
    \end{pspicture}}
    \end{document}
    

笔记

\psnline\psncurve\psnccurve可用,但\psnpolygon不可用。

注意力

请注意,Rand不再产生 0 到 0.5 之间的随机实数(含)。其定义已被默认更改。现在它产生 0 到 1 之间的随机实数(含)。它没有记录,也没有公布,但它仍然很有趣!

上面给出的代码尚未更新,因此会产生不同的输出。我现在没有时间更新它。很抱歉给您带来不便。

答案2

使用该rand函数,您可以编写\irregularcircle宏:

在此处输入图片描述

\documentclass[tikz]{standalone}

\newcommand\irregularcircle[2]{% radius, irregularity
  \pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
  +(0:\len pt)
  \foreach \a in {10,20,...,350}{
    \pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
    -- +(\a:\len pt)
  } -- cycle
}

\begin{document}
\begin{tikzpicture}
  \coordinate (c) at (0,0);
  \coordinate (d) at (1,2);
  \draw[blue,rounded corners=1mm] (c) \irregularcircle{1cm}{1mm};
  \draw[red,rounded corners=1mm] (d) \irregularcircle{1cm}{1mm};
\end{tikzpicture}
\end{document}

编辑:使用操作的变体let(来自calc库):

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\newcommand\irregularcircle[2]{% radius, irregularity
  let \n1 = {(#1)+rand*(#2)} in
  +(0:\n1)
  \foreach \a in {10,20,...,350}{
    let \n1 = {(#1)+rand*(#2)} in
    -- +(\a:\n1)
  } -- cycle
}

\begin{document}
\begin{tikzpicture}
  \coordinate (c) at (0,0);
  \coordinate (d) at (1,2);
  \draw[blue,rounded corners=.5mm] (c) \irregularcircle{1cm}{1mm};
  \draw[red,rounded corners=.5mm] (d) \irregularcircle{1cm}{1mm};
\end{tikzpicture}
\end{document}

答案3

您可以使用plot

  \documentclass{scrbook}
  \usepackage{tikz}
  \begin{document}
        \begin{tikzpicture}
            \draw  plot[smooth, tension=.7] coordinates {(-3.5,0.5) (-3,2.5) (-1,3.5) (1.5,3) (4,3.5) (5,2.5) (5,0.5) (2.5,-2) (0,-0.5) (-3,-2) (-3.5,0.5)};
        \end{tikzpicture}

    \begin{tikzpicture}
        \draw  plot[smooth, tension=.8] coordinates {(-2.5,-0.5) (-3.5,0) (-2.5,0.5) (-3,1) (-2,1.5) (-2,3) (-1,2.5) (1,4.5) (2.5,3) (3,3.5) (3.5,3) (3,2) (4.5,2) (4.5,0) (3,1) (2.5,-0.5) (3.5,-1.5) (1.5,-1) (0.5,-2) (-2,-2.5) (-1.5,-1) (-2.5,-1.5) (-2.5,-0.5)};
    \end{tikzpicture}
  \end{document}

在此处输入图片描述

使用与上面相同的点,可以使用优秀hobby包绘制曲线:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}
    \begin{tikzpicture}[use Hobby shortcut,closed=true]
        \draw (-3.5,0.5) .. (-3,2.5) .. (-1,3.5).. (1.5,3).. (4,3.5).. (5,2.5).. (5,0.5) ..(2.5,-2).. (0,-0.5).. (-3,-2).. (-3.5,0.5);
    \end{tikzpicture}

    \begin{tikzpicture}[use Hobby shortcut,closed=true]
        \draw (-2.5,-0.5).. (-3.5,0).. (-2.5,0.5).. (-3,1).. (-2,1.5).. (-2,3).. (-1,2.5).. (1,4.5).. (2.5,3).. (3,3.5).. (3.5,3).. (3,2).. (4.5,2).. (4.5,0).. (3,1).. (2.5,-0.5).. (3.5,-1.5).. (1.5,-1).. (0.5,-2).. (-2,-2.5).. (-1.5,-1).. (-2.5,-1.5).. (-2.5,-0.5);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

选择您想要的积分,其余的交给hobby。如需更多详细信息,请使用texdoc hobbytexdoc.net

答案4

Paul Gaborit 的答案有点过时了。现在rand有了这个功能rnd,并且有一个decorations库,可用于制作具有尖锐不规则性的不规则圆。

对于平滑不规则性,plot路径说明符(由用户 11232 使用)也可以与函数一起使用rnd,从而无需创建坐标。下面的 MWE 介绍了这两种解决方案。

在此处输入图片描述

平均能量损失

\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}

\begin{document}
  \begin{tikzpicture}
    \draw plot[domain=0:350, smooth cycle] (\x:2+rnd*0.5);

    \draw[decoration={random steps, amplitude=2mm}, decorate] (4.5,0) circle (2);
  \end{tikzpicture}
\end{document}

相关内容