当前位置: 首页> 汽车> 维修 > 工业企业解决方案_集团公司网站建设方案_企业员工培训课程有哪些_代码优化

工业企业解决方案_集团公司网站建设方案_企业员工培训课程有哪些_代码优化

时间:2025/7/9 4:12:03来源:https://blog.csdn.net/qq_45449625/article/details/142662386 浏览次数: 0次
工业企业解决方案_集团公司网站建设方案_企业员工培训课程有哪些_代码优化

         在这段代码中,我们实现了一系列富有创意和动态效果的数学表达式展示。这种展示方式不仅能够吸引观众的注意力,还能有效地传达复杂的数学概念。代码主要围绕一个点 dot 展开,它逐步转变为不同的数学公式和符号,每个转变过程都伴随着精心设计的动画效果,增强了视觉效果和趣味性。

        首先,代码开始时通过 GrowFromCenter 动画效果展示起始点 dot,让观众快速关注这个关键对象。随后,通过 Transform 动作,将这个点的内容逐步替换为多个数学表达式,包括新的公式、Lambida 表达式、黄色双箭头以及最终的公式,这一系列替换过程整齐且流畅。每一次转换都设计了 1 秒的等待时间,确保观众能够充分理解每个表达式的内涵。

from manim import *  # 导入 Manim 库,提供用于创建动画的功能  class PiAnimation101(Scene):  # 创建一个新的场景类,名为 PiAnimation101  def showNewEquation(self):  # 创建新的公式 V × W = Det(i, j, k; u1, u2, u3; w1, w2, w3),返回一个数学表达式对象  return MathTex(r"V \times W = \text{Det}\begin{pmatrix}i & j & k \\ u_{1} & u_{2} & u_{3} \\ w_{1} & w_{2} & w_{3} \end{pmatrix}")   def Labida(self):  # 返回另一个数学表达式 Det(A - λI) = 0,可能用于特征值问题  return MathTex(r"Det(A-\lambda I)=0")  def Unla(self):  # 创建多个矩阵以展示矩阵运算  matrix_a = MathTex(r"\begin{bmatrix} a & b \\ c & d \end{bmatrix}")  matrix_b = MathTex(r"\begin{bmatrix} e & f \\ g & h \end{bmatrix}")  equals = MathTex("= ")  result_matrix = MathTex(r"\begin{bmatrix} ae + bg & af + bh \\ ce + dg & cf + dh \end{bmatrix}")  # 设置每个矩阵的位置  matrix_a.move_to(LEFT * 3)  # 矩阵 A 向左移动  matrix_b.move_to(LEFT * 1)  # 矩阵 B 向左移动  equals.move_to(ORIGIN)  # 等号放在原点位置  result_matrix.move_to(RIGHT * 2)  # 结果矩阵向右移动  # 将所有元素组合成一个组  matrices_group = VGroup(matrix_a, matrix_b, equals, result_matrix).arrange(RIGHT, buff=0.1)  tUn = Text("为什么?")  # 创建一个文本对象,内容为“为什么?”  mmb = VGroup(tUn, matrices_group).arrange(DOWN, buff=0.4)  # 将文本和矩阵组相结合,并垂直排列  return mmb  # 返回组合后的组  def longleftrightarrowDet(self):  # 创建一个包含向量加法和行列式的表达式  a10 = MathTex(r"\vec{v} +\vec{w}")  # 向量 v 和 w 的表达式  a11 = MathTex(r"\longleftrightarrow ", stroke_width=6).set_color(YELLOW)  # 双箭头设置颜色和宽度  a12 = Text("?").next_to(a11, UP)  # 在箭头上方放置一个问号  a30 = MathTex(r"Det")  # 行列式的表达式  # 将以上元素组合在一起,水平排列  b0 = VGroup(a10, a11, a30).arrange(RIGHT, buff=0.1)  b1 = VGroup(b0, a12)  # 将上面的组合与问号结合在一起  return b1  # 返回最终的组合def last(self):  # 创建两个矩阵 A 和 B,分别表示为 MathTex 对象  matrix_a = MathTex(r"\begin{bmatrix} a & b \\ c & d \end{bmatrix}")  matrix_b = MathTex(r"\begin{bmatrix} e & f \\ g & h \end{bmatrix}")  equals = MathTex("= ")  # 创建一个等号的 MathTex 对象  result_matrix = MathTex(r"\begin{bmatrix} ae + bg & af + bh \\ ce + dg & cf + dh \end{bmatrix}")  # 创建结果矩阵的 MathTex 对象。表示矩阵 A 和 B 的乘积  # 创建一个组合体,将所有的矩阵和等号放在一起,并排放置  return VGroup(matrix_a, equals, matrix_b, result_matrix).arrange(RIGHT)  def construct(self):  # 调用 MovingDet 方法,构建动画内容  self.MovingDet()def construct(self): self.camera.background_color = "#003311"  # 创建 Pi 字符  pi_symbol = Text("π", font_size=150, color=BLUE,font="MS PGothic")  pi_symbol.move_to(ORIGIN)dot = Dot(ORIGIN+0.05*LEFT)dot2 = Dot(ORIGIN+0.09*RIGHT)line = Line(dot.get_center(), dot2.get_center(),stroke_width=6).set_color(BLACK).shift(0.49*UP+0.1*RIGHT).rotate(-PI/19)#liM=Line([ORIGIN+0.2*LEFT,ORIGIN+0.2*RIGHT])# 创建眼睛  left_eye = Ellipse(width=0.4, height=0.25, color=WHITE,fill_opacity=1).shift(LEFT * 0.15+ UP* 0.625 ).rotate(PI/13)right_eye = Ellipse(width=0.4, height=0.25, color=WHITE,fill_opacity=1).shift(RIGHT * 0.35 +UP* 0.625).rotate(-PI/13)  #眼珠left_pupil = Dot(color=BLACK).shift(LEFT * 0.15+ UP* 0.625)  right_pupil = Dot(color=BLACK).shift(RIGHT * 0.35 + UP *UP* 0.625)  #合体eyes = VGroup(left_eye, right_eye, left_pupil, right_pupil)  que= Text("???", font_size=52, color=WHITE,font="Fantasy").next_to(pi_symbol, UP)  pieye = VGroup(pi_symbol, eyes,que,line).shift(2*DL+LEFT).scale(1.5).shift(2*LEFT) self.add(pieye)#加视觉效果c0=Ellipse(width=0.6, height=0.25, color=WHITE,fill_opacity=0,stroke_width=1).next_to(pi_symbol,0.2*UP+0.5*RIGHT)p0=Dot().next_to(pi_symbol,UP)self.play(Transform(p0, c0))self.wait(0.1)c1=Ellipse(width=1, height=0.4, color=WHITE,fill_opacity=0,stroke_width=2).next_to(c0,0.1*UP+0.2*RIGHT)self.play(Transform(c0, c1))self.wait(0.1)c2=Ellipse(width=1.6, height=0.62, color=WHITE,fill_opacity=0,stroke_width=3).next_to(c1,0.1*UP+0.2*RIGHT)self.play(Transform(c1, c2))self.wait(0.1)#创建云朵形状的轮廓  y0=Ellipse(width=13, height=5, color=WHITE,fill_opacity=0,stroke_width=3).next_to(c2,0.1*UP+0.1*RIGHT).shift(1*DOWN)y1=Ellipse(width=10, height=3.5, color=WHITE,fill_opacity=0,stroke_width=3).next_to(c2,0.1*UP+0.1*RIGHT).shift(4*LEFT)y2=Ellipse(width=9, height=3, color=WHITE,fill_opacity=0,stroke_width=3).next_to(c2,0.1*UP+0.1*RIGHT).shift(4*LEFT).rotate(-PI/13)y3=Ellipse(width=4, height=3, color=WHITE,fill_opacity=0,stroke_width=3).next_to(c2,0.1*UP+0.1*RIGHT).shift(4.2*LEFT).rotate(PI/2-PI/10)y4=Ellipse(width=2, height=3, color=WHITE,fill_opacity=0,stroke_width=3).next_to(c2,0.1*UP+4*RIGHT).rotate(PI/4).shift(2.8*RIGHT)y5=Ellipse(width=2, height=3, color=WHITE,fill_opacity=0,stroke_width=3).next_to(c2,0.1*UP+4*RIGHT).rotate(-PI/4).shift(2.5*RIGHT+0.7*UP)u = Union(y1, y2,y3, y4,y5,color=WHITE,fill_opacity=0,stroke_width=2)# 获取并集的中心  c_t = u.get_center()  print(c_t)#u.next_to(c2,0.1*UP+0.2*RIGHT,buff=0.5)self.play(Transform(c2,u))# 初始行列式公式  Mt = MathTex(r"\text{Det}\begin{pmatrix}a & b \\c & d\end{pmatrix} = ad - bc").next_to(c_t,0.2*UP).shift(0.4*DOWN)  dot = Dot().next_to(c_t,0.2*UP).shift(0.4*DOWN)   # 显示点,使用 GrowFromCenter 动画从中心放大显示点  self.play(GrowFromCenter(dot))  # 让数学公式从点的位置移动到中心  self.play(Transform(dot, Mt))  self.wait(1)  # 等待 1 秒  # 获取新公式并显示在 c_t 点的上方  xc = self.showNewEquation().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN)  self.play(Transform(dot, xc))  # 将点的内容替换为新公式  self.wait(1)  # self.play(Write(xc))  # 显示新的公式(注释掉的代码)  # 显示 Lambida 数学表达式  AL = self.Labida().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN)  self.play(Transform(dot, AL))  # 将点的内容替换为 Lambida  self.wait(1)  # self.play(Write(AL))  # 显示新的公式(注释掉的代码)  # 显示黄色的双箭头  aab = self.Unla().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN)  self.play(Transform(dot, aab))  # 将点的内容替换为双箭头  self.wait(1)  # 显示公式  aa00 = self.longleftrightarrowDet().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN)  self.play(Transform(dot, aa00))  # 将点的内容替换为该公式  self.wait(1)  # 其他动画代码...  # 调用 last 函数以获取组合体  lastM = self.last().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN)  self.play(Transform(dot, lastM))  # 使用 last 函数的输出替换点  self.wait(1)  # 等待 1 秒

 运行结果:https://download.csdn.net/download/qq_45449625/89823997icon-default.png?t=O83Ahttps://download.csdn.net/download/qq_45449625/89823997

 

 

 

 

         通过调用多种自定义的函数(如 showNewEquationLabida 和 Unla 等),代码实现了灵活多变的表达式展示。这些函数不仅提升了代码的可读性,还增加了表达的丰富性,使得每一个数学符号和公式都具备了其独特的意义。此外,代码的最后一部分使用了 last 函数,完成了整个表达式的最终呈现,进一步加强了整体结构的严谨性。

        总的来说,这段代码展示了如何通过动画的方式将数学内容以生动的形式呈现出来,适合用于教学、演示或是科普类的活动。其核心在于利用动画效果活化抽象的数学概念,增强观众的兴趣和理解,通过一系列连贯的视觉变化,使复杂的数学理论变得更易于接受与掌握。

