🏠

初中平面几何

Table of Contents

1. 欧几里德

tkz-euclide 用来画欧式几何的图是很方便的。 tkz-euclide 用的就是欧几里德的思路,来画欧式几何的图:先仔细计算、确定点,再连线,再构成面。其中点的计算,恰恰是尺规作图的思路。数学老师可以接受这套思路,未入门的初中生接受有些困难:能灵活运用意味着已经几何入门。

tkz-euclide 另一个负累是 \( \LaTeX{} \) 的学习和使用。“负累”用 AI 的话说:心智负担。\( \LaTeX{} \) 的心智负担由 slingshot tikz 负责去掉

slingshot tikz input.tikz output.png

slingshot-tikz-arch.png

Figure 1: Slingshot TikZ Architecture

Tectonic 也去了一部分 \( \LaTeX{} \) 安装,包维护的心智负担。 input.tikz 如何编辑呢?可以说随便一个编辑器就可以编辑,但这么说不解决实质问题。因此写了个 tikz-modeEmacs 方便编辑。 tikz-modeEmacs 甚至都没有存在必要,因为 Emacs 内置的 LaTeX-mode 完全可以胜任,实际 tikz-mode 也不过继承了 LaTeX-mode 的一个薄的封装。因此就给 tikz-mode 加了图片预览的能力:用 slingshot tikz 编译出来,用 Emacs Buffer 展示图片,键绑定 C-c C-c ,仅此而已。加之 Emacsorg-mode ,对文档的理解深刻至极,甚至可以抵达 \( \LaTeX{} \) 的境界。因此增加 ob-tikz ,把 input.tikz 化身为 org-mode 里代码块,直接在 org 文档编辑,代码块执行输出 output.png ,输出后直接嵌入到文档里了。

emacs-ob-tikz.png

Figure 2: Emacs org mode ob-tikz

这些后续会出一个 skill 给 AI 使用。

2. 画三角形

画一个三角形:

  1. 确定底边两点 A,B,
  2. 确定顶点 C,
  3. 连接 A,B,C,
  4. 标注 A,B,C。
\tkzDefTriangle[equilateral](A,B)

equilateral-triangle.png

Figure 3: 正三角形

\begin{tkzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}

  \tkzDefTriangle[equilateral](A,B)
  \tkzGetPoint{C}

  \tkzDrawPolygon(A,B,C)

  \tkzLabelPoint[left](A){$A$}
  \tkzLabelPoint[right](B){$B$}
  \tkzLabelPoint[above](C){$C$}
\end{tkzpicture}
\tkzDefPoint(15:4){B}

equilateral-triangle-with-15-degree.png

Figure 4: 倾斜 15 度的正三角形

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(15:4){B} % 极坐标定义点
  \tkzDefTriangle[equilateral](A,B)
  \tkzGetPoint{C}
  \tkzDrawPolygon(A,B,C)
  \tkzLabelPoint[left](A){$A$}
  \tkzLabelPoint[right](B){$B$}
  \tkzLabelPoint[above](C){$C$}
\end{tikzpicture}
\tkzDefTriangle[two angles=75 and 75](A,B)

isosceles-triangle-with-75-degree.png

Figure 5: 两角 75 度的等腰三角形

\begin{tikzpicture}
  \tkzDefPoints{0/0/A, 4/0/B}
  \tkzDefTriangle[two angles=75 and 75](A,B)
  \tkzGetPoint{C}
  \tkzDrawPolygon(A,B,C)
  \tkzLabelPoint[left](A){$A$}
  \tkzLabelPoint[right](B){$B$}
  \tkzLabelPoint[above](C){$C$}
  \tkzLabelAngle[pos=.6](B,A,C){$75$}
  \tkzMarkAngle[size=0.3](B,A,C)
  \tkzMarkAngle[size=0.3](C,B,A)
  \tkzLabelAngle[pos=.6](C,B,A){$75$}
  \tkzMarkAngle[size=0.5](A,C,B)
  \tkzLabelAngle(A,C,B){$30$}
\end{tikzpicture}

\tkzLabelPoints[below](A,B)
\tkzLabelPoints[above](C)

any-triangle.png

Figure 6: 任意三角形

\begin{tikzpicture}
  \tkzDefPoints{0/0/A, 4/0/B}
  \tkzDefTriangle[two angles=50 and 60](A,B)
  \tkzGetPoint{C}
  \tkzDrawPolygon(A,B,C)
  \tkzLabelPoints[below](A,B)
  \tkzLabelPoints[above](C)
