图像上呈现完美的圆弧,且宽高比非 1:1

图像上呈现完美的圆弧,且宽高比非 1:1

我正在寻找一种在图像上绘制完美圆弧的方法。

目前我正在使用 tikz 绘制弧线。问题是,使用以下代码,弧线更像是椭圆的一部分而不是圆的一部分。这是由于环境中的x和值不同。我无法更改这些值。我需要弧线中心的精确位置位于图像的某个位置。该位置以图像宽度和高度的分数给出(例如,如代码示例中的 (0.5,0.62)),因为我想保持与图像的实际缩放无关(保持其纵横比)。yscope

我现在使用的代码如下:

\documentclass{article}
\usepackage{tikz}

\begin{document}
  \begin{tikzpicture}
      \node[anchor=south west,inner sep=0, opacity=0.6] (image) at (0,0,0) {\includegraphics[width=8cm]{image}};
      \begin{scope}[x={(image.south east)},y={(image.north west)}]
          \draw[->,>=stealth,line width=1mm,red] ([shift=(0:0.2)]0.5,0.62) arc(0:90:0.2);
      \end{scope}
  \end{tikzpicture}
\end{document}

这样,无论我选择的width图像节点是什么(在本例中为 8 厘米),中心都处于完美的位置。

圆弧扭曲了,因为我提供了极坐标,而 x 和 y 具有不同的缩放因子。在 1:1 纵横比域中,这将是一个完美的圆。但它不是 1:1 域。

那么,我该怎么做才能获得圆弧半径的 1:1 域,同时保持图像与圆弧中心的笛卡尔坐标(即相应图像轴的分数)的纵横比?

我的解决方案

根据 Zarko 的解决方案,我提出了这个 MWE,其中还包括纵横比的计算:

\documentclass{article}
\usepackage{tikz}

\newlength{\mywidth}
\newlength{\myheight}

\makeatletter
\newcommand{\getlength}[2]{\pgfmathsetmacro#1{\strip@pt#2}} % to get rid of the pt dimension as a division of lengths apparently doesn't cancel it out
\makeatother

\newcommand{\pgfsize}[2]{
    \pgfextractx{#1}{\pgfpointdiff{\pgfpointanchor{current bounding box}{south west}}{\pgfpointanchor{current bounding box}{north east}}}
    \pgfextracty{#2}{\pgfpointdiff{\pgfpointanchor{current bounding box}{south west}}{\pgfpointanchor{current bounding box}{north east}}}
}

\begin{document}
    \begin{tikzpicture}
        \node[anchor=south west,inner sep=0, opacity=0.6] (image) at (0,0,0) {\includegraphics[width=8cm]{image}};
        \begin{scope}[x={(image.south east)},y={(image.north west)}]
            \pgfsize{\mywidth}{\myheight};
            \getlength{\aspect}{\mywidth / \myheight};
            \node (0,0) {Aspect ratio is \aspect~:~1};
            \draw[->,>=stealth,line width=1mm,red] ([shift=(0:0.2)]0.5,0.62) arc(0:90:0.2 and 0.2*\aspect);
        \end{scope}
    \end{tikzpicture}
\end{document}

答案1

您可以定义arc为椭圆段:

\draw (2,0) arc [x radius=1, y radius=2, start angle=0, end angle=180];

或者简单来说

\draw (2,0) arc  arc(0:90:0.2 and 0.4);

考虑到您的代码片段(您应该将其扩展为最小的工作示例!)我获得(无需计算之间的比率X半径,这个我留给你了):

\usepackage[demo]{graphicx}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{tikzpicture}
    \node[anchor=south west,inner sep=0, opacity=0.6] (image) at (0,0,0) {\includegraphics[width=8cm]{Bilder/panaxis}};
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
        \draw[->,>=stealth,line width=1mm,red] ([shift=(0:0.2)]0.5,0.62) arc(0:90:0.2 and 0.4);
    \end{scope}
\end{tikzpicture}
\end{document}

对于之间的精确比率X-半径和-radius 你可以定义为X然后从中计算考虑到X-图像的比例。

相关内容