我已經使用構建了一個多邊形tikz
,並且想知道如何按照下圖所示的方式標記點
我建造了我的多邊形,如下所示:
\documentclass{article}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
\node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture} [scale = 0.2]
\coordinate (a) at (10,0);
\coordinate (b) at (8,5);
\coordinate (c) at (5,8);
\coordinate (d) at (0,10);
\coordinate (e) at (-5,8);
\coordinate (f) at (-8,5);
\coordinate (g) at (-10,0);
\coordinate (h) at (-8,-5);
\coordinate (i) at (-5,-8);
\coordinate (j) at (0,-10);
\coordinate (k) at (5,-8);
\coordinate (l) at (8,-5);
\draw (a) -- (b) --(c) -- (d) -- (e) -- (f) -- (g) -- (h) -- (i) -- (j) -- (k) -- (l) -- (a);
\draw[thick] (0,12) -- (0,-12);
\draw[thick] (12,0) -- (-12,0);
\node[above] at (7.5,0.2) {\circled{1}};
\node[above] at (12,0.2){(10,0)};
\end{tikzpicture}
\end{figure}
\end{document}
找到添加標籤的正確座標以及多面體上對應點的座標確實很麻煩。這些標籤通常看起來很難看,而且位置也不好。我可以使用任何特定命令來簡化該過程嗎?
謝謝!
答案1
這減少了程式碼量,但結果可能會更好。 (如果某個嚮導提出了更好的解決方案,我可能會刪除這個答案。)
標籤按以下循環放置:
\foreach [count=\i] \x/\y in {10/0,8/5,5/8,0/10,-5/8,-8/5,-10/0,-8/-5,-5/-8,0/-10,5/-8,8/-5}
{
\path (\x,\y) ++({atan2(\y,\x)}:3.5cm) node [fill=white,inner sep=0pt] {$(\x,\y)$};
\path (\x,\y) ++({atan2(\y,\x)-180}:2cm) node [draw,circle,inner sep=2pt,fill=white]{\i};
}
這裡發生的只是使用極坐標來放置它們。++({atan2(\y,\x)}:3.5cm)
表示從前一個位置(此處為(\x,\y)
),沿角度 給定的方向移動 3.5 厘米atan2(\y,\x)
,並使該位置成為新的“活動”位置。然後將節點放置在該位置node [fill=white,inner sep=0pt] {$(\x,\y)$}
。
對於第二個\path
,請注意角度為atan2(\y,\x)-180
,這表示您不是遠離原點,而是向原點移動。因此,將這些節點放置在多邊形的內部,而不是外部。
再想一想,一個\path
指令其實就夠了:
\foreach [count=\i] \x/\y in {10/0,8/5,5/8,0/10,-5/8,-8/5,-10/0,-8/-5,-5/-8,0/-10,5/-8,8/-5}
{
\path (\x,\y) +({atan2(\y,\x)}:3.5cm) node [fill=white,inner sep=0pt] {$(\x,\y)$}
+({atan2(\y,\x)-180}:2cm) node [draw,circle,inner sep=2pt,fill=white]{\i};
}
這裡的差異在於,對於 1 +
,新位置不會成為活動位置,因此當計算下一個位置時,參考位置仍然是(\x,\y)
。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture} [scale = 0.2]
\draw (10,0)
\foreach \x/\y in {8/5,5/8,0/10,-5/8,-8/5,-10/0,-8/-5,-5/-8,0/-10,5/-8,8/-5,10/0}
{ -- (\x,\y)};
\draw[thick] (0,12) -- (0,-12);
\draw[thick] (12,0) -- (-12,0);
\foreach [count=\i] \x/\y in {10/0,8/5,5/8,0/10,-5/8,-8/5,-10/0,-8/-5,-5/-8,0/-10,5/-8,8/-5}
{
\path (\x,\y) ++({atan2(\y,\x)}:3.5cm) node [fill=white,inner sep=0pt] {$(\x,\y)$};
\path (\x,\y) ++({atan2(\y,\x)-180}:2cm) node [draw,circle,inner sep=2pt,fill=white]{\i};
}
\end{tikzpicture}
\end{document}
答案2
那這個呢?
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (-3,0) -- (3,0);
\draw (0,-3) -- (0,3);
\draw [blue, dashed] (0,0) circle(2.5cm);
\node[regular polygon, regular polygon sides=12, minimum size=5cm, rotate=-60, draw] at (0,0) (A) {};
\foreach \i in {1,...,12} {
\path (0,0) -- node [draw, circle, inner sep=0mm, minimum size=3ex, pos=0.8] {\i} (A.corner \i);
\path let \p1=($(A.corner \i)-(0,0)$),
\n1={\x1*0.0352777778},
\n2={\y1*0.0352777778}
in
\pgfextra{\edef\mya{\ifdim\x1<0pt left\else right\fi}}
(0,0) -- node [pos=1.0, \mya,sloped,scale=0.8]
{$(
\pgfmathprintnumber[fixed]{\csname strip@pt\endcsname\dimexpr\n1\relax},
\pgfmathprintnumber[fixed]{\csname strip@pt\endcsname\dimexpr\n2\relax}
)$} (\x1,\y1);
}
\end{tikzpicture}
\end{document}
結果是…