Размещение меток в 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,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};
}

Разница здесь в том, что при использовании одного +новая позиция не становится активной, поэтому при вычислении следующей позиции исходной позицией по-прежнему является (\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}

с результатом...

полученная цифра

Связанный контент