\end{tikzpicture}

3. 画几个圆

\tkzDrawCircle[option](O,C)

circle01.png

Figure 7: 圆心在 O, 圆周经过点 C 的圆

\begin{tikzpicture}
  \tkzDefPoint(0,0){O}
  \tkzDefPoint(30:2){C}
  \tkzLabelPoints[right](O,C)
  \tkzDrawPoint(O)
  \tkzDrawCircle(O,C)
\end{tikzpicture}
\tkzDefCircle[R](O,d) \tkzGetPoint{a}
\tkzDrawCircle(O,a)

circle02.png

Figure 8: 以 O 为圆心,d为半径作圆

\begin{tikzpicture}
  \tkzDefPoint(0,0){O}
  \tkzLabelPoints(O)
  \tkzDefCircle[R](O,2) \tkzGetPoint{a}
  \tkzDrawCircle(O,a)
  \tkzDrawPoint(O)
\end{tikzpicture}
\tkzDefCircle[circum](A,B,C) \tkzGetPoint{K}
\tkzDrawCircle(K,A)

circle03.png

Figure 9: 三角形 ABC 的外接圆

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,2.5){C}
  \tkzDrawPolygon(A,B,C)
  \tkzDefCircle[circum](A,B,C) \tkzGetPoint{K}
  \tkzDrawCircle(K,A)
  \tkzLabelPoints(B)
  \tkzLabelPoints[left](A)
  \tkzLabelPoints[above](C)
\end{tikzpicture}
\tkzDefCircle[in](A,B,C) \tkzGetPoint{I} \tkzGetSecondPoint{T}
\tkzDrawCircle(I,T)

circle04.png

Figure 10: 三角形 ABC 的内切圆

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,2.5){C}
  \tkzDrawPolygon(A,B,C)
  \tkzDefCircle[in](A,B,C) \tkzGetPoint{I} \tkzGetSecondPoint{T}
  \tkzDrawCircle(I,T)
  \tkzLabelPoints(B)
  \tkzLabelPoints[left](A)
  \tkzLabelPoints[above](C)
\end{tikzpicture}

4. 常用辅助线

绘制辅助线(如垂线、角平分线、平行线或中垂线)的核心思想是“先计算后绘制”。你需要先用 \tkzDefLine 等定义辅助线上的点,再 \tkzGetPoint 用获取坐标,最后用 \tkzDrawSegments 将其画出。

常用辅助线命令

  • 垂线:
    • 使用 \tkzDefLine[orthogonal=through P](A,B)
    • perpendicular
  • 平行线:
    • 使用 \tkzDefLine[parallel=through P](A,B)
  • 角平分线:
    • 使用 \tkzDefLine[bisector](A,B,C) (平分 \( \angle{ABC} \) )
  • 中垂线(垂直平分线):
    • 使用 \tkzDefLine[mediator](A,B) (生成两个点)
  • 点到直线投影(垂足):
    • 使用 \tkzDefPointBy[projection = onto A--B](P)

代码示例

triangle01.png

Figure 11: 代码示例

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,3){C}
  \tkzLabelPoints[below](A,B)
  \tkzLabelPoints[above](C)
  \tkzDrawPolygon(A,B,C)
\end{tikzpicture}

垂线

orthogonal01.png

Figure 12: 做 AB 上垂线 CD

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,3){C}
  \tkzDefLine[orthogonal=through C](A,B) \tkzGetPoint{P}
  \tkzInterLL(P,C)(A,B) \tkzGetPoint{D}
  \tkzLabelPoints[below](A,B,D)
  \tkzLabelPoints[above](C,P)
  \tkzDrawPolygon(A,B,C)
  \tkzDrawSegments(C,D)
  \tkzMarkRightAngle(B,D,C)
\end{tikzpicture}

平行线

parallel01.png

Figure 13: 三角形拓展为平行四边形

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,3){C}
  \tkzDefLine[parallel=through C](A,B) \tkzGetPoint{P}
  \tkzDefLine[parallel=through B](A,C) \tkzGetPoint{Q}
  \tkzInterLL(B,Q)(C,P) \tkzGetPoint{D}
  \tkzLabelPoints[below](A,B)
  \tkzLabelPoints[above](C,D)
  \tkzDrawPolygon(A,B,C)
  \tkzDrawSegments[dotted](C,D B,D)
\end{tikzpicture}

角平分线

bisector01.png

