![使用 Tkz-euclide 对拿破仑定理进行可视化](https://linux22.com/image/471673/%E4%BD%BF%E7%94%A8%20Tkz-euclide%20%E5%AF%B9%E6%8B%BF%E7%A0%B4%E4%BB%91%E5%AE%9A%E7%90%86%E8%BF%9B%E8%A1%8C%E5%8F%AF%E8%A7%86%E5%8C%96.png)
这里有一个拿破仑定理的简短维基百科定义:
“拿破仑定理指出,如果在任意三角形的边上构造等边三角形,无论是全部向外还是全部向内,连接这些等边三角形中心的线本身就会形成一个等边三角形。”
我尝试在 tkz-euclide 中将其可视化,但是没有成功。MWE:
\documentclass[border=2mm]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){a}
\tkzDefPoint(5,1){b}
\tkzDefPoint(1,4){c}
\tkzDefPoint(1,-3){d}
\tkzDefPoint(6,4){e}
\tkzDefPoint(-1,3){f}
\tkzDrawPolygon(a,b,c)
\tkzDrawPolygon(a,b,d)
\tkzDrawPolygon(b,c,e)
\tkzDrawPolygon(a,c,f)
\tkzInCenter(a,b,c)\tkzGetPoint{D}
\tkzInCenter(a,b,d)\tkzGetPoint(A)
\tkzInCenter(b,c,e)\tkzGetPoint(B)
\tkzInCenter(a,c,f)\tkzGetPoint(C)
\tkzDrawPoint[red](D)
\tkzDrawPoint[red](A)
\tkzDrawPoint[red](B)
\tkzDrawPoint[red](C)
\tkzDrawPolygon(A,B,C)
\end{tikzpicture}
\end{document}
我收到以下错误消息:,,No shape named 'A' is known.
这很奇怪,因为它显然适用于 D。No shape named 'B' is known.
No shape named 'C' is known.
是我做错了什么还是这是一个错误?
小提示:这些点的定义还不能形成三个等边三角形。我首先选择了一些点,并想先处理几何质心。
提前致谢!
答案1
这只是一个拼写错误:使用{ }
而不是( )
\documentclass[border=2mm]{standalone}
%\usepackage{tikz}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){a}
\tkzDefPoint(5,1){b}
\tkzDefPoint(1,4){c}
\tkzDefPoint(1,-3){d}
\tkzDefPoint(6,4){e}
\tkzDefPoint(-1,3){f}
\tkzDrawPolygon(a,b,c)
\tkzDrawPolygon(a,b,d)
\tkzDrawPolygon(b,c,e)
\tkzDrawPolygon(a,c,f)
\tkzInCenter(a,b,c)\tkzGetPoint{D}
\tkzInCenter(a,b,d)\tkzGetPoint{A}% ! { }
\tkzInCenter(b,c,e)\tkzGetPoint{B}%(B)
\tkzInCenter(a,c,f)\tkzGetPoint{C}%(C)
\tkzDrawPoint[red](D)
\tkzDrawPoint[red](A)
\tkzDrawPoint[red](B)
\tkzDrawPoint[red](C)
\tkzDrawPolygon(A,B,C)
\end{tikzpicture}
\end{document}
答案2
最后,这个问题很有用,因为它使我能够改进我的程序。例如引入参数indirect
来定义间接方向的等边三角形。我还介绍了该check_equilateral
函数。
以下代码仅适用于tkz-elements
本周发布的 1.40 版。该代码的优点是它概括了答案。您可以修改初始三角形,而无需修改其他任何内容。
一些解释。
T.ABC
是初始三角形。它是一个对象,其属性包括顶点定义的线(或线段)。我们 get_points ( )T.A = T.ABC.bc
对应于直线 (BC) 等的线。其他线属性为ca
和ab
。
T.BCD = T.ABC.bc
:等边(间接)定义等边三角形。间接参数用于获得满足 (BC,BD)=-60° 的三角形
一个三角形有三个顶点,分别由属性 (pa,pb,pc) 表示。我们通过以下方式获得顶点:z.D = T.BCD.pc
。
然后我们 get_points() 每个三角形的质心点。
check_equilateral
是一个测试,确定三角形是否是等边的。
% !TEX TS-program = lualatex
\documentclass[border=2mm]{standalone}
\usepackage{tkz-euclide,tkz-elements,ifthen}
\begin{document}
\begin{tkzelements}
z.A = point : new ( 0 , 0 )
z.B = point : new ( 5 , 1 )
z.C = point : new ( 1 , 3 )
T.ABC = triangle : new (z.A,z.B,z.C)
T.BCD = T.ABC.bc : equilateral (indirect)
T.CAE = T.ABC.ca : equilateral (indirect)
T.ABF = T.ABC.ab : equilateral (indirect)
z.D = T.BCD.pc
z.E = T.CAE.pc
z.F = T.ABF.pc
z.G = T.BCD.centroid
z.H = T.CAE.centroid
z.I = T.ABF.centroid
T.GHI = triangle : new (z.G,z.H,z.I)
bool_GHI = T.GHI : check_equilateral ()
bool_ABC = T.ABC : check_equilateral ()
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygons[thick](B,C,D A,C,E A,B,F)
\tkzDrawPoints(A,B,C,D,E,F,G,H,I)
\tkzLabelPoints(A,B,C,D,E,F,G,H,I)
\ifthenelse{\equal{\tkzUseLua{bool_GHI}}{false}}{%
\tikzset{col/.style = {green}}}{\tikzset{col/.style = {red}}}
\tkzDrawPolygons[thick,col](G,H,I)
\ifthenelse{\equal{\tkzUseLua{bool_ABC}}{false}}{%
\tikzset{col/.style = {green}}}{\tikzset{col/.style = {red}}}
\tkzDrawPolygons[thick,col](A,B,C)
\end{tikzpicture}
\end{document}