第一段代码解释:

  1. 导入库

    • from manim import * 导入 Manim 模块,Manim 是一个用于创建数学动画的库。
  2. 类定义 (PiAnimation101)

    • 定义了一个Scene的子类,PiAnimation101,这是一个 Manim 场景,用于创建特定的动画效果。
  3. 方法 showNewEquation

    • 创建并返回一个数学表达式,表示某种线性代数公式,功能是绘制 V × W 的行列式。
  4. 方法 Labida

    • 创建并返回一个表示行列式特征方程的数学表达式。
  5. 方法 Unla

    • 创建两个 2x2 矩阵符号(matrix_a 和 matrix_b)以及它们的等式和结果矩阵。
    • 通过设置位置来控制每个矩阵在场景中的排列。使用VGroup将这些元素组合成一个组,返回一组带有“为什么?”的文本和矩阵表达式的组合。
  6. 方法 longleftrightarrowDet

    • 创建一个视觉表达,包含向量加法、双向箭头和行列式的符号。
    • 通过VGroup组合这些数学元素,为视觉效果提供联系。

整体而言,这段代码的目的是构建数学动画,使用 Manim 库来展示矩阵运算、行列式相关概念、以及将这些内容整合到动画场景中。每个方法都偏重于不同的数学表达式,为最终的动画效果提供基础。