Figure 14: 角平分线

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,3){C}
  \tkzDefLine[bisector](B,A,C)
  \tkzGetPoint{P}
  \tkzInterLL(A,P)(C,B)
  \tkzGetPoint{D}
  \tkzLabelPoints[below](A,B)
  \tkzLabelPoints[above](C)
  \tkzLabelPoints[right](D)    
  \tkzDrawPolygon(A,B,C)
  \tkzDrawSegment[dotted](A,D)
\end{tikzpicture}

垂直平分线

mediator01.png

Figure 15: 垂直平分线

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,3){C}
  \tkzDefLine[mediator](A,B)
  \tkzGetFirstPoint{M}
  \tkzGetSecondPoint{N}
  \tkzInterLL(A,B)(M,N)
  \tkzGetPoint{D}
  \tkzDrawPolygon(A,B,C)
  \tkzDrawSegment[dotted](M,N)
  \tkzDrawPoint(D)
  %\tkzMarkRightAngle(B,D,M)
  \tkzLabelPoints(A,B,C,D)
\end{tikzpicture}

垂足

projection01.png

Figure 16: 垂足

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(1.5,3){C}
  \tkzDefPointBy[projection = onto A--B](C)
  \tkzGetPoint{D}
  \tkzDrawPolygon(A,B,C)
  \tkzDrawSegment(C,D)
  \tkzLabelPoints[below](A,B,D)
  \tkzLabelPoints[above](C)
\end{tikzpicture}

5. 初中题

在正方形 ABCD 中,点 E 在射线 BD 上,点 M 在 BC 的延长线上,CN 为 \( \angle{DCM} \)的平分线,点 F 为射线 CN 上一点,且 CE=FE .

(1)如图,当点 E 在线段 BD 上时,补全图形,求证:\( 2\angle{BEC} + \angle{CEF} = 180^\circ \) ;

(2)在(1)的条件下,用等式表示线段 CF,DE,BE 之间的数量关系,并证明;

(3)若 AB = 4 ,BE = 3DE,直接写出线段 CF 的长度.

\begin{tikzpicture}
  \tkzDefPoints{0/4/A,0/0/B,4/0/C,4/4/D}
  \tkzDefPoint(45:4){E}
  \tkzDrawPolygon(A,B,C,D)
  %\tkzDrawLine(B,D)
  \tkzLabelPoint[above](A){$A$}
  \tkzLabelPoint[below](B){$B$}
  \tkzLabelPoint[below](C){$C$}
  \tkzLabelPoint[above](D){$D$}
  \tkzLabelPoint[left](E){$E$}
  \tkzDrawSegments(B,D)
  \tkzDrawSegments(C,E)
\end{tikzpicture}

m-12.png

Figure 17: 图 M-12

5.1. AI 的解答

(1)补全图形,求证 \( 2\angle{BEC} + \angle{CEF} = 180^\circ \)

补全:点 \( M \) 在 \( BC \) 的延长线上;作 \( \angle{DCM} \) 的平分线 \( CN \),在射线 \( CN \) 上取点 \( F \),使 \( CE = FE \)。

\begin{tikzpicture}[scale=1.1]
  \tkzDefPoints{0/4/A, 0/0/B, 4/0/C, 4/4/D}
  \tkzDefPoint(3,3){E}
  \tkzDefPoint(6,0){M}
  \tkzDefPoint(7,3){N}
  \tkzInterLC(C,N)(E,C) \tkzGetPoints{C1}{F}
  \tkzDrawPolygon(A,B,C,D)
  \tkzDrawLine[add=0 and 0.3](B,D)
  \tkzDrawLine[add=0 and 0.3](B,C)
  \tkzDrawLine[add=0 and 0.6, dashed](C,N)
  \tkzDrawSegments(C,E E,F)
  \tkzMarkAngle[size=0.35](N,C,D)
  \tkzMarkAngle[size=0.5](M,C,N)
  \tkzMarkAngle[size=0.8](B,E,C)
  \tkzMarkAngle[size=0.6](F,C,E)
  \tkzMarkSegment[mark=|](C,E)
  \tkzMarkSegment[mark=|](E,F)
  \tkzLabelPoints[above](A,D)
  \tkzLabelPoints[below left](B)
  \tkzLabelPoints[below](C)
  \tkzLabelPoints[left](E)
  \tkzLabelPoints[below right](F,N)
  \tkzLabelPoints[right](M)
\end{tikzpicture}

m-12-full.png

