Tikz-Anzeigekoordinaten im Knotentext im skalierten Bild

Tikz-Anzeigekoordinaten im Knotentext im skalierten Bild

Ich möchte den Wert einer Koordinate anzeigen. Bei Verwendung des Folgenden wird der Wert jedoch nicht genau ausgedruckt.

Der Maßstab wird mit folgendem Verfahren ermittelt:Skalierungsfaktor in TikZ wiederherstellenund verwenden Sie dann den Skalierungsfaktorwert wie inExtrahieren Sie die x- und y-Koordinate eines beliebigen Punkts in TikZ. Allerdings gibt @scalefactor in \xcoord und \ycoord immer 1 zurück, obwohl der tatsächliche Faktor angezeigt wird, wenn er im Tikz-Bild verwendet wird.

Irgendwelche Ideen zur Reparatur?

%!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}

Das Obige lässt sich kompilieren, allerdings stimmt die Koordinate in Magenta nicht mit dem Ende der schwarzen Linie überein, nämlich (120, 172).

Bildbeschreibung hier eingeben

Antwort1

Dies ist ein Problem bei der manuellen Beschriftung der Tics: Sie „berechnen“ die X-Beschriftungen, \tikzmath{int \value; \value = \i;};wissen dabei aber nichts über die Skalierung, da es sich dabei nur um Zahlen und nicht um „Tikz-Koordinaten“ handelt.

Die Lösung besteht darin, die Skalierung manuell vorzunehmen, z. B. durch

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

Möglicherweise müssen Sie berücksichtigen, dass die Verwendung \valueals Ganzzahl zu Rundungsfehlern führt, aber das ist ein anderes Problem.

Antwort2

Wie man die ursprünglichen, nicht transformierten Koordinaten erhält, erfahren Sie hier.Zugriff auf die logischen Werte einer TikZ-Koordinate.

Verwenden des benutzerdefinierten Befehls

\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

Man kann eine Koordinate wie folgt anzeigen

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

Dies wurde mit Skalierung, Einheitenänderungen sowohl in x als auch in y und Bereichsumgebungen getestet.

verwandte Informationen