Tikz - 如何从一个点到另一个点画一个圆圈?

Tikz - 如何从一个点到另一个点画一个圆圈?

在 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”是弧上的标签。但它产生的是椭圆弧,而不是圆弧:

Tikz 输出

答案1

如果你只想指定两个点和一个半径,你可以使用ext.paths.arcto我的库tikz-ext包裹

由于存在两个通过两点以一个半径为圆心的圆,从而有四个圆弧,所以您需要使用largeclockwise标志来指定您想要的圆弧(在本例中为 )。

代码

\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。

答案3

你可以通过做类似的事情来实现它

\documentclass{standalone}
\usepackage{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \node (box) at (0,-2) {$foo$};
    \draw (box.south) arc (160:-160:-0.7) node [midway,left=0pt] {$bar$};
\end{tikzpicture}
\end{document}

它可以起作用,但是解决方案很丑陋,因为当你改变半径时,你必须改变起始角度和结束角度。

在此处输入图片描述

答案4

像这样:

在此处输入图片描述

使用最少的代码(网格线是可选的):

\documentclass[tikz,border=1cm]{standalone}

\begin{document}
    \begin{tikzpicture}
        \draw[gray!20] (-6,-6) grid (6,6);
        \draw[line width=3pt,latex-] (5:5) arc(5:355:5);
        \node at (0:5) {\Large foo};
        \node at (180:5.5) {\Large bar};
    \end{tikzpicture}
\end{document}

相关内容