Wie erhält man die richtige Koordinatentransformation, wenn ich mehrere Bilder innerhalb desselben Tikz-Bildes zeichne?

Wie erhält man die richtige Koordinatentransformation, wenn ich mehrere Bilder innerhalb desselben Tikz-Bildes zeichne?

GefolgtMit TikZ auf einem Bild zeichnen, ich habe viele erfolgreiche Fälle erlebt, in denen ich auf ein Bild gezeichnet habe mitTikZ.

Jetzt habe ich jedoch eine tikzpictureUmgebung mitmehrereGrafiken, und ich möchte auf jede davon zeichnen. Es scheint jedoch, dass die Lösung vonMit TikZ auf einem Bild zeichnenfunktioniert nur für Bilder, die auf (0, 0) zentriert sind, denn wenn ich versuche, auf meinem zweiten Bild zu zeichnen, verhalten sich die Koordinaten nicht wie erwartet:

\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}

Ergebnis:

Nicht der gewünschte Effekt

Ich hätte gern ein transformiertes Koordinatensystem mit dem Ursprung unten links beim Bild und dem Punkt (1, 1) oben rechts. Das funktioniert zwar für das Bild, das bei (0, 0) liegt, aber nicht für das Bild, das direkt rechts daneben liegt. Warum nicht und wie erreiche ich den gewünschten Effekt?

Antwort1

Dies liegt daran, dass Sie die Einheitsvektoren über skalieren, x=... , y=....aber das Argument derjenigen im zweiten Bild sind keine orthogonalen Vektoren. Weil image2es woanders ist und sie nicht (x0,0)vom (0,y0)Typ Koordinaten sind. Stattdessen sind es Vektoren mit Einträgen ungleich Null. Deshalb sind Ihre Koordinaten diagonal statt horizontal/vertikal.

Um dasselbe zu tun, müssen Sie die entsprechenden xoder yKomponenten auf Null setzen. Beispiel

\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}

Bildbeschreibung hier eingeben

Hier habe ich die calcBibliothek verwendet, um die Breite und Höhe des Bildes zu ermitteln. Sie können dies alles jedoch vermeiden, indem Sie das Bild auch in den Gültigkeitsbereich einschließen, sodass alles lokal identisch definiert ist. Dann verschieben Sie diese Gültigkeitsbereiche. Beispiel:

\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}

Dies führt zum identischen Ergebnis.

verwandte Informationen