Figure 18: 图 M-12 补全

证明:设 \( \angle{BEC} = \theta \)。

因为 \( CN \) 平分 \( \angle{DCM} \),而 \( \angle{DCM} = 90^\circ \),所以 \( \angle{DCF} = 45^\circ \),

\[ \angle{BCF} = \angle{BCD} + \angle{DCF} = 90^\circ + 45^\circ = 135^\circ . \]

又 \( E \) 在射线 \( BD \) 上,\( BD \) 平分 \( \angle{ABC} \),故 \( \angle{CBE} = 45^\circ \)。在 \( \triangle BCE \) 中,

\[ \angle{BCE} = 180^\circ - \angle{CBE} - \angle{BEC} = 135^\circ - \theta , \]

所以

\[ \angle{ECF} = \angle{BCF} - \angle{BCE} = 135^\circ - (135^\circ - \theta) = \theta = \angle{BEC} . \]

由 \( CE = FE \),\( \triangle CEF \) 为等腰三角形,顶角 \[ \angle{CEF} = 180^\circ - 2\angle{ECF} = 180^\circ - 2\angle{BEC} , \] 故 \( 2\angle{BEC} + \angle{CEF} = 180^\circ \)。∎

(2)线段 \( CF \),\( DE \),\( BE \) 之间的数量关系

\[ CF = BE - DE . \]

辅助线:在射线 \( DB \) 上取点 \( G \),使 \( CG = CE \)(\( G \) 与 \( E \) 关于 \( BD \) 的中点对称,位于 \( B \)、\( E \) 之间),连接 \( CG \)。

\begin{tikzpicture}[scale=1.1]
  \tkzDefPoints{0/4/A, 0/0/B, 4/0/C, 4/4/D}
  \tkzDefPoint(3,3){E}
  \tkzDefPoint(6,0){M}
  \tkzDefPoint(7,3){N}
  \tkzInterLC(C,N)(E,C) \tkzGetPoints{C1}{F}
  \tkzDefMidPoint(B,D) \tkzGetPoint{O}
  \tkzDefPointBy[homothety=center E ratio 2](O) \tkzGetPoint{G}
  \tkzDrawPolygon(A,B,C,D)
  \tkzDrawLine[add=0 and 0.3](B,D)
  \tkzDrawLine[add=0 and 0.3](B,C)
  \tkzDrawLine[add=0 and 0.6, dashed](C,N)
  \tkzDrawSegments(C,E E,F)
  \tkzDrawSegment[dashed](C,G)
  \tkzMarkAngle[size=0.35](N,C,D)
  \tkzMarkAngle[size=0.5](M,C,N)
  \tkzMarkAngle[size=0.8](B,E,C)
  \tkzMarkAngle[size=0.6](F,C,E)
  \tkzMarkSegment[mark=|](C,E)
  \tkzMarkSegment[mark=|](E,F)
  \tkzLabelPoints[above](A,D)
  \tkzLabelPoints[below left](B)
  \tkzLabelPoints[below](C)
  \tkzLabelPoints[left](E)
  \tkzLabelPoints[below right](F,N)
  \tkzLabelPoints[below](M)
  \tkzLabelPoints[above left](G)
\end{tikzpicture}

m-12-aux.png

Figure 19: 图 M-12 辅助线

证明:

由(1)知 \( \angle{ECF} = \angle{BEC} \)。在 \( \triangle CEG \) 中, \( CE = CG \),且 \( G \) 在 \( BE \) 上,故

\[ \angle{CEG} = \angle{EGC} = \angle{BEC} , \qquad \angle{ECG} = 180^\circ - 2\angle{BEC} . \]

而由(1),\( \angle{CEF} = 180^\circ - 2\angle{BEC} \),所以 \( \angle{ECG} = \angle{CEF} \)。

在 \( \triangle ECG \) 与 \( \triangle CEF \) 中,\( CE = CE \),\( CG = CE = EF \),\( \angle{ECG} = \angle{CEF} \),故

\[ \triangle ECG \cong \triangle CEF \quad \text{(SAS)}, \]

得 \( EG = CF \)。

又 \( CE = CG \) 且 \( E \)、\( G \) 在直线 \( BD \) 上,而 \( C \) 到 \( BD \) 的垂足是 \( BD \) 的中点 \( O \)(正方形对角线互相垂直平分),故 \( E \)、\( G \) 关于 \( O \) 对称,\( DG = BE \)。

因此

\[ CF = EG = DG - DE = BE - DE . \quad ∎ \]

