考虑下图
由下面的代码生成。
\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}