在 n 个圆圈组成的花束上添加箭头和圆点

在 n 个圆圈组成的花束上添加箭头和圆点

我发现问题中解释了如何画一束n圆圈和问题解释了如何在每条线上画一个箭头。我想把这两个答案结合起来画一束n每个圆圈中间都有一个箭头,但将这两个问题结合起来,就会得到一束n到处都是带箭头的圆圈。我想知道是否有人知道如何调整这些答案来解决我的问题。

另外,我会去掉一片花瓣,用一些点代替它们(以显示n花瓣)。我可以通过限制绘图命令的范围来删除一个花瓣,但如何获取点呢?

我知道这可能不是一个好问题,但我查看了 PGF 手册并且仍然无法得出一个好的结果,因此任何帮助都将不胜感激。

编辑我添加的代码基本上是两个链接问题的答案的组合,但不知道如何让它像其他答案一样出现在灰色方块中(我查看了这些答案的编辑按钮以查看是否需要某些命令,但没有找到这个)。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,decorations.markings}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\pgfplotsset{compat=newest}

\begin{document}
\tikzset{
  % style to apply some styles to each segment of a path
  on each segment/.style={
    decorate,
    decoration={
      show path construction,
      moveto code={},
      lineto code={
        \path [#1]
        (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
      },
      curveto code={
        \path [#1] (\tikzinputsegmentfirst)
        .. controls
        (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
        ..
        (\tikzinputsegmentlast);
      },
      closepath code={
        \path [#1]
        (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
      },
    },
  },
  % style to add an arrow in the middle of a path
  mid arrow/.style={postaction={decorate,decoration={
        markings,
        mark=at position .5 with {\arrow[#1]{stealth}}
      }}},
}

 \begin{tikzpicture}
\begin{polaraxis}
\addplot[mark=none,domain=0:360,samples=300,postaction={on each segment={mid arrow=red}}] {cos(5*x)};
\end{polaraxis}
\end{tikzpicture}
\end{document}

答案1

最小版本(带点):

\documentclass[tikz,border=5pt]{standalone}

\begin{document}
\begin{tikzpicture}
\def\bouquetN{5}
\pgfmathsetmacro{\MaxAng}{360/\bouquetN}
\foreach \X in {2,...,\bouquetN}
{
\draw[blue,-latex,thick] (0,0)
to[out={\MaxAng*\X-\MaxAng/4},in={\MaxAng*\X-90}] ({\MaxAng*\X+2}:3);
\draw[blue,thick] (0,0)
to[out={\MaxAng*\X+\MaxAng/4},in={\MaxAng*\X+90}] ({\MaxAng*\X}:3);
}
\foreach \X in {-1,0,1}
{\draw[blue,fill=blue] ({\MaxAng+\X*\MaxAng/4}:2.4) circle (4pt); }
\end{tikzpicture}
\end{document}

在此处输入图片描述

按照链接中的代码:您的代码产生大量箭头的原因在于您将箭头放在每个段上。如果您进一步增加箭头samples,则会得到更多箭头。如果您只想将箭头放在特定点上,则可以使用

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,decorations.markings}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\pgfplotsset{compat=newest}

\begin{tikzpicture}
\begin{polaraxis}
\addplot[mark=none,domain=0:360,samples=300,postaction={
decorate,decoration={markings, mark=at position .1 with {\arrow{stealth}},
mark=at position .3 with {\arrow{stealth}},
mark=at position .5 with {\arrow{stealth}},
mark=at position .7 with {\arrow{stealth}},
mark=at position .9 with {\arrow{stealth}}
}}] {cos(5*x)};
\end{polaraxis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

这里,位置源于需要有 5 个等距点的要求。因此,如果您改为绘图cos(4*x),则会有四个位置,分别为0.1250.375和,等等。原则上,可以编写一个宏来查找这些位置。但是,我宁愿不这样做0.6250.875因为据我所知,您不能以这种方式弯曲箭头。

因此,我想说,你可能想用基本 Ti 来做这件事Z 语法而不是 pgfplots,因为这样弯曲箭头更直接。(我知道您可能不一定希望它们弯曲,但其他人可能希望。)

\documentclass[tikz,border=5pt]{standalone}
\usetikzlibrary{arrows.meta,bending}

\begin{document}
\begin{tikzpicture}
\def\bouquetN{3}
\foreach \X in {1,...,\bouquetN}
{\pgfmathsetmacro{\MaxAng}{360/\bouquetN}
\draw[blue,-{Latex[length=2mm,bend]},thick] (0,0)
to[out={\MaxAng*\X-\MaxAng/4},in={\MaxAng*\X-90}] ({\MaxAng*\X+2}:3);
\draw[blue,thick] (0,0)
to[out={\MaxAng*\X+\MaxAng/4},in={\MaxAng*\X+90}] ({\MaxAng*\X}:3);
}
\end{tikzpicture}
\end{document}

在此处输入图片描述

\def\bouquetN{4}

在此处输入图片描述

问题标题中还提到一个点,但我不知道将其放在哪里。

相关内容