如何在图像上定义自适应网格或坐标系?

如何在图像上定义自适应网格或坐标系?

我经常需要在图像上精确绘图。为此,我在图像上绘制两条路径,并按比例将点放置在图像上。此解决方案允许我更改图像的大小,而无需像下图中那样重新计算点。

\documentclass[A4]{article}

\usepackage{tikz}

\usepackage{graphicx}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
\node(img){\includegraphics[width=0.5\textwidth]{tux.png}};
\draw[red] (img.west) -- (img.east)
coordinate[pos=0.53](ax)
coordinate[pos=0.41](bx);

\draw[red] (img.south) -- (img.north)
coordinate[pos=0.74] (ay)
coordinate[pos=0.74] (by);

\draw[red,ultra thick] (ax|-ay) circle (0.2cm);

\draw[blue,ultra thick] (bx|-by) circle (0.2cm);
\end{tikzpicture}
\begin{tikzpicture}
\node(img){\includegraphics[width=0.3\textwidth]{tux.png}};
\path[red] (img.west) -- (img.east)
coordinate[pos=0.53](ax)
coordinate[pos=0.41](bx);

\path[red] (img.south) -- (img.north)
coordinate[pos=0.74] (ay)
coordinate[pos=0.74] (by);

\draw[red,ultra thick] (ax|-ay) circle (0.2cm);

\draw[blue,ultra thick] (bx|-by) circle (0.2cm);
\end{tikzpicture}
\begin{tikzpicture}[rotate=30,transform shape]
\node(img){\includegraphics[width=0.5\textwidth]{tux.png}};
\draw[red] (img.west) -- (img.east)
coordinate[pos=0.53](ax)
coordinate[pos=0.41](bx);

\draw[red] (img.south) -- (img.north)
coordinate[pos=0.74] (ay)
coordinate[pos=0.74] (by);

\draw[red,ultra thick] (ax|-ay) circle (0.2cm);

\draw[blue,ultra thick] (bx|-by) circle (0.2cm);
\end{tikzpicture}
\end{document}

在此处输入图片描述

我想要的是一个命令或环境

\begin {imageScope}[xstep = imageWidth / 10, ystep = imageHeight / 10]
...
...
\end{imageScope}

它将允许我使用绘图命令在图像上直接以相对方式定位不同的点,例如

\draw (x1, y1) - (x2, y2);

其中 (x1, y1) 和 (x2, y2) 在与图像相关的坐标系中定义。

答案1

\documentclass[tikz,border=3.14mm]{standalone}

\newcommand{\imgrid}[1]
    {
    \path (#1.south west);
    \pgfgetlastxy{\xmin}{\ymin};
    \path (#1.north east);
    \pgfgetlastxy{\xmax}{\ymax};
    \pgfmathsetmacro{\xstp}{(\xmax-\xmin)/10}
    \pgfmathsetmacro{\ystp}{(\ymax-\ymin)/10}
    \draw[gray] (\xmin,\ymin) grid[xstep=\xstp pt,ystep=\ystp pt] (\xmax,\ymax);
    }

\begin{document}

    \begin{tikzpicture}
        \node (img) {\includegraphics[scale=0.5]{pingoo.jpg}};
        \imgrid{img};
    \end{tikzpicture}
    
\end{document}

图像上的网格

当然,正如 Rmano 所建议的,您可以将图像嵌套到示波器中,并在该示波器内绘制网格。这样效果很好。但是您要求一个执行相同操作的命令,所以它在这里。只需计算图像左下点和右上点的坐标,然后将距离划分为您想要的任何部分(此处为 10)。

相关内容