(3)若 \( AB = 4 \),\( BE = 3DE \),求 \( CF \)

\[ BD = \sqrt{2}\,AB = 4\sqrt{2} , \qquad BE + DE = BD . \]

由 \( BE = 3DE \) 得 \( 4DE = 4\sqrt{2} \),所以 \( DE = \sqrt{2} \), \( BE = 3\sqrt{2} \)。

\[ CF = BE - DE = 3\sqrt{2} - \sqrt{2} = 2\sqrt{2} . \]

答:\( CF = 2\sqrt{2} \)。

5.2. 人类的解答

(1)

\begin{tikzpicture}
  \tkzDefPoints{0/4/A,0/0/B,4/0/C,4/4/D}
  \tkzDefPoint(45:4){E}
  \tkzDefPoint(8,0){M}
  \tkzDefShiftPoint[C](45:5){N}
  \tkzInterLC(C,N)(E,C)\tkzGetSecondPoint{F}
  \tkzDrawPolygon(A,B,C,D)
  \tkzDrawPoints(F)
  \tkzLabelPoint[above](A){$A$}
  \tkzLabelPoint[below](B){$B$}
  \tkzLabelPoint[below](C){$C$}
  \tkzLabelPoint[above](D){$D$}
  \tkzLabelPoint[left](E){$E$}
  \tkzLabelPoint[below](M){$M$}
  \tkzLabelPoint[right](N){$N$}
  \tkzLabelPoint[right](F){$F$}
  \tkzDrawSegments(B,D)
  \tkzDrawSegments(C,E)
  \tkzDrawSegments[dotted](C,M C,N E,F)
\end{tikzpicture}

m-12-1.png

Figure 20: M-12-1

\( \because \angle{DCM} = 90^\circ \) 并且 CN 平分 \( \angle{DCM} \)

\( \therefore \angle{DCN} = 45^\circ \)

\( \because \angle{BDC} = 45^\circ \)

\( \therefore BD 平行 CN \)

\( \therefore \angle{DEF} = \angle{CFE} \) 并且 \( \angle{BEC} = \angle{ECF} \)

\( \because CE = EF \)

\( \therefore \angle{ECF} = \angle{EFC} \)

\( \therefore \angle{BEC} = \angle{DEF} \)

\( \therefore 2\angle{BEC} + \angle{CEF} = \angle{BEC} + \angle{CEF} + \angle{DEF} = 180^\circ \)

(2)

\begin{tikzpicture}
  \tkzDefPoints{0/4/A,0/0/B,4/0/C,4/4/D}
  \tkzDefPoint(45:4){E}
  \tkzDefPoint(8,0){M}
  \tkzDefShiftPoint[C](45:5){N}
  \tkzInterLC(C,N)(E,C)\tkzGetSecondPoint{F}
  \tkzDefLine[parallel=through C](E,F) \tkzGetPoint{P}
  \tkzInterLL(P,C)(E,B)\tkzGetPoint{G}
  \tkzDrawPolygon(A,B,C,D)
  \tkzDrawPoints(F,G)
  \tkzLabelPoint[above](A){$A$}
  \tkzLabelPoint[below](B){$B$}
  \tkzLabelPoint[below](C){$C$}
  \tkzLabelPoint[above](D){$D$}
  \tkzLabelPoint[left](E){$E$}
  \tkzLabelPoint[below](M){$M$}
  \tkzLabelPoint[right](N){$N$}
  \tkzLabelPoint[right](F){$F$}
  \tkzLabelPoint[left](G){$G$}
  \tkzDrawSegments(B,D)
  \tkzDrawSegments(C,E)
  \tkzDrawSegments[dotted](C,M C,N E,F C,G)
\end{tikzpicture}

m-12-2.png

Figure 21: M-12-2

如图,过 C 做 EF 平行线,与 BE 相交于 G 点。

%% 过 C 做 EF 平行线
\tkzDefLine[parallel=through C](E,F)
%% 得到平行线上一点P
\tkzGetPoint{P}
%% PC与EB相交于G
\tkzInterLL(P,C)(E,B)
\tkzGetPoint{G}

可证

  1. \( \triangle{BGC} \triangleq \triangle{CED} \)
  2. \( \triangle{CEG} \triangleq \triangle{CEF} \)

\( \therefore BG = ED \)

\( \because GE = CF \)

\( \therefore CF = |BE - ED| \)

(3)

\( CF = 2\sqrt{2} \)