|
如题。我现在做一个反演的题,题目如下:
$\odot O_1,\odot O_2,\odot O_3,\odot O_4$依次两两外切于点$A_1, A_2, A_3, A_4$,求证$A_1,A_2,A_3,A_4$四点共圆。
作图用了tkz-euclide,代码如下(以下代码中tkzGetPoints{}{}的第二个参数,多数都是没用的,只是要有个名字用来占个位置):
- \begin{tikzpicture}
- \tkzDefPoints{0/0/O_1,0/-2.5/O_2,3/0/O_4,1/0/A_4,0/-1/A_1,4/-4/X,4/-3/Y,1/2.5/Z}
- % 以$\odot(X,Y)$为反演圆,将$\odot O_2,\odot O_4$都反演,取得反形的一条外公切线PT_1'T_2'
- \tkzDefCircleBy[inversion = center X through Y](O_4,A_4)\tkzGetPoints{O_4''}{A_4''}
- \tkzDefCircleBy[inversion = center X through Y](O_2,A_1)\tkzGetPoints{O_2''}{A_1''}
- \tkzInterOCT(O_4'',A_4'')(O_2'',A_1'')\tkzGetPoint{P}
- \tkzDefTangent[from=P](O_2'',A_1'')\tkzGetPoints{T_1'}{T_1''}
- \tkzDefTangent[from=P](O_4'',A_4'')\tkzGetPoints{T_2'}{T_2''}
- % 将直线$PT_1'T_2'$按反演圆$\odot(X,Y)$反演,此圆过反演中心$X$,得到的反形$\odot O_3$与$\odot O_2,\odot O_4$都相切
- \tkzDefPointBy[inversion = center X through Y](T_1')\tkzGetPoint{T_1}
- \tkzDefPointBy[inversion = center X through Y](T_2')\tkzGetPoint{T_2}
- \tkzDefTriangleCenter[circum](X,T_1,T_2)\tkzGetPoint{O_3}
- \tkzInterCC(O_3,X)(O_2,A_1)\tkzGetPoints{A_2}{A_2'}
- \tkzInterCC(O_3,X)(O_4,A_4)\tkzGetPoints{A_3}{A_3'}
- % 以$\odot(A_4,Z)$为反演圆,将原图形反演
- \tkzDefCircleBy[inversion = center A_4 through Z](O_2,A_2)\tkzGetPoints{O_2'}{B_2'}
- \tkzDefCircleBy[inversion = center A_4 through Z](O_3,A_3)\tkzGetPoints{O_3'}{B_3'}
- \tkzDefPointBy[inversion = center A_4 through Z](A_1)\tkzGetPoint{A_1'}
- \tkzDefPointBy[inversion = center A_4 through Z](A_3)\tkzGetPoint{A_3'}
- \tkzInterCC(O_2',B_2')(O_3',B_3')\tkzGetPoints{C}{C'}
- \tkzDefTangent[at=A_1'](O_2')\tkzGetPoint{K_1}
- \tkzDefTangent[at=C](O_2')\tkzGetPoint{K_2}
- \tkzInterLL(A_1',K_1)(C,K_2)\tkzGetPoint{M}
- \tkzDefTangent[at=A_3'](O_3')\tkzGetPoint{K_1}
- \tkzDefTangent[at=C](O_3')\tkzGetPoint{K_2}
- \tkzInterLL(A_3',K_1)(C,K_2)\tkzGetPoint{N}
- \tkzDrawCircles(O_1,A_1 O_2,A_2 O_3,A_3 O_4,A_4)
- \tkzDrawCircles(O_2',C O_3',C)
- \tkzDrawSegments(M,N A_1',M A_3',N)
- \tkzLabelPoints[left](O_1)
- \tkzLabelPoints[below](O_2)
- \tkzLabelPoints[below right](O_3)
- \tkzLabelPoints[below left](O_4)
- \tkzLabelPoints[left](A_1)
- \tkzLabelPoints[below](A_2)
- \tkzLabelPoints[below right](A_3)
- \tkzLabelPoints[below left](A_4)
- \tkzLabelPoints[below left](C)
- \tkzLabelPoints[below left](A_1')
- \tkzLabelPoints[below left](A_3')
- \tkzDrawPoints(A_1,A_2,A_3,A_4,O_1,O_2,O_3,O_4)
- \tkzDrawPoints(A_1',A_3',C)
- \end{tikzpicture}
复制代码
其中tkzInterOCT是用来定义两个圆的两条外公切线的交点,定义如下:
- \def\tkzInterOCT(#1,#2)(#3,#4){
- \begingroup
- % 取得两圆的半径
- \tkzCalcLength(#1,#2)\tkzGetLength{r}
- \tkzCalcLength(#3,#4)\tkzGetLength{R}
- \pgfmathsetmacro{\K}{\r/(\r-\R)}
- \tkzDefPointWith[linear,K=\K](#1,#3)
- \endgroup
- }
复制代码
正常的在GeoGebra里画出来,点$A_1'$应该在$\odot O_2'$上,所以后面才能用\tkzDefTangent[at=A_1'](O_2')\tkzGetPoint{K_1}来得到过圆上一点的切线。但在tikz里画出来,$A_1'$就不在$\odot O_2'$上了,差了一点,导致整个图都有问题。这要怎么改才行? |
|