TikZ 圆弧命令有点不寻常,因为所用圆的中心实际上并未在 API 中指定。API 不遵循标准圆弧构造。例如,在 Mathematica 中,要绘制圆弧,需要给出圆心、半径和两个角度。
但在 TikZ arc 中这四个参数是间接定义的,比较绕口令,只指定了半径和两个角度,没有指定圆心。
因此,要找到使用的中心位置并了解电弧是如何产生的,这是一个很困难的事情。
我发现解释该公式的最佳帮助是TikZ 中如何定义圆弧?。以下是公式的屏幕截图:
我在下面验证了它是正确的。我的两个问题是:
(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}
PS:为了说明Arc 接口在 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}]
答案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 有arc
和arcn
需要中心点的运算符,而 PGF 有\pgfpatharctoprecomputed
。
无论如何,您不需要任何信息,因为您知道圆弧的起始角度和半径。因此,您知道法线是什么,或者您已经有了公式。Mathematica 做的事情完全不同,因此不需要有一致的语法。
如果您更频繁地需要这个(为什么我无法预测)请使用圆形节点并在其边框上绘制并参考节点中心。