
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}
Aqui tratei a coordenada 0 de forma diferente, mudei \pgfmathsetmacro
para \pgfmathtruncatemacro
onde 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}
É 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.