Basándose en varias imágenes dentro de la misma imagen tikz, ¿cómo obtener la transformación correcta de coordenadas?

Basándose en varias imágenes dentro de la misma imagen tikz, ¿cómo obtener la transformación correcta de coordenadas?

SiguienteDibujar sobre una imagen con TikZ, He tenido muchos casos exitosos de dibujar en una imagen conTikZ.

Sin embargo, ahora tengo unatikzpicture entorno convariosgráficos, y quiero dibujar en cada uno de ellos. Sin embargo, parece que la solución ofrecida porDibujar sobre una imagen con TikZsólo funciona para imágenes centradas en (0, 0), porque si intento dibujar en mi segunda imagen, las coordenadas no se comportan como se esperaba:

\documentclass[final, 12pt]{standalone}
\usepackage{tikz}
\newcommand{\helplines}[0]{
\draw[help lines,semithick,xstep=.1,ystep=.1] (0,0) grid (1,1);
\foreach \x in {0,1,...,9} { \node [anchor=north] at (\x/10,0) {0.\x}; }
\foreach \y in {0,1,...,9} { \node [anchor=east] at (0,\y/10) {0.\y}; }
}
\begin{document}%
\begin{tikzpicture}%
\node[anchor=south west,inner sep=0] (image1) at (0, 0)
    {\rule{3cm}{3cm}};
\begin{scope}[x={(image1.south east)},y={(image1.north west)}]
 % draw stuff
 %\helplines
\end{scope}
\node[anchor=south west,inner sep=0] (image2) at (image1.south east)
    {\rule{3cm}{3cm}};
\begin{scope}[x={(image2.south east)},y={(image2.north west)}]
 \helplines
 % draw more stuff, but coordinates do not map as desired
\end{scope}
\end{tikzpicture}
\end{document}

Resultado:

No es el efecto deseado

Me gustaría un sistema de coordenadas transformado con el origen en la parte inferior izquierda de la imagen y el punto (1, 1) en la parte superior derecha. Esto funciona para la imagen ubicada en (0, 0), pero no para la imagen ubicada inmediatamente a la derecha. ¿Por qué no y cómo consigo el efecto deseado?

Respuesta1

Esto se debe a que está escalando los vectores unitarios, x=... , y=....pero el argumento de los de la segunda imagen no son vectores ortogonales. Porque image2está en otro lugar y no son (x0,0)y (0,y0)tipo de coordenadas. En cambio, son vectores con entradas distintas de cero. Es por eso que tus coordenadas son diagonales en lugar de horizontales/verticales.

Para hacer lo mismo es necesario poner a cero los xcomponentes correspondientes y. Ejemplo

\documentclass[final, 12pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\helplines}[0]{
\draw[help lines,semithick,xstep=.1,ystep=.1] (0,0) grid (1,1);
\foreach \x in {0,1,...,9} { \node [anchor=north] at (\x/10,0) {\tiny .\x}; }
\foreach \y in {0,1,...,9} { \node [anchor=east] at (0,\y/10) {\tiny .\y}; }
}
\begin{document}%
\begin{tikzpicture}%
\node[anchor=south west,inner sep=0] (image1) at (0, 0)
    {\color{red}\rule{3cm}{3cm}};
\begin{scope}[x={(image1.south east)},y={(image1.north west)}]
 % draw stuff
 \helplines
\end{scope}
\node[anchor=south west,inner sep=0] (image2) at (image1.south east)
    {\color{blue}\rule{3cm}{3cm}};
\begin{scope}[
x={($(image2.north east)-(image2.north west)$)},
y={($(image2.north west)-(image2.south west)$)},
shift={(image2.south west)}]
 \helplines
 \end{scope}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Aquí he usado la calcbiblioteca para obtener el ancho y el alto de la imagen. Pero puede evitar todo esto incluyendo la imagen también en el alcance, de modo que todo se defina localmente de manera idéntica. Luego cambias esos ámbitos. Ejemplo:

\documentclass[tikz]{standalone}
\newcommand{\helplines}[0]{
\draw[help lines,semithick,xstep=.1,ystep=.1] (0,0) grid (1,1);
\foreach \x in {0,1,...,9} { \node [anchor=north] at (\x/10,0) {\tiny .\x}; }
\foreach \y in {0,1,...,9} { \node [anchor=east]  at (0,\y/10) {\tiny .\y}; }
}
\begin{document}%
\begin{tikzpicture}%
\node[anchor=south west,inner sep=0] (image1) at (0, 0)
    {\color{red}\rule{3cm}{3cm}};
\begin{scope}[x={(image1.south east)},y={(image1.north west)}]
 % draw stuff
 \helplines
\end{scope}

\begin{scope}[shift={(image1.south east)}] % Shift the scope

    \node[anchor=south west,inner sep=0] (image2) at (0,0) %still at the origin of this scope
        {\color{blue}\rule{3cm}{3cm}};
    \begin{scope}[x={(image2.south east)},y={(image2.north west)}]
     \helplines
    \end{scope}

\end{scope}
\end{tikzpicture}
\end{document}

esto da el mismo resultado.

información relacionada