tkz-euclide:反转的错误实现

tkz-euclide:反转的错误实现

以下代码应生成一个点及其相对于圆的逆点的图像:

\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){O}
\tkzDefPoint(1.3,1){A}
\tkzDefPoint(2.5,0){R}
%\tkzDefPoint(1,0){R}
\tkzDefPointBy[inversion = center O through R](A)\tkzGetPoint{A'}
\tkzDrawPoints[fill=black](O,A,A')
\tkzLabelPoints(O,A,A')
\tkzDrawCircle[dotted](O,R)
\end{tikzpicture}
\end{document}

但是点和它的图像都在圆内,这是不可能的。当我将圆的半径改为 1.0 时,我得到了正确的图像。tkz-tools-eu-points-by.tex在我看来,文件中的逆实现好像从未使用过圆的半径,即命令\tkzInversePoint(#1,#2)(#3)#4不使用其参数#2。然而,这在以前版本的tkz-euclide软件包中工作正常。

答案1

没错,这是一个错误。我一直在奇怪地修改这个宏。你可以用下面的修改来纠正它,它将在下一次更新中出现

\documentclass{standalone}
\usepackage{tkz-euclide}
\makeatletter
\def\tkzInversePoint(#1,#2)(#3)#4{%
\begingroup 
\gdef\tkz@LastList{#4}
    \foreach\PointIP in {#3}{%
      \FirstPointInList\tkz@LastList
      \ifx\tkz@FirstPoint\tkzutil@empty  
         \xdef\tkz@pointtsf{\PointIP '}
      \else
         \xdef\tkz@pointtsf{\tkz@FirstPoint}
      \fi 
   \tkzCalcLength[cm](#1,#2)\tkzGetLength{tkz@lna}
   \tkzCalcLength[cm](#1,\PointIP)\tkzGetLength{tkz@lnb}
    \edef\tkz@lnc{\tkz@lna/\tkz@lnb*\tkz@lna}
   \tkzVecKNorm[\tkz@lnb](#1,\PointIP) 
   }  
\endgroup
} 
\def\tkzUInversePoint(#1,#2)(#3){%  
\begingroup  
   \tkzCalcLength[cm](#1,#2)\tkzGetLength{tkz@lna}% 
   \tkzCalcLength[cm](#1,#3)\tkzGetLength{tkz@lnb}% 
    \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
   \tkzVecKNorm[\tkz@lnc](#1,#3) 
\endgroup
} 
\makeatother
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){O}
\tkzDefPoint(1.3,1){A}
\tkzDefPoint(2.5,0){R}
%\tkzDefPoint(1,0){R}
\tkzDefPointBy[inversion = center O through R](A)\tkzGetPoint{A'}
\tkzDrawPoints[fill=black](O,A,A',R)
\tkzLabelPoints(O,A,A')
\tkzDrawCircle[](O,R)
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容