<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Manim實現氣泡特效

      本文將介紹如何使用Manim框架實現一個簡單而實用的氣泡特效,該特效可用于多種場景,如背景裝飾、數據可視化過渡等。

      1. 實現原理

      氣泡特效的核心在于BubbleEffect類,它繼承自Manim的Animation類,通過重寫關鍵方法來實現氣泡的上升、變大和透明度變化效果。

      1.1. 核心類結構

      BubbleEffect類的基本結構如下:

      class BubbleEffect(Animation):
          """
          彩色氣泡特效動畫類
          繼承自Animation類,用于創建彩色氣泡上升、變大、透明度變化的效果
          """
      
          def __init__(
              self,
              bubble_count=25,  # 氣泡數量
              bubble_size_range=(0.1, 0.5),  # 氣泡大小范圍
              rise_speed_range=(0.6, 2.2),  # 上升速度范圍
              growth_rate_range=(0.005, 0.015),  # 生長速度范圍
              fade_rate_range=(0.02, 0.06),  # 消失速度范圍
              colors=None,  # 氣泡顏色列表
              **kwargs
          ):
              # 初始化代碼...
      
          def create_bubble(self):
              # 創建單個氣泡的代碼...
      
          def interpolate_mobject(self, alpha):
              # 控制氣泡動畫效果的核心代碼...
      

      1.2. 氣泡創建機制

      __init__方法中,我們首先定義了一系列參數,如氣泡數量、大小范圍、上升速度等,然后創建一個VGroup來存放所有氣泡:

      # 創建氣泡組
      self.bubbles = VGroup()
      self.bubble_count = bubble_count
      self.bubble_size_range = bubble_size_range
      self.rise_speed_range = rise_speed_range
      self.growth_rate_range = growth_rate_range
      self.fade_rate_range = fade_rate_range
      self.colors = colors or [RED, BLUE, GREEN, YELLOW, PURPLE, ORANGE]
      
      # 保存運行時間,從kwargs中獲取或使用默認值
      self.run_time = kwargs.get("run_time", 5.0)
      
      # 初始化氣泡
      for _ in range(bubble_count):
          bubble = self.create_bubble()
          self.bubbles.add(bubble)
      
      # 調用父類初始化
      super().__init__(self.bubbles, **kwargs)
      

      每個氣泡通過create_bubble方法創建,該方法隨機設置氣泡的大小、顏色和初始位置,并為每個氣泡分配獨立的上升速度、生長速度和消失速度:

      def create_bubble(self):
          """創建單個彩色氣泡"""
          # 隨機大小
          size = random.uniform(*self.bubble_size_range)
          # 隨機顏色
          color = random.choice(self.colors)
          # 創建圓形氣泡
          bubble = Circle(radius=size, color=color, fill_opacity=0.4, stroke_width=2)
      
          # 隨機初始位置(底部區域)
          x_pos = random.uniform(-config.frame_width / 2 + 1, config.frame_width / 2 - 1)
          y_pos = random.uniform(-config.frame_height / 2, -config.frame_height / 2 + 2)
          bubble.move_to([x_pos, y_pos, 0])
      
          # 存儲氣泡屬性
          bubble.rise_speed = random.uniform(*self.rise_speed_range)
          bubble.growth_rate = random.uniform(*self.growth_rate_range)
          bubble.fade_rate = random.uniform(*self.fade_rate_range)
          bubble.initial_radius = size
      
          return bubble
      

      1.3. 動畫插值實現

      動畫的核心在于interpolate_mobject方法,它控制著每個氣泡在每一幀的狀態變化:

      def interpolate_mobject(self, alpha):
          """插值函數,控制彩色氣泡的動畫效果"""
          dt = 1 / config.frame_rate  # 每幀的時間間隔
          for bubble in self.bubbles:
              # 上升
              bubble.shift(UP * bubble.rise_speed * dt)
      
              # 變大
              bubble.scale(1 + bubble.growth_rate * dt)
      
              # 透明度變化
              current_opacity = bubble.get_fill_opacity()
              new_opacity = current_opacity - bubble.fade_rate * dt
      
              # 如果氣泡超出屏幕頂部或透明度降到0以下,則重置
              if new_opacity <= 0 or bubble.get_y() > config.frame_height / 2:
                  # 重置氣泡
                  x_pos = random.uniform(
                      -config.frame_width / 2 + 1, config.frame_width / 2 - 1
                  )
                  y_pos = random.uniform(
                      -config.frame_height / 2, -config.frame_height / 2 + 2
                  )
                  bubble.move_to([x_pos, y_pos, 0])
                  bubble.set_fill(opacity=0.4)
                  bubble.set_stroke(opacity=0.4)
              else:
                  bubble.set_fill(opacity=new_opacity)
                  bubble.set_stroke(opacity=new_opacity)
      

      這個方法實現了三個關鍵效果:

      1. 上升:每個氣泡以自己的速度向上移動
      2. 變大:每個氣泡以自己的速度緩慢變大
      3. 透明度變化:每個氣泡逐漸變得透明

      特別值得注意的是,當氣泡超出屏幕頂部或透明度降到0以下時,代碼會將氣泡重置到底部,從而實現循環不斷的氣泡效果。

      2. 使用示例

      代碼提供了兩個使用示例,分別展示了普通氣泡效果和彩色氣泡效果。

      2.1. 普通氣泡效果

      SimpleBubbleEffectExample類展示了如何創建灰度的氣泡效果:

      class SimpleBubbleEffectExample(Scene):
          """普通氣泡特效示例場景"""
      
          def construct(self):
              # 創建標題
              title = Text("普通氣泡特效演示", font_size=48)
              title.to_edge(UP)
              self.play(Write(title))
              self.wait(0.5)
      
              bubble_effect = BubbleEffect(
                  bubble_count=25,
                  colors=[GRAY],  # 設置為灰色
                  bubble_size_range=(0.1, 0.5),
                  rise_speed_range=(0.6, 2.2),
                  growth_rate_range=(0.1, 0.5),
                  fade_rate_range=(0.02, 0.06),
                  run_time=2,  # 使用run_time而不是duration
              )
      
              # 播放氣泡特效
              self.play(bubble_effect)
              self.wait()
      

      2.2. 彩色氣泡效果

      ColorfulBubbleEffectExample類展示了如何創建彩色的氣泡效果:

      class ColorfulBubbleEffectExample(Scene):
          """彩色氣泡特效示例場景"""
      
          def construct(self):
              # 創建標題
              title = Text("彩色氣泡特效演示", font_size=48)
              title.to_edge(UP)
              self.play(Write(title))
              self.wait(0.5)
      
              # 創建彩色氣泡特效動畫
              bubble_effect = BubbleEffect(
                  bubble_count=25,
                  bubble_size_range=(0.1, 0.5),
                  rise_speed_range=(0.6, 2.2),
                  growth_rate_range=(0.1, 0.5),
                  fade_rate_range=(0.02, 0.06),
                  run_time=2,  # 使用run_time而不是duration
              )
      
              # 播放彩色氣泡特效
              self.play(bubble_effect)
              self.wait()
      

      兩者的主要區別在于SimpleBubbleEffectExample顯式指定了colors=[GRAY],而ColorfulBubbleEffectExample則使用了默認的彩色列表。

      2.3. 自定義參數

      BubbleEffect類提供了多個參數,可以根據需要進行調整:

      參數名 類型 默認值 說明
      bubble_count int 25 氣泡數量
      bubble_size_range tuple (0.1, 0.5) 氣泡大小范圍
      rise_speed_range tuple (0.6, 2.2) 氣泡上升速度范圍
      growth_rate_range tuple (0.005, 0.015) 氣泡生長速度范圍
      fade_rate_range tuple (0.02, 0.06) 氣泡透明度變化速度范圍
      colors list [RED, BLUE, GREEN, YELLOW, PURPLE, ORANGE] 氣泡顏色列表
      run_time float 5.0 動畫運行時間

      通過調整這些參數,可以創建各種不同風格的氣泡效果。

      3. 總結

      3.1. 特效特點

      1. 可定制性強:通過調整多種參數,可以創建不同風格的氣泡效果
      2. 性能優化:使用VGroup統一管理氣泡,方便添加和刪除
      3. 循環動畫:氣泡消失后會自動重置,實現循環不斷的效果
      4. 隨機性:每個氣泡的大小、位置、速度等屬性都是隨機的,創建豐富多變的視覺效果
      5. 統一控制:作為Animation的子類,可以與Manim的其他動畫無縫集成

      3.2. 使用場景

      1. 背景裝飾:為視頻或演示添加動態背景
      2. 轉場效果:在不同場景或章節之間作為過渡效果
      3. 數據可視化:與數據展示結合,增強視覺吸引力
      4. 節日氛圍:通過調整顏色,可以創建適合不同節日的氛圍效果
      5. 教學輔助:在物理課上演示浮力原理,或在化學課上模擬氣泡反應

      這個氣泡特效實現簡單但效果出色,可以為各種Manim動畫項目增添生動的視覺元素。

      posted @ 2025-09-26 15:16  wang_yb  閱讀(217)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国内自拍视频一区二区三区| 国产精品毛片一区视频播| 精品精品久久宅男的天堂| 国产精品免费视频不卡| 国产又色又爽又黄刺激视频 | 国语偷拍视频一区二区三区| 亚洲成av人无码免费观看| 欧美精品在线观看视频| 国产精品熟女乱色一区二区| 国产成人精品亚洲午夜| 中文字幕成熟丰满人妻| 你拍自拍亚洲一区二区三区| 国产精品久久久福利| 亚洲av乱码久久亚洲精品| 国产精品视频一区不卡| 东平县| 日韩精品中文字幕无码一区| 成人免费xxxxx在线观看| 蜜臀av一区二区三区在线| 亚洲成在人线在线播放无码| 日韩一区国产二区欧美三区| 九九热免费在线视频观看| 精品国产一区二区三区av性色| 国产精品ⅴ无码大片在线看| 国产一区二区三区禁18| 中文字幕日韩有码国产| 国产sm调教折磨视频| 国产卡一卡二卡三免费入口| 日本一区二区三区专线| 国产精品麻豆中文字幕| 中文字幕免费不卡二区| 一区二区视频| 野外做受三级视频| 亚洲特黄色片一区二区三区| 18无码粉嫩小泬无套在线观看| 亚洲熟妇熟女久久精品综合| 亚洲成人av在线系列| 衡阳县| 思思热在线视频精品| 久久精品国产6699国产精| 老熟妇乱子交视频一区|