Tikz desenhando uma forma com loop foreach

Tikz desenhando uma forma com loop foreach

Eu tenho um modelo de desenho de forma que plota as coordenadas dos vértices de uma forma com base em quantos lados ela possui. No entanto, com formas com muitos lados, ter que digitar (a1)-(a2) e assim por diante fica meio tedioso, então tentei usar um loop foreach. Algo como

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

Mas isso não funciona e quando olho para isso não espero que funcione, mas não tenho ideia de como fazer isso

Aqui está meu 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}

Responder1

Bem-vindo! Você quer algo como isso?

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

insira a descrição da imagem aqui

Aqui tratei a coordenada 0 de forma diferente, mudei \pgfmathsetmacropara \pgfmathtruncatemacroonde fosse vantajoso, adicionei um sinal de multiplicação *e -- cycle.

Você pode querer torná-lo um pouco mais sofisticado.

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

insira a descrição da imagem aqui

É claro que existem muitas outras maneiras de fazer isso, incluindo bibliotecas de desenho gráfico (veja, por exemplo, o exemplo na parte superior da pág. 274 do pgfmanual v3.1.5), cadeias (veja o exemplo na pág. 604 do pgfmanual v3.1.5) oudeixando as conexões seguirem um círculo.

informação relacionada