如何自动获取TikZ中绘制圆弧的圆心?

如何自动获取TikZ中绘制圆弧的圆心?

TikZ 圆弧命令有点不寻常,因为所用圆的中心实际上并未在 API 中指定。API 不遵循标准圆弧构造。例如,在 Mathematica 中,要绘制圆弧,需要给出圆心、半径和两个角度。

但在 TikZ arc 中这四个参数是间接定义的,比较绕口令,只指定了半径和两个角度,没有指定圆心。

因此,要找到使用的中心位置并了解电弧是如何产生的,这是一个很困难的事情。

我发现解释该公式的最佳帮助是TikZ 中如何定义圆弧?。以下是公式的屏幕截图:

Mathematica 图形

我在下面验证了它是正确的。我的两个问题是:

(1)一旦我画出一个圆弧,有没有办法让 TikZ 自动告诉我用于画圆的圆心,而不必让我根据上述公式来计算?

(2) TikZ 或库中是否存在另一个使用更常规 API 的圆弧命令:圆心、半径和两个角度?因为对我来说使用这个更容易。

平均能量损失

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\fbox{
  \begin{tikzpicture}
   \draw (-2,0)--(2,0) ;  %  Draw axes
   \draw (0,-2)--(0,2) ;

   \def\x{1}   %Define arc API, as in (x,y) arc (from,to,r)
   \def\y{0}
   \def\r{1}
   \def\from{-25}
   \def\to{45}

   %Now draw the arc
   \draw[color=blue,line width=1mm] (\x,\y) arc (\from:\to:\r);

   %Calculate its center from the formula above
   \coordinate (c) at ({\x + \r * cos(\from + 180)},{\y + \r * sin(\from + 180)});

   %Draw the circle used to get the arc from
   \draw[color=red,thin] (c) circle (\r);
   \draw[fill] (c) circle({0.05*\r});
  \end{tikzpicture}
}
\end{document}

Mathematica 图形

PS:为了说明Arc 接口在 Mathematica 中:

Mathematica 图形

因此,要绘制一个圆心为(0,0)、半径为 1 、范围为 -25 度到 45 度的圆弧,命令为

x = 0; y = 0; r = 1; theta1 = -25 Degree; theta2 = 45 Degree;
Graphics[Circle[{x, y}, r, {theta1, theta2}], Axes -> True,
    AspectRatio -> Automatic, AxesOrigin -> {0, 0}]

Mathematica 图形

答案1

这只是所需内容的一部分。但它还展示了如何对具有所需语法的密钥进行编程:

\documentclass[tikz,border=5]{standalone}
\tikzset{%
insert arc/.style args={#1:#2:#3and#4 with center #5}{
  insert path={
    \pgfextra{%
      \pgfpointxy{#3}{#4}%
      \pgfgetlastxy\arcrx\arcry%
      \pgfcoordinate{#5}{%
        \pgfpoint{\csname tikz@lastx\endcsname+\arcrx*cos(#1+180)}%
          {\csname tikz@lasty\endcsname+\arcry*sin(#1+180)}}
      }
    arc (#1:#2:#3 and #4) 
    }
  }
}

\begin{document}
\begin{tikzpicture}[rotate=40]
\draw [very thick] (0,0)  [insert arc={-25:45:3 and 2 with center X}];

\draw [dashed, red] (X) ellipse [x radius=3, y radius=2];
\end{tikzpicture}
\end{document}

在此处输入图片描述

还有一个更全面的例子:

\begin{tikzpicture}
\draw [very thick] (0,0) -- (0,1)  
  [insert arc={270:135:3 and 2 with center X}] -- (-4,4) 
  [insert arc={ 10:-90:1 and 3 with center Y}]
  [insert arc={180:360:4 and 2 with center Z}] -- cycle;

\draw [dashed, red]   (X) ellipse [x radius=3, y radius=2];
\draw [dashed, green] (Y) ellipse [x radius=1, y radius=3];
\draw [dashed, blue]  (Z) ellipse [x radius=4, y radius=2];
\end{tikzpicture}

在此处输入图片描述

答案2

无论如何,没有标准的弧构造 API。弧是图形对象,与 PostScript 或 SVG 一样,它们可以连接到现有路径对象,并且不需要中心声明,因为最后一个已知点是弧的起点,其余点是隐式计算的。否则你不能做这样的事情

\tikz\draw (0,0) --++(45:1) arc (135:90:1) arc (90:-90:0.5) -- cycle;

在此处输入图片描述

每个人都会疯狂地寻找这两个中心点,只是为了绘制这个简单的图形,所以这是一件非常非常好的事情。话虽如此,Postscript 有arcarcn需要中心点的运算符,而 PGF 有\pgfpatharctoprecomputed

无论如何,您不需要任何信息,因为您知道圆弧的起始角度和半径。因此,您知道法线是什么,或者您已经有了公式。Mathematica 做的事情完全不同,因此不需要有一致的语法。

如果您更频繁地需要这个(为什么我无法预测)请使用圆形节点并在其边框上绘制并参考节点中心。

相关内容