第二段代码解释:

  1. 方法 last

    • 创建了两个 MathTex 对象,分别表示数学符号的 2x2 矩阵 matrix_a 和 matrix_b。这两个矩阵将用于展示矩阵乘法。
    • equals 是一个表示等号的 MathTex 对象。
    • result_matrix 是一个表示矩阵乘法结果的 MathTex 对象。同样是一个 2x2 矩阵,包含了通过矩阵乘法计算出来的各元素。
    • VGroup 将所有的矩阵、等号和结果矩阵组合在一起,并使用 .arrange(RIGHT) 方法使它们水平排列,形成一个整齐的数学表达式。
  2. 方法 construct

    • construct 方法是 Manim 场景中用于构建动画的主方法。在这里调用 self.MovingDet(),这意味着在动画中将执行 MovingDet 方法的内容(该方法的具体实现并未显示在代码中)。

整体而言,这段代码的目的是构建与矩阵乘法相关的数学结构,并将其几个部分组合在一起,以便在 Manim 动画中进行展示。方法 last 创建了必要的数学表达式,而 construct 方法则负责将这些数学结构通过特定动画效果呈现给观众。

第三段代码解释:

  1. 显示点

    • self.play(GrowFromCenter(dot)): 使用 GrowFromCenter 动画效果,从中心放大显示一个点 dot
  2. 转变到中心的数学公式

    • self.play(Transform(dot, Mt)): 将 dot 对象的内容转变为另一个数学公式 Mt
  3. 等待

    • self.wait(1): 暂停动画 1 秒,以便观众有时间查看当前的动画内容。
  4. 获取并显示新公式

    • xc = self.showNewEquation().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN): 调用 showNewEquation 函数,获取一个新的数学公式,并设置其相对于点 c_t 的位置。
    • self.play(Transform(dot, xc)): 将 dot 的内容替换为 xc,即新的公式。
    • self.wait(1): 等待 1 秒。
  5. 显示 Lambida 的数学表达式

    • AL = self.Labida().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN): 调用 Labida 函数,获取另一个数学表达式,并设置相对位置。
    • self.play(Transform(dot, AL)): 将 dot 转变为 AL 表达式。
  6. 显示黄色的双箭头

    • aab = self.Unla().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN): 调用 Unla 函数,获取双箭头的表达式。
    • self.play(Transform(dot, aab)): 将 dot 的内容替换为双箭头。
  7. 显示公式

    • aa00 = self.longleftrightarrowDet().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN): 调用 longleftrightarrowDet 函数,获取另一个公式。
    • self.play(Transform(dot, aa00)): 将 dot 的内容替换为该公式。
  8. 调用 last 函数

    • lastM = self.last().next_to(c_t, 0.2 * UP).shift(0.4 * DOWN): 使用 last 方法获取最后的数学表达式组合。
    • self.play(Transform(dot, lastM)): 用 lastM 替换 dot 的内容。
  9. 等待结束

    • self.wait(1): 最后暂停 1 秒,让观众能够看到最后的结果。

整体而言,这段代码展示了一系列的数学表达式,通过动画效果逐步替换 dot 的内容,形成了一种连贯的视觉展示,适用于数学主题的动画教学。

关键字:工业企业解决方案_集团公司网站建设方案_企业员工培训课程有哪些_代码优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: