Tikz dibujando una forma con bucle foreach

Tikz dibujando una forma con bucle foreach

Tengo una plantilla de dibujo de formas que traza las coordenadas de los vértices de una forma en función de cuántos lados tiene. Sin embargo, con formas con muchos lados, tener que escribir (a1)-(a2) y así sucesivamente se vuelve un poco tedioso, así que intenté usar un bucle foreach. Algo como

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

Pero esto no funciona y cuando lo miro no espero que lo haga, pero no tengo idea de cómo hacerlo.

Aquí está mi código:

,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}

Respuesta1

¡Bienvenido! ¿Quieres algo como esto?

\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}

ingrese la descripción de la imagen aquí

Aquí traté la coordenada 0 de manera diferente, la cambié \pgfmathsetmacroa \pgfmathtruncatemacrodonde fuera ventajoso, agregué un signo de multiplicación *y -- cycle.

Quizás quieras hacerlo un poco más elegante.

\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}

ingrese la descripción de la imagen aquí

Por supuesto, hay muchas más formas de hacer esto, incluidas bibliotecas de dibujo de gráficos (ver, por ejemplo, el ejemplo en la parte superior de la página 274 de pgfmanual v3.1.5), cadenas (ver el ejemplo en la página 604 de pgfmanual v3.1.5) odejando que las conexiones sigan un círculo.

información relacionada