下面是代码 ,做题五分钟,写代码五小时啊。
import cgi
from re import L
from manim import *
from manim.utils.tex import TexTemplate
class FullChineseExample(Scene):
def construct(self):
# 创建 CTeX 模板 #下面中文和拉泰赫公式混合排版 需要安装cTex宏包
ctex_template = TexTemplate()
ctex_template.add_to_preamble(r"\usepackage{ctex}")
ctex_template.tex_compiler = "xelatex"
ctex_template.output_format = ".xdv"
# 标题
title = Tex(
r"2026河南中考数学15题",
tex_template=ctex_template,
font_size=36
).to_edge(UP)
# 题目
timu = Tex(
r"如图三角形ABC, $AB=AC=5$,$BC=6$,$CD$平分 $\angle ACB$,$E$在边$BC$上,$AE=2\sqrt{5}$,求$BF$的长度",
tex_template=ctex_template,
font_size=30
).next_to(title, DOWN)
self.play(Write(title))
self.play(Write(timu))
self.wait()
B,A,C,O = Dot([0,0,0],radius=0.05,color=RED),Dot([3,4,0],radius=0.05,color=RED),Dot([6,0,0],radius=0.05,color=RED),Dot([3,3/2,0],radius=0.05,color=RED)
AB = Line(A,B)
BC = Line(B,C)
CA = Line(C,A)
corrds1 =(C.get_center(),O.get_center())
corrds2 = (A.get_center(),B.get_center())
D = Dot(line_intersection(corrds1,corrds2),radius=0.05,color=RED)
CD = Line(C,D)
dotgroup = VGroup(A,B,C,D)
linegroup = VGroup(AB,BC,CA,CD)
A_label = Text("A",font_size=20).next_to(A,UP,buff=0.1)
B_label = Text("B",font_size=20).next_to(B,LEFT,buff=0.1)
C_label = Text("C",font_size=20).next_to(C,RIGHT,buff=0.1)
D_label = Text("D",font_size=20).next_to(D,LEFT,buff=0.1)
labelgroup = VGroup(A_label,B_label,C_label,D_label)
yuanshituxing =VGroup(dotgroup,labelgroup,linegroup).shift(LEFT*4+DOWN*3)
self.play(Write(dotgroup))
self.play(Write(linegroup))
self.play(Write(labelgroup))
self.wait()
#AH FG 辅助线
text1 = Text("当E在靠近B时",font_size=20).to_edge(LEFT,buff=2)
self.play(Write(text1))
E = Dot([-3,-3,0],radius=0.05,color=RED)
H,G = Dot([-1,-3,0],radius=0.05,color=RED),Dot([-2,-3,0],radius=0.05,color=RED)
AE = Line(A,E)
corrds3 =(A.get_center(),E.get_center())
corrds4 =(C.get_center(),D.get_center())
F= Dot(line_intersection(corrds3,corrds4),radius=0.05,color=RED)
BF = Line(B,F)
E_label = Text("E",font_size=20).next_to(E,DOWN,buff=0.1)
F_label = Text("F",font_size=20).next_to(F,RIGHT+UP,buff=0.1)
self.play(Create(E),Create(F),run_time=0.5)
self.play(Create(E_label),Create(F_label),run_time=0.5)
self.play(Create(AE),Create(BF),run_time=1)
AH = DashedLine(A,H)
FG = DashedLine(F,G)
H_label = Text("H",font_size=20).next_to(H,DOWN,buff=0.1)
G_label = Text("G",font_size=20).next_to(G,DOWN,buff=0.1)
chuizhifuhao1 = RightAngle(AH,BC,color=RED,quadrant=[-1,1])
chuizhifuhao2 = RightAngle(FG,BC,color=RED,quadrant=[-1,1])
self.play(Create(AH),run_time=3)
self.play(Create(H_label),run_time=0.5)
self.play(Create(chuizhifuhao1))
self.play(Create(FG),run_time=2)
self.play(Create(G_label),run_time=0.5)
self.play(Transform(chuizhifuhao1.copy(),chuizhifuhao2))
self.wait()
angle1 = Angle(CA,CD,color=GREEN,quadrant=[1,1])
angle2 = Angle(CD,Line(C,B),color=GREEN,quadrant=[1,1])
angle3 = Angle(AE,AH,color=GREEN,quadrant=[1,1])
self.play(Create(angle1),Create(angle2),Create(angle3),run_time=0.5)
angle1_label = MathTex(r" \angle 1",font_size=20).move_to(angle1.point_from_proportion(0.5)+UP*0.1+LEFT*0.2)
angle2_label = MathTex(r" \angle 2",font_size=20).move_to(angle2.point_from_proportion(0.5)+LEFT*0.2)
angle3_label = MathTex(r" \angle 3",font_size=20).move_to(angle3.point_from_proportion(0.5)+DOWN*0.2+LEFT*0.08)
self.play(Create(angle1_label),Create(angle2_label),Create(angle3_label),run_time=0.5)
tuxing1 = Polygon(A.get_center(),F.get_center(),C.get_center(),H.get_center())
self.play(tuxing1.animate.set_fill(YELLOW,0.5))
chuizhifuhao3 = RightAngle(Line(F,C),Line(F,A),color=RED,quadrant=[1,1])
self.play(Transform(chuizhifuhao1.copy(),chuizhifuhao3))
tuxing1.set_fill(opacity=0).set_stroke(opacity=0)
sanjiaoxingAEH = Polygon(A.get_center(),E.get_center(),H.get_center())
self.play(sanjiaoxingAEH.animate.set_fill(YELLOW,0.5))
suanshi1 = MathTex(r" Rt\triangle AEH,AH=4,AE=2\sqrt{5}",font_size=20)
suanshi2 = MathTex(r"\Rightarrow HE=2",font_size=20)
suanshi3 = Text("FG是三角形AEH的中位线",font_size=20)
suanshi4 = MathTex(r"\Rightarrow FG= \frac{1}{2} AH=2,EG= \frac{1}{2} EH =1=HG",font_size=20)
#sanjiaoxingAEH.set_fill(0)
suanshi5 = MathTex(r"\Rightarrow BG=2",font_size=20)
suanshi6 = MathTex(r"\Rightarrow BF=2\sqrt{2}",font_size=20)
#sanjiaoxingBFG.set_fill(0)
suanshigroup1 = VGroup(suanshi1,suanshi2,suanshi3,suanshi4,suanshi5,suanshi6).arrange(DOWN,buff=0.5).shift(RIGHT*3+DOWN)
self.play(Write(suanshigroup1[0]))
self.play(Write(suanshigroup1[1]))
self.play(Write(suanshigroup1[2]))
self.play(Write(suanshigroup1[3]))
sanjiaoxingAEH.set_fill(opacity=0).set_stroke(opacity=0)
sanjiaoxingBFG = Polygon(B.get_center(),F.get_center(),G.get_center())
self.play(sanjiaoxingBFG.animate.set_fill(YELLOW,0.5))
self.play(Write(suanshigroup1[4]))
self.play(Write(suanshigroup1[5]))
self.wait()
self.clear()
#当E在右边时 绘图
B,A,C,O = Dot([0,0,0],radius=0.05,color=RED),Dot([3,4,0],radius=0.05,color=RED),Dot([6,0,0],radius=0.05,color=RED),Dot([3,3/2,0],radius=0.05,color=RED)
AB = Line(A,B)
BC = Line(B,C)
CA = Line(C,A)
corrds1 =(C.get_center(),O.get_center())
corrds2 = (A.get_center(),B.get_center())
D = Dot(line_intersection(corrds1,corrds2),radius=0.05,color=RED)
CD = Line(C,D)
dotgroup = VGroup(A,B,C,D)
linegroup = VGroup(AB,BC,CA,CD)
A_label = Text("A",font_size=20).next_to(A,UP,buff=0.1)
B_label = Text("B",font_size=20).next_to(B,LEFT,buff=0.1)
C_label = Text("C",font_size=20).next_to(C,RIGHT,buff=0.1)
D_label = Text("D",font_size=20).next_to(D,LEFT,buff=0.1)
labelgroup = VGroup(A_label,B_label,C_label,D_label)
yuanshituxing =VGroup(dotgroup,labelgroup,linegroup).shift(LEFT*5+DOWN*3)
self.play(Write(dotgroup))
self.play(Write(linegroup))
self.play(Write(labelgroup))
self.wait()
E =Dot(C.get_center()+[-1,0,0],radius=0.05,color=RED)
E_label = Text("E",font_size=20).next_to(E,DOWN,buff=0.1)
AE = Line(A,E)
corrds3 =(A.get_center(),E.get_center())
corrds4 =(C.get_center(),D.get_center())
F= Dot(line_intersection(corrds3,corrds4),radius=0.05,color=RED)
BF = Line(B,F)
E_label = Text("E",font_size=20).next_to(E,DOWN,buff=0.1)
F_label = Text("F",font_size=20).next_to(F,RIGHT+UP,buff=0.1)
self.play(Create(E),Create(F),run_time=0.5)
self.play(Create(E_label),Create(F_label),run_time=0.5)
self.play(Create(AE),Create(BF),run_time=1)
text2 = Text("当E靠近C点时",font_size=30).to_edge(LEFT)
self.play(Write(text2))
self.wait()
H = Dot(C.get_center()+[-3,0,0],radius=0.05,color=RED)
G = Dot(BC.get_projection(F.get_center()),radius=0.05,color=RED)
AH = DashedLine(A,H)
FG = DashedLine(F,G)
H_label = Text("H",font_size=20).next_to(H,DOWN,buff=0.1)
G_label = Text("G",font_size=20).next_to(G,DOWN,buff=0.1)
chuizhifuhao1 = RightAngle(AH,BC,color=RED,quadrant=[-1,1],stroke_width=1,length=0.15)
chuizhifuhao2 = RightAngle(FG,BC,color=RED,quadrant=[-1,1],stroke_width=1,length=0.15)
self.play(Create(AH),run_time=3)
self.play(Create(H_label),run_time=0.5)
self.play(Create(chuizhifuhao1))
self.play(Create(FG),run_time=2)
self.play(Create(G_label),run_time=0.5)
self.play(Transform(chuizhifuhao1.copy(),chuizhifuhao2))
self.wait()
angle1 = Angle(CA,CD,color=GREEN,quadrant=[1,1])
angle2 = Angle(CD,Line(C,B),color=GREEN,quadrant=[1,1])
angle3 = Angle(AH,AE,color=GREEN,quadrant=[1,1])
self.play(Create(angle1),Create(angle2),Create(angle3),run_time=0.5)
angle1_label = MathTex(r" \angle 1",font_size=20).move_to(angle1.point_from_proportion(0.5)+UP*0.1+LEFT*0.2)
angle2_label = MathTex(r" \angle 2",font_size=20).move_to(angle2.point_from_proportion(0.5)+LEFT*0.2)
angle3_label = MathTex(r" \angle 3",font_size=20).move_to(angle3.point_from_proportion(0.5)+DOWN*0.2)
self.play(Create(angle1_label),Create(angle2_label),Create(angle3_label),run_time=0.5)
suanshi1 = Text("由前可知:EC=1,EH=2",font_size=20)
suanshi2 = MathTex(r" \frac{EC}{EA}= \frac{EF}{FA}=\frac{GE}{HG}=\frac{1}{5}",font_size=20)
suanshi3 = MathTex(r"\Rightarrow GE= \frac{1}{6} \times 2 = \frac{1}{3} ",font_size=20)
suanshi4 = MathTex(r"\Rightarrow HG= \frac{5}{6} \times 2 = \frac{5}{3} ",font_size=20)
suanshi5 = MathTex(r"\Rightarrow FG= \frac{5}{6} \times AH = \frac{1}{6} \times 4=\frac{2}{3} ",font_size=20)
suanshi6 = MathTex(r"\Rightarrow FB^2&=BG^2+FG^2 \\ &=(\frac{14}{3})^2+(\frac{2}{3})^2 \\ &=\frac{200}{9}",font_size=20)
suanshi7 = MathTex(r"\Rightarrow BF=\frac{10 \sqrt{2}}{3}",font_size=20)
suanshigroup2 = VGroup(suanshi1,suanshi2,suanshi3,suanshi4,suanshi5,suanshi6,suanshi7).arrange(DOWN,buff=0.5).shift(RIGHT*3)
self.play(Write(suanshigroup2[0]),run_time=1)
self.wait()
sanjiaoxingACE = Polygon(A.get_center(),C.get_center(),E.get_center())
self.play(sanjiaoxingACE.animate.set_fill(YELLOW,0.5))
self.play(Create(Line(C,F,color=RED,stroke_width=2)),run_time=1)
sanjiaoxingAEH = Polygon(A.get_center(),E.get_center(),H.get_center())
self.play(sanjiaoxingAEH.animate.set_fill(BLUE,0.5))
self.play(Create(Line(F,G,color=RED,stroke_width=2)),run_time=1)
self.play(Write(suanshigroup2[1:5]),run_time=5)
self.wait()
sanjiaoxingACE.set_fill(opacity=0).set_stroke(opacity=0)
sanjiaoxingAEH.set_fill(opacity=0).set_stroke(opacity=0)
sanjiaoxingBFG = Polygon(B.get_center(),F.get_center(),G.get_center())
self.play(sanjiaoxingBFG.animate.set_fill(GREEN,1))
self.wait()
self.play(Write(suanshigroup2[5:7]))
self.wait()