
Estou tentando desesperadamente fazer isso funcionar
\documentclass{minimal}
\usepackage{tikz}
\newcommand\polygon[3][]{
\pgfmathsetmacro{\angle}{360/#2}
\pgfmathsetmacro{\startangle}{0}
\begin{scope}[#1]
\draw \foreach\i in {1,...,#2}{
\pgfmathsetmacro{\x}{cos(\startangle + \angle*\i)*#3}
\pgfmathsetmacro{\y}{sin(\startangle + \angle*\i)*#3}
\ifnum\i=1 \else--\fi ({\x},{\y})
};
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{5}{1}
\end{tikzpicture}
\end{document}
Procurei por toda a internet tentando obter dicas de problemas de outras pessoas que pudessem me ajudar a fazer isso funcionar, mas ainda recebo esse erro
Package tikz Error: Giving up on this path. Did you forget a semicolon?.
Que ponto estou perdendo? Não tenho experiência anterior com TikZ.
ATUALIZAR:
depois de fazer vários testes, percebi que meu problema está de alguma forma relacionado aos dois \pgfmathsetmacro
dentro do loop. Alguma dica sobre como fazer isso funcionar?
Responder1
Você queria algo assim?
\documentclass[tikz,border=5pt]{standalone}
\newcommand\polygon[3][]{
\pgfmathsetmacro{\angle}{360/#2}
\pgfmathsetmacro{\startangle}{0}
\begin{scope}[#1]
\draw \foreach\i in {1,...,#2}{
\ifnum\i=1 \else--\fi ({cos(\startangle + \angle*\i)*#3},{sin(\startangle + \angle*\i)*#3})
};
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{5}{1}
\end{tikzpicture}
\end{document}
Não acho que você possa usar coisas como \pgfsetmacro
no meio de um caminho, mas pode simplesmente colocar os cálculos na especificação das coordenadas.
Isso produz um pentágono aberto:
minimal
A propósito, não use como exemplo.
EDITAR
Observe que você também pode usar um arquivo pic
. Não sei exatamente o que você quer colocar na especificação do escopo, mas você pode passar algumas coisas usando pic actions
o seguinte:
\documentclass[tikz,border=5pt]{standalone}
\tikzset{
pics/open polygon/.style n args=2{
code={
\pgfmathsetmacro{\angle}{360/#1}
\pgfmathsetmacro{\startangle}{0}
\draw [pic actions] \foreach\i in {1,...,#1}{
\ifnum\i=1 \else--\fi ({cos(\startangle + \angle*\i)*#2},{sin(\startangle + \angle*\i)*#2})
};
}
},
}
\begin{document}
\begin{tikzpicture}
\pic [draw=cyan!50!blue, outer color=cyan!50!blue, inner color=cyan!15] {open polygon={5}{1}};
\end{tikzpicture}
\end{document}
Responder2
O problema vem de uma macro de cálculo dentro do \draw
caminho. Então, sugiro separar o cálculo do desenho, primeiro realizando os cálculos e armazenando os resultados em \coordinate
s rotulados a-1
, a-2
, ..., a-n
, e depois desenhando o caminho com o auxílio dessas coordenadas. Aqui está como você pode fazer isso:
\documentclass{standalone}
\usepackage{tikz}
\newcommand\polygon[3][]{
\pgfmathsetmacro{\angle}{360/#2}
\pgfmathsetmacro{\startangle}{0}
\begin{scope}[#1]
\foreach\i in {1,...,#2}{
\pgfmathsetmacro{\x}{cos(\startangle + \angle*\i)*#3}
\pgfmathsetmacro{\y}{sin(\startangle + \angle*\i)*#3}
\coordinate (a-\i) at ({\x},{\y});
}
\draw\foreach \i in{1,...,#2}{\ifnum\i=1 \else --\fi (a-\i)};
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{5}{1}
\end{tikzpicture}
\end{document}