나는 다음을 사용하여 다각형을 구성했으며 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.5cm 이동하여 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};
}
여기서 차이점은 하나의 경우 +
새 위치가 활성 위치로 만들어지지 않으므로 다음 위치를 계산할 때 기준 위치가 여전히 이라는 것입니다 (\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}
그 결과로....