
我有一個形狀繪圖模板,它根據形狀的邊數繪製形狀的頂點座標。然而,對於有很多邊的形狀,必須輸入 (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}
這裡我對第0個座標做了不同的處理,改成了\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}
當然還有很多方法可以做到這一點,包括圖形繪製庫(例如參見 pgfmanual v3.1.5 第 274 頁上半部分的範例)、鏈(參見 pgfmanual v3.1.5 第 604 頁上的範例)或者讓連接遵循一個圓圈。