tkz-euclide 中的内切圆计算错误?

tkz-euclide 中的内切圆计算错误?

重绘中几何图形使用 TikZ 时,似乎 tkz-euclide 中的内切圆计算有误(下图中的红色部分)。命令

\tkzDrawCircle[in,color=red](A2,B2,C2)  

当我改变顺序时,会给出不同的圆圈,例如 (C2,B2,A2)。此外,在 (A2,B2,C2) 之前有一个空白

\tkzDrawCircle[in,color=red] (A2,B2,C2)  

结果出现错误。

你能给出一些解释/建议/改进吗?

在此处输入图片描述

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{calc}
\usepackage{tkz-euclide}
\usetkzobj{all}
\def\a{3} % side of the equilateral triangle
\pgfmathsetmacro{\d}{\a/sqrt(3)}
\begin{document}
\begin{tikzpicture}[line join=round]
\pagecolor{yellow!20}
\path
(210:\d) coordinate (A0)
(330:\d) coordinate (B0)
(90:\d)  coordinate (C0)
($(C0)!.3!(B0)$) coordinate (A1)
($(A0)!.3!(C0)$) coordinate (B1)
($(B0)!.3!(A0)$) coordinate (C1)
(intersection of A0--A1 and B0--B1) coordinate (A2)
(intersection of B0--B1 and C0--C1) coordinate (B2)
(intersection of C0--C1 and A0--A1) coordinate (C2);

\clip (A0)--(B0)--(C0)--cycle;
\draw[cyan]
(A0)--(A1) (B0)--(B1) (C0)--(C1) 
(A0)--(B0)--(C0)--cycle;
\draw (A2)--(B2)--(C2)--cycle;

\tkzDrawCircle[in,color=blue](A0,B0,A2)
\tkzDrawCircle[in,color=blue](B0,C0,B2) 
\tkzDrawCircle[in,color=blue](C0,A0,C2)

\tkzDrawCircle[in,color=red](A2,B2,C2)
%\tkzDrawCircle[in,color=red](C2,B2,A2)
%\tkzDrawCircle[in,color=red](B2,A2,C2)
\end{tikzpicture}
\end{document} 

答案1

在我看来,这几乎是先前的问题,答案还是我认为 tkz-euclide 中存在数值不稳定性。然而,令我尴尬的是,我不得不承认,这也是我在那里提出的解决方案之一。在我的解决方案中(我也认为 tkz-euclide 也是如此,但我的法语水平不足以肯定地说这一点),问题是必须找到正确的象限,我以为我做到了,但显然没有。所以我换了个方向,使用了根据笛卡尔坐标确定中心,似乎没有什么问题。

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{calc}
\tikzset{incircle/.style n args={3}{%
insert path={
let \p1=($(#2)-(#1)$), \p2=($(#3)-(#1)$),\p3=($(#2)-(#3)$),
    \n1={0.5*(veclen(\x1,\y1)+veclen(\x2,\y2)+veclen(\x3,\y3))},
    \n2={sqrt(((\n1-veclen(\x1,\y1))/\n1))*sqrt((\n1-veclen(\x2,\y2))*(\n1-veclen(\x3,\y3)))},
    \n3={veclen(\x1,\y1)}, % length #1 -- #2
    \n4={veclen(\x2,\y2)}, % length #1 -- #3
    \n5={veclen(\x3,\y3)}, % length #2 -- #3
    \n6={\n3+\n4+\n5}
    in % \pgfextra{\typeout{\n1,\n2,\n3,\n4,\n5,\n6}}
    (${(\n5/\n6)}*(#1)+{(\n4/\n6)}*(#2)+{(\n3/\n6)}*(#3)$) circle (\n2)
}}}
% \usepackage{tkz-euclide}
% \usetkzobj{all}
\begin{document}
\begin{tikzpicture}[line join=round]
\pgfmathsetmacro{\a}{3} % side of the equilateral triangle
\pgfmathsetmacro{\d}{\a/sqrt(3)}
\pagecolor{yellow!20}
\path
(210:\d) coordinate (A0)
(330:\d) coordinate (B0)
(90:\d)  coordinate (C0)
($(C0)!.3!(B0)$) coordinate (A1)
($(A0)!.3!(C0)$) coordinate (B1)
($(B0)!.3!(A0)$) coordinate (C1)
(intersection cs:first line={(A0)--(A1)},second line={(B0)--(B1)}) coordinate (A2)
(intersection cs:first line={(B0)--(B1)},second line={(C0)--(C1)}) coordinate (B2)
(intersection cs:first line={(C0)--(C1)},second line={(A0)--(A1)}) coordinate (C2);

\begin{scope}
\clip (A0)--(B0)--(C0)--cycle;
\draw[cyan]
(A0)--(A1) (B0)--(B1) (C0)--(C1) 
(A0)--(B0)--(C0)--cycle;
\draw (A2)--(B2)--(C2)--cycle;
\end{scope}

\draw[blue,incircle={A0}{B0}{A2}];
\draw[blue,incircle={B0}{C0}{B2}];
\draw[blue,incircle={C0}{A0}{C2}];
% \tkzDrawCircle[in,color=blue](A0,B0,A2)
% \tkzDrawCircle[in,color=blue](B0,C0,B2) 
% \tkzDrawCircle[in,color=blue](C0,A0,C2)

\draw[red,incircle={A2}{B2}{C2}];
%\tkzDrawCircle[in,color=red](A2,B2,C2)
%\tkzDrawCircle[in,color=red](C2,B2,A2)
%\tkzDrawCircle[in,color=red](B2,A2,C2)
\end{tikzpicture}
\end{document} 

在此处输入图片描述

答案2

tkz-eucide 的最新版本 1.16 中存在错误,使用下一个版本(实际上是测试版)即可获得结果。您需要在 texmf 树中安装 tkz-base 和 tkz-euclide。

v2.40b 欧几里得

\documentclass{article}
\usepackage{tkz-euclide}

\def\a{3} % side of the equilateral triangle
\pgfmathsetmacro{\d}{\a/sqrt(3)}
\begin{document}
\begin{tikzpicture}[scale=3]
\tkzDefPoint(210:\d){A0}
\tkzDefPoint(330:\d){B0}
\tkzDefPoint(90:\d){C0}

\tkzDefBarycentricPoint(C0=2,B0=1) \tkzGetPoint{A1}
\tkzDefBarycentricPoint(A0=2,C0=1) \tkzGetPoint{B1}
\tkzDefBarycentricPoint(B0=2,A0=1) \tkzGetPoint{C1}
\tkzInterLL(A0,A1)(B0,B1) \tkzGetPoint{A2}
\tkzInterLL(B0,B1)(C0,C1) \tkzGetPoint{B2}
\tkzInterLL(C0,C1)(A0,A1) \tkzGetPoint{C2}

%\clip (A0)--(B0)--(C0)--cycle;
\tkzDrawSegments(A0,A1 B0,B1 C0,C1)

\tkzDrawPolygon(A0,B0,C0)
\tkzDrawPolygon(A2,B2,C2)

\tkzDrawCircle[in,color=blue](A0,B0,A2)
\tkzDrawCircle[in,color=blue](B0,C0,B2)
\tkzDrawCircle[in,color=blue](C0,A0,C2)

\tkzDrawCircle[in,color=red](A2,B2,C2)
\tkzDrawCircle[in,color=red](C2,B2,A2)
\tkzDrawCircle[in,color=red](B2,A2,C2)
\end{tikzpicture}
\end{document} 

在此处输入图片描述

相关内容