tikzpicture에서 라벨 배치

tikzpicture에서 라벨 배치

나는 다음을 사용하여 다각형을 구성했으며 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}

그 결과로....

결과 그림

관련 정보