我想画一个以一个点为中心O
,经过第二个点的圆A
。如果我们有一个明确的距离公式,这很容易。在许多情况下,这两个点是作为其他一些对象的交点给出的,因此它们之间的距离是隐式给出的(或非常复杂)。我们还能使用 tikz 使用两个点和|OA|
的位置来画圆吗? O
A
答案1
有很多选择,其中我列出两个。
- 有一个专门用于此的库:
through
。它将生成具有指定中心且边界穿过该点的圆形节点。 - 您
calc
可以计算距离并将其用作半径。如果您只需要路径而不是节点,这可能会很有用。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{through,intersections,calc}
\begin{document}
\begin{tikzpicture}[font=\sffamily,circle defined by/.style args={center #1 and
point #2}{insert path={let \p1=($(#2)-(#1)$),\n1={veclen(\x1,\y1)} in
(#1) circle[radius=\n1]}}]
\begin{scope}[local bounding box=through]
\draw[name path=upper] (0,0) coordinate(L1) to [bend right] (2,0) coordinate(R1);
\draw[name path=lower] (0,-0.5) coordinate(L2) to [bend left] (2,-0.5) coordinate(R2);
\draw[name intersections={of=upper and lower,name=i}]
node[draw,circle through={(i-2)}] at (i-1){};
\end{scope}
\node[above] at (through.north){option 1: through};
\begin{scope}[local bounding box=calc,xshift=3cm]
\draw[name path=upper] (0,0) coordinate(L1) to [bend right] (2,0) coordinate(R1);
\draw[name path=lower] (0,-0.5) coordinate(L2) to [bend left] (2,-0.5) coordinate(R2);
\draw[name intersections={of=upper and lower,name=j},
circle defined by=center j-1 and point j-2];
\end{scope}
\node[above] at (calc.north){option 2: calc};
\end{tikzpicture}
\end{document}