Укажите радиус дуги в единицах системы координат

Укажите радиус дуги в единицах системы координат

Это продолжениеУкажите радиус дуги с помощью pgfplots и направление оси cs? Если я хочу изменить MWE на следующее:

\pgfplotsset{compat=1.10}
\begin{tikzpicture}

\begin{axis}[
      xmin=-20,xmax=20,
    ]
    \addplot{x}; % not important, just to make things show up

  \end{axis}
\draw (axis cs:-16,0) arc[start angle=180, end angle=0, radius=8]; % <-- want to keep units of coordinate system here
\end{tikzpicture}

Как мне указать радиус дуги в системе координат оси? То, что я уже пробовал, было решением, приведенным вИзвлечь координаты x, y произвольной точки в TikZс использованием \pgfextractx. В моем случае это приводит к неправильным длинам.

решение1

Значения системы координат осей теряются после \end{axis}. Это означает, что вы можете получить доступ только к именованным узлам (даже axis csздесь недоступно).

Есть два решения:

Во-первых, вы можете синхронизировать единицы длины, используемые осью и вашим изображением, например, используя x=1cm, y=1cmв оси и в tikzpicture. Ось будет выглядеть по-разному, поскольку это переопределяет стратегии масштабирования.

В качестве альтернативы можно попытаться вспомнить запрошенное количество. Один из способов сделать это может быть

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\begin{document}

\begin{tikzpicture}

\begin{axis}[
      xmin=-20,xmax=20,
      extra description/.code={%
        \pgfplotspointaxisdirectionxy{8}{8}
        \pgfgetlastxy{\X}{\Y}%
        \global\let\radiusX=\X
        \global\let\radiusY=\Y
      },
    ]
    \addplot{x}; % not important, just to make things show up

    \coordinate (P) at (axis cs:-16,0);
  \end{axis}
\draw (P) arc[start angle=180, end angle=0, x radius=\radiusX, y radius=\radiusY]; % <-- want to keep units of coordinate system here
\end{tikzpicture}

\end{document}

введите описание изображения здесь

Моя идея заключается в оценке axis direction csс помощью макроса \pgfplotspointaxisdirectionxy, затем я получаю вычисленные координаты X и Y и запоминаю их в двух глобальных макросах. Они используются позже.

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