如何使用 tikz 或 tkz-euclide 绘制三个相切圆,如下图所示?
最大的圆的半径应为 5 厘米,其他两个圆的半径可以任意,但不得超过 2.5 厘米。我已经成功绘制了两个相切圆,但我不知道如何绘制第三个圆,它应该与其他两个圆相切。以下是我已经完成的操作:
\documentclass{standalone}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/B, 4/1/C}
\tkzDrawCircle[R](C,5cm)
\tkzInterLC[R](B,C)(C,5cm) \tkzGetPoints{D}{E}
\tkzDrawCircle(B,D)
\end{tikzpicture}
\end{document}
提前谢谢了
答案1
这些圆的圆心位于其他圆周围的辅助圆的交点处,其中辅助圆的半径等于原始半径加上新圆的半径。
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[dot/.style={circle,fill,inner sep=1pt},
declare function={R=5;rA=1.5;rB=1;rC=1.3;}]
\draw (0,0) coordinate(O) circle[radius=R];
\draw (160:R-rA) node[dot,label=20:$A$](A){} circle[radius=rA];
\path[overlay,name path=auxB1] (O) circle[radius=R-rB];
\path[overlay,name path=auxB2] (A) circle[radius=rA+rB];
\draw[name intersections={of=auxB1 and auxB2,by={aux,B}}]
(B) node[dot,label=above:$B$]{} circle[radius=rB];
\path[overlay,name path=auxC1] (A) circle[radius=rA+rC];
\path[overlay,name path=auxC2] (B) circle[radius=rB+rC];
\draw[name intersections={of=auxC1 and auxC2,by={aux,C}}]
(C) node[dot,label=above:$C$]{} circle[radius=rC];
\end{tikzpicture}
\end{document}
当然,这不需要任何库,只需要余弦定律来告诉我们给定边长的三角形的角度。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[dot/.style={circle,fill,inner sep=1pt},
declare function={R=5;rA=1.5;rB=1;rC=1.3;alpha=160;
cosinelaw(\a,\b,\c)=acos((\a*\a+\b*\b-\c*\c)/(2*\a*\b));}]
\draw (0,0) coordinate(O) circle[radius=R];
\draw (alpha:R-rA) node[dot,label=alpha-180:$A$](A){} circle[radius=rA];
\draw ({-cosinelaw(R-rA,R-rB,rA+rB)+alpha}:R-rB)
node[dot,label=above:$B$](B){} circle[radius=rB];
\pgfmathsetmacro{\myturn}{cosinelaw(rA+rB,rC+rB,rC+rA)-180}
\path (A) -- (B) -- ([turn]\myturn:rB+rC)
node[dot,label=above:$C$](C){};
\draw (C) circle[radius=rC];
\end{tikzpicture}
\end{document}
答案2
只需一个解决方案tkz-euclide
\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\def\RA{5} \def\RB{2} \def\RC{1}
\tkzDefPoint(0,0){O}
\tkzDefPoint(\RA,0){A}
\tkzDefPoint(\RB,0){B}
\pgfmathparse{\RB+\RC}
\let\r\pgfmathresult
\pgfmathparse{\RA-\RC}
\let\R\pgfmathresult
\tkzInterCC[R](B,\r)(A,\R)
\tkzGetPoints{C}{D}
\tkzDrawCircles[R](A,\RA B,\RB C,\RC)
\tkzDrawPoints(A,B,O,C)
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,O,C)
\end{tikzpicture}
\end{document}