Как получить правильное преобразование координат при использовании нескольких изображений внутри одного tikzpicture?

Как получить правильное преобразование координат при использовании нескольких изображений внутри одного tikzpicture?

СледующийРисование на изображении с помощью TikZ, у меня было много удачных примеров рисования на картинке с помощьюТикЗ.

Однако теперь у меня есть tikzpictureсреда снесколькографики, и я хочу рисовать на каждом из них. Однако, похоже, решение, предлагаемоеРисование на изображении с помощью TikZработает только для изображений с центром в точке (0, 0), потому что если я попытаюсь рисовать на втором изображении, координаты будут вести себя не так, как ожидалось:

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

Результат:

Не тот эффект, который хотелось бы получить.

Мне нужна преобразованная система координат с началом в левом нижнем углу картинки и точкой (1, 1) в правом верхнем углу. Это работает для картинки, расположенной в точке (0, 0), но не для изображения, расположенного сразу справа. Почему нет, и как мне добиться желаемого эффекта?

решение1

Это потому, что вы масштабируете единичные векторы через , x=... , y=....но аргумент тех, что на втором изображении, не является ортогональными векторами. Потому что image2находится где-то в другом месте, и они не являются (x0,0)типом (0,y0)координат. Вместо этого они являются векторами с ненулевыми элементами. Вот почему ваши координаты диагональные, а не горизонтальные/вертикальные.

Чтобы сделать то же самое, вам нужно обнулить соответствующие компоненты xили y. Пример

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

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

Здесь я использовал calcбиблиотеку для получения ширины и высоты изображения. Но вы можете избежать всего этого, включив изображение также в область видимости, так что все локально будет определено идентично. Затем вы перемещаете эти области видимости. Пример:

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

это дает идентичный результат.

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