Coordenada de visualización de Tikz en texto de nodo en imagen escalada

Coordenada de visualización de Tikz en texto de nodo en imagen escalada

Se busca mostrar el valor de una coordenada, pero al utilizar lo siguiente, el valor no se imprime con precisión.

Se intenta recuperar la escala utilizandoRecuperar factor de escala en TikZy luego use el valor del factor de escala como enExtraer las coordenadas x, y de un punto arbitrario en TikZ. Sin embargo, @scalefactor devuelve 1 siempre en \xcoord y \ycoord a pesar de mostrar el factor real si se usa en la imagen de Tikz.

Alguna idea sobre como arreglarlo?

%!TeX program = lualatex
\documentclass[12pt]{article}

\usepackage{tikz}
\usetikzlibrary{math, calc}

%% https://tex.stackexchange.com/questions/86897/recover-scaling-factor-in-tikz
\newcommand*\getscale[1]{%
\begingroup
\pgfgettransformentries{\scaleA}{\scaleB}{\scaleC}{\scaleD}{\whatevs}{\whatevs}%
\pgfmathsetmacro{#1}{sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}%
\expandafter
\endgroup
\expandafter\def\expandafter#1\expandafter{#1}%
}

% for printing out coordinates in Tikz coordinate variable
\makeatletter
\newcommand\xcoord[1]{{%
    \getscale{\@scalefactor}%
    \pgfpointanchor{#1}{center}%
    \pgfmathparse{\pgf@x/\pgf@xx/\@scalefactor}%
    \pgfmathprintnumber{\pgfmathresult}%    
}}
\newcommand\ycoord[1]{{%
        \getscale{\@scalefactor}%
        \pgfpointanchor{#1}{center}%
        \pgfmathparse{\pgf@y/\pgf@yy/\@scalefactor}%
        \pgfmathprintnumber{\pgfmathresult}%
}}
\makeatother

\begin{document}

\begin{figure}
    \centering
    
    \begin{tikzpicture}[scale=1/10]
        % GRID - X
        \foreach \i in {0,24,...,120}{
            \draw[gray, thin] (\i,-12) -- (\i,184);
            \tikzmath{int \value; \value = \i;}; 
            \node[gray, below] at (\i,-12) {\value};
        }
        
        % GRID - Y
        \foreach \i in {0,24,...,168}{
            \draw[gray, thin] (-12,\i) -- (132,\i);
            \tikzmath{int \value; \value = \i;};
            \node[gray, left] at (-12,\i) {\value};
        }
    
        % Draw some lines with relative coordinates
        \draw[thick] (0,0) -- ++(12,0) coordinate (c);
        \draw[thick] (0,0) -- ++(0,60) coordinate (c);
        \draw[thick] (c) -- ++(0,36) coordinate (c);
        \draw[thick] (c) -- ++(0,76) coordinate (c);
        \draw[thick] (c) -- ++(120,0) coordinate (c);
        
        % Display coordinate
        \getscale{\scalefactor};
        \node[fill=white, text=blue] at (60,60) {Scale = \scalefactor};
        \node[fill=white, text=magenta, yshift=-15pt] at (c) {(\xcoord{c}, \ycoord{c})};            
    \end{tikzpicture}
\end{figure}
\end{document}

Lo anterior se compila, sin embargo, la coordenada en magenta no coincide donde termina la línea negra, que es (120, 172).

ingrese la descripción de la imagen aquí

Respuesta1

Este es un problema de etiquetar manualmente los tics: estás "calculando" las etiquetas x, \tikzmath{int \value; \value = \i;};pero esto no sabe nada sobre la escala porque son solo números y no "coordenadas tikz".

La solución es hacer el escalado manualmente, por ejemplo,

\tikzmath{int \value; \value = \i * \scalefactor;}; 

Es posible que deba considerar que usarlo \valuecomo un número entero genera algunos errores de redondeo, pero ese es otro problema.

Respuesta2

La forma de obtener la coordenada original, no transformada, se puede encontrar aquíAccediendo a los valores lógicos de una coordenada TikZ.

Usando el comando personalizado

\makeatletter
\def\extractcoord#1#2#3{
  \path let \p1=(#3) in \pgfextra{
    \pgfmathsetmacro#1{\x{1}/\pgf@xx}
    \pgfmathsetmacro#2{\y{1}/\pgf@yy}
    \xdef#1{#1} \xdef#2{#2}
  };
}
\makeatother

uno puede mostrar una coordenada así

\coordinate (A) at (120,172);
\extractcoord{\x}{\y}{A};
\node at (A) {Coordinates: \x, \y};

Esto se probó con escalamiento, cambios de unidades tanto en x como en y, y entornos de alcance.

información relacionada