在 tikzpicture 中,我想绘制一个几乎完全是圆形的圆弧,从一个点到另一个点。我有起点和终点的坐标以及我想要的半径,但我不知道不是知道圆心的位置。我天真地认为使用 draw 和 bend=N 并且 N 略小于 360 会得到我想要的结果,但是当 N 超过 90 时,bend 的行为就像给定了一个较小的数字,并且圆弧从起点到终点或多或少是笔直的。但是,考虑到 Tikz 中的众多功能,我期望有一些直接的方法来实现这种效果。
在我的特定应用中,弧线从节点的底部开始向下,绕一圈并向下结束于同一节点的顶部。我目前最好的版本是
\documentclass{amsart}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (box) at (0,-2) {$foo$};
\draw [->] (box.south)
to [out=260,in=100,looseness=10]
node [midway,left=0pt] {$bar$}
(box.north);
\end{tikzpicture}
\end{document}
其中“foo”是节点中的文本,“bar”是弧上的标签。但它产生的是椭圆弧,而不是圆弧:
答案1
如果你只想指定两个点和一个半径,你可以使用ext.paths.arcto
我的库tikz-ext
包裹。
由于存在两个通过两点以一个半径为圆心的圆,从而有四个圆弧,所以您需要使用large
和clockwise
标志来指定您想要的圆弧(在本例中为 )。
代码
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{ext.paths.arcto}
\begin{document}
\begin{tikzpicture}
\node (box) at (0,-2) {$foo$};
\draw [->] (box.260) arc to[radius=1cm, large, clockwise]
node [midway, left] {$bar$} (box.100);
\end{tikzpicture}
\end{document}
输出
答案2
基于 DraUX 的答案,您可以让 Tikz 根据半径计算起始/结束角度。在这种情况下:
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node (box) at (0,-2) {$foo$};
\draw [->]
let \n1={1cm},
\p1=($(box.north)-(box.south)$),
\n2={asin(\y1/(2*\n1))},
\n3={360-\n2} in
\pgfextra{\xdef\cstart{\n3}} \pgfextra{\xdef\cend{\n2}}
(box.south) arc (\cstart:\cend:\n1) node [midway,left=0pt] {$bar$};
\end{tikzpicture}
\end{document}
这里,我使用了 \pgfextra 来使 \n2 和 \n3 的值全局可见(如 \cstart 和 \cend)。如果您说“arc (\n3:\n2:\n1)”,则可以省略 \pgfextra。