Tikz:使用相对于图像的坐标时围绕中心旋转

Tikz:使用相对于图像的坐标时围绕中心旋转

我目前正在尝试根据图像的东/西/南/东坐标来定义我的坐标,以便无论使用什么图像,我都可以使用相同的坐标系。但是,当我尝试\draw [rotate around={20:\O{}}, name path=a] \O{} -- \E{};在下面的示例中使用它时,它不会旋转路径。当我以传统方式使用坐标时,(5,0)它可以很好地旋转。

我真的很想使用这些相对坐标,因为这意味着我每次为新图像做注释时都不必查找边缘。如何才能使该rotate around功能与相对坐标配合使用?

\documentclass[12pt]{article}

\usepackage{graphicx}                                   % Further formatting of figures
\usepackage{amsmath}                                    % Mathematics
\usepackage{tikz}                                       % Annotated Figures
\usetikzlibrary{intersections}                          % Detect intersections
\usetikzlibrary{calc}                                   % Calculate distances
\usetikzlibrary{positioning}                            % Better positioning tools
\usetikzlibrary{arrows.meta}                            % Better arrowheads

\begin{document}

\begin{figure}[!htb]
\centering
\begin{tikzpicture}
    \node[inner sep=0pt] (img) at (0,0)
    {\includegraphics[width=\textwidth]{Figures/Airfoil.png}};
    % 
    \def\alph{50};
    \def\anglechord{230};
    \def\angleradius{95};
    \def\O{(img.center)};
    \def\E{(img.east)};
    \def\W{(img.west)};
    \def\N{(img.north)};
    \def\S{(img.south)};
    \def\SW{(img.south west)};
    \def\SE{(img.south east)};
    \def\NW{(img.north west)};
    \def\NE{(img.north east)};
    \def\arrow{{Latex[length=2.8mm]}};
    \def\arrowshort{{Latex[length=2mm]}};
    % \draw[step=1,black, thick] \SW{} grid \NE{};
    \draw[fill] (img.center) circle (0.1);
    % 
    \draw [dashed, very thin, name path=horizontal] \W{} -- \W{};
    \draw [dashed, very thin, name path=vertical] \S{} -- \N{};
    \path [name path = right] \SE{} -- \NE{};

    \draw [rotate around={20:\O{}}, name path=a] \O{} -- \E{};
\end{tikzpicture}
% \caption{caption}
% \label{fig:topconfig}
\end{figure}

\end{document}

答案1

是的,这就是 Ti 的行为Z.但是,您已经加载了calc库,它允许您将符号坐标转换为明确的坐标。

\documentclass[12pt]{article}

\usepackage{amsmath}                                    % Mathematics
\usepackage{tikz}                                       % Annotated Figures
\usetikzlibrary{intersections}                          % Detect intersections
\usetikzlibrary{calc}                                   % Calculate distances
\usetikzlibrary{positioning}                            % Better positioning tools
\usetikzlibrary{arrows.meta}                            % Better arrowheads

\begin{document}

\begin{figure}[!htb]
\centering
\begin{tikzpicture}
    \node[inner sep=0pt] (img) at (0,0)
    {\includegraphics[width=\textwidth]{example-image-duck}};
    % 
    \def\alph{50};
    \def\anglechord{230};
    \def\angleradius{95};
    \def\O{(img.center)};
    \def\E{(img.east)};
    \def\W{(img.west)};
    \def\N{(img.north)};
    \def\S{(img.south)};
    \def\SW{(img.south west)};
    \def\SE{(img.south east)};
    \def\NW{(img.north west)};
    \def\NE{(img.north east)};
    \def\arrow{{Latex[length=2.8mm]}};
    \def\arrowshort{{Latex[length=2mm]}};
    % \draw[step=1,black, thick] \SW{} grid \NE{};
    \draw[fill] (img.center) circle (0.1);
    % 
    \draw [dashed, very thin, name path=horizontal] \W{} -- \W{};
    \draw [dashed, very thin, name path=vertical] \S{} -- \N{};
    \path [name path = right] \SE{} -- \NE{};
    \draw let \p1=($(img.center)$),\p2=($(img.east)$) 
    in [rotate around={20:\O}, name path=a,thick,red]
     (\x1,\y1)-- (\x2,\y2);
\end{tikzpicture}
% \caption{caption}
% \label{fig:topconfig}
\end{figure}

\end{document}

在此处输入图片描述

另一种可能性是使用transform canvas

\draw [transform canvas={rotate around={20:\O{}}}, name path=a] \O{} -- \E{};

然而,我想警告您,使用此选项必须非常小心。

相关内容