Tikz рисует фигуру с помощью цикла foreach

Tikz рисует фигуру с помощью цикла foreach

У меня есть шаблон для рисования фигур, который выводит координаты вершин фигуры на основе количества ее сторон. Однако, для фигур с большим количеством сторон набирать (a1)-(a2) и так далее становится довольно утомительно, поэтому я попробовал использовать цикл foreach. Что-то вроде

\draw
\foreach \s in {0,1,...,\m}
{
{(a\s)--
}
};

Но это не работает, и когда я смотрю на это, я не ожидаю, что это сработает, но я понятия не имею, как еще это сделать.

Вот мой код:

,tex
\begin{tikzpicture}
\pgfmathsetmacro{\n}{15};
\pgfmathsetmacro{\angle}{360/\n};
\pgfmathsetmacro{\initialangle}{90+(\angle/2)(1-Mod(\n,2))};
\pgfmathsetmacro{\m}{\n-1};
\foreach \s in {0,1,...,\m}
{
\pgfmathsetmacro{\r}{\angle\s};
\coordinate (a\s) at (\initialangle+\r:3);
\draw (a\s) circle (0.1) node[above]{a\s};
}
\end{tikzpicture}

решение1

Добро пожаловать! Хотите что-то подобное?

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\pgfmathtruncatemacro{\n}{15};
\pgfmathsetmacro{\angle}{360/\n};
\pgfmathsetmacro{\initialangle}{90+(\angle/2)(1-Mod(\n,2))};
\pgfmathtruncatemacro{\m}{\n-1};
\foreach \s in {0,1,...,\m}
{
\pgfmathsetmacro{\r}{\angle*\s};
\coordinate (a\s) at (\initialangle+\r:3);
\draw (a\s) circle[radius=0.1] node[above]{a\s};
}
\draw (a0)
foreach \s in {1,...,\m}{-- (a\s)} -- cycle;
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Здесь я обработал нулевую координату по-другому, изменил ее \pgfmathsetmacroтам \pgfmathtruncatemacro, где это выгодно, добавил знак умножения *и -- cycle.

Возможно, вы захотите сделать его более нарядным.

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\pgfmathtruncatemacro{\n}{15};
\pgfmathsetmacro{\angle}{360/\n};
\pgfmathsetmacro{\initialangle}{90+(\angle/2)(1-Mod(\n,2))};
\pgfmathtruncatemacro{\m}{\n-1};
\path foreach \s in {0,1,...,\m}
{
 ({\initialangle+\angle*\s}:3) 
 node[circle,inner sep=0.5mm,draw,label={[circle,anchor={180+\initialangle+\angle*\s}]$a_{\s}$}] 
 (a\s) {}
}; 
\draw  foreach \s [remember=\s as \lasts (initially \m)]
 in {0,1,...,\m} { (a\lasts)-- (a\s)};
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Конечно, есть гораздо больше способов сделать это, включая библиотеки рисования графов (см., например, пример в верхней части стр. 274 pgfmanual v3.1.5), цепочки (см. пример на стр. 604 pgfmanual v3.1.5) илипозволяя соединениям следовать по кругу.

Связанный контент