在 TikZ 中沿线放置等距点阵列

在 TikZ 中沿线放置等距点阵列

考虑下图

在此处输入图片描述

由下面的代码生成。

\documentclass{standalone}
\usepackage{tikz}

\usetikzlibrary{calc}

\usetikzlibrary{shapes}
\usetikzlibrary{intersections}
\makeatletter
\newcommand{\gettikzxy}[3]{%
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
  \edef#2{\the\pgf@x}%
  \edef#3{\the\pgf@y}%
}
\makeatother


\begin{document}

\begin{tikzpicture}
  \coordinate (CTRL)     at ($(0,0)$) ;

  \node[draw, black, thick, ellipse,
  minimum height=3cm, minimum width=2cm,
  fill=yellow!15,name=ctrl,
  name path=ctrl] at (CTRL) {Control};

  \gettikzxy{(ctrl.south)}{\csx}{\csy}
  \gettikzxy{(ctrl.north)}{\cnx}{\cny}
  \fill[blue] (\csx, \csy) circle (2pt);
  \fill[blue] (\cnx, \cny) circle (2pt);

  
\end{tikzpicture}
\end{document}

我想从上到下向椭圆添加一系列点,如下所示。(理想情况下,点的数量应该可以通过参数配置)。所以我想要的结果就是这样。我该怎么做?

在此处输入图片描述

我想我正在寻找的是相当于numpy linspace 命令,但在 TikZ 代码中执行数学运算似乎非常冗长。我正在使用 pdflatex,但如果这可以使这更简单,我也会对使用 lualatex 的解决方案感兴趣。

答案1

使用\foreach循环和calc坐标计算,您可以轻松执行以下操作。

注释的路径与使用沿路径放置的节点相同。(使用,pic我们也可以对不能是节点的复杂绘图执行相同操作。)

这可以根据您需要的位置和方式实现更多自动化。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{calc, shapes.geometric}
\begin{document}
\begin{tikzpicture}
\coordinate (CTRL)     at (0,0);

\node[draw, black, thick, ellipse,
minimum height=3cm, minimum width=2cm,
fill=yellow!15,name=ctrl] at (CTRL) {Control};

\foreach \i in {0, ..., 7}
  \fill[blue] ($(ctrl.south)!\i/7!(ctrl.north)$) circle[radius=2pt];

%\path (ctrl.south) -- (ctrl.north)
%  node foreach \i in {0, ..., 7}
%    [circle, minimum size=4pt, inner sep=+0pt, fill=blue, pos=\i/7]{};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容