chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Manim:一個Python數(shù)學(xué)動畫開發(fā)模塊

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-17 11:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Manim 是3b1b開源的一個特別漂亮的數(shù)學(xué)動畫模塊。

我們能夠基于Manim繪制許多解釋性的動畫,比如下面這個:

圖片

也支持函數(shù)圖像:

圖片

甚至是一些3D視圖和矩陣變換,Manim都可以輕易實現(xiàn):

如果你是一個數(shù)學(xué)課程的演講者,或者你需要給觀眾演示某些數(shù)學(xué)公式的圖形,那么Manim就是你的不二之選。

Manim 支持 Python 3.7 及以上版本,推薦Python3.8.

1.準(zhǔn)備

開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南

請選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
  2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
conda create --name manim python=3.8 # 創(chuàng)建虛擬環(huán)境
conda activate manim # 切換到此虛擬環(huán)境
pip install manimgl # 安裝manim

安裝完畢后在終端輸入 manimgl,會出現(xiàn)如下的界面,說明安裝完成。

圖片

2. Manim 基本使用

首先學(xué)會畫一個基本的數(shù)學(xué)圖形,如圓圈:

from manimlib import *

class SquareToCircle(Scene):
    def construct(self):
        circle = Circle()
        circle.set_fill(BLUE, opacity=0.5)
        circle.set_stroke(BLUE_E, width=4)

        self.add(circle)

編寫完畢后,在終端里敲下這行命令:

manimgl 你的py文件名.py SquareToCircle

就能彈出一個圖形界面,繪制完成:

圖片

你還可以操作彈出的這個窗口:

  • 滾動鼠標(biāo)中鍵來上下移動畫面
  • 按住鍵盤上 z 鍵的同時滾動鼠標(biāo)中鍵來縮放畫面
  • 按住鍵盤上 f 鍵的同時移動鼠標(biāo)來平移畫面
  • 按住鍵盤上 d 鍵的同時移動鼠標(biāo)來改變?nèi)S視角
  • 按下鍵盤上 r 鍵恢復(fù)到最初的視角

最后,你可以通過按 q 來關(guān)閉窗口并退出程序。

接下來,我們學(xué)習(xí)如何讓圓形變成方形:

# 公眾號: Python實用寶典
from manimlib import *

class CircleToSquare(Scene):
    def construct(self):
        square = Square()
        square.set_fill(BLUE, opacity=0.5)
        square.set_stroke(BLUE_E, width=4)
        circle = Circle()

        self.play(ShowCreation(circle))
        self.wait()
        self.play(ReplacementTransform(circle, square))
        self.wait()

**ShowCreation: **演示圓圈繪制過程。

**ReplacementTransform: **延時從第一個參數(shù)的圖形變化到第二個參數(shù)的圖形的過程。

**self.wait(): **等待上個play操作執(zhí)行完成。

終端運行命令:

manimgl 你的py文件名.py CircleToSquare

效果如下:

圖片

再來一個復(fù)雜一點的演示,增加拉伸、旋轉(zhuǎn)和變換:

# 公眾號: Python實用寶典
from manimlib import *

class CircleToSquare(Scene):
    def construct(self):
        square = Square()
        square.set_fill(BLUE, opacity=0.5)
        square.set_stroke(BLUE_E, width=4)
        circle = Circle()

        self.play(ShowCreation(circle))
        self.wait()
        self.play(ReplacementTransform(circle, square))
        self.wait()
        # 在水平方向上拉伸到四倍
        self.play(square.animate.stretch(4, dim=0))
        self.wait()
        # 旋轉(zhuǎn)90°
        self.play(Rotate(square, TAU / 4))
        self.wait()
        # 在向右移動2單位同時縮小為原來的1/4
        self.play(square.animate.shift(2 * RIGHT), square.animate.scale(0.25))
        self.wait()
        # 為了非線性變換,給square增加10段曲線(不會播放動畫)
        square.insert_n_curves(10)
        # 給square上的所有點施加f(z)=z^2的復(fù)變換
        self.play(square.animate.apply_complex_function(lambda z: z**2))
        self.wait()

**square.animate.stretch: **將圖形拉伸第一個參數(shù)的倍數(shù),第二個維度指明方向,dim=0為水平方向,dim=1為垂直方向。

**square.animate.shift: **可以調(diào)整圖形位置和大小。

square.animate.apply_complex_function: 增加函數(shù)復(fù)變換。

效果如下:

圖片

3. Manim 坐標(biāo)軸與函數(shù)圖像

想要實現(xiàn)函數(shù)圖像繪制,我們需要先添加坐標(biāo)軸:

# 公眾號: Python實用寶典
from manimlib import *

class GraphExample(Scene):
    def construct(self):
        axes = Axes((-3, 10), (-1, 8))
        axes.add_coordinate_labels()

        self.play(Write(axes, lag_ratio=0.01, run_time=1))

運行以下命令顯示坐標(biāo)軸:

manimgl 你的py文件名.py GraphExample

圖片

坐標(biāo)軸繪制完成后,就可以開始繪制圖像了:

上滑查看更多代碼

class GraphExample(Scene):
def construct(self):
axes = Axes((-3,10), (-1,8))
axes.add_coordinate_labels()

self.play(Write(axes, lag_ratio=0.01, run_time=1))

# Axes.get_graph會返回傳入方程的圖像
sin_graph = axes.get_graph(
lambda x:2 * math.sin(x),
color=BLUE,
)
# 默認情況下,它在所有采樣點(x, f(x))之間稍微平滑地插值
# 但是,如果圖形有棱角,可以將use_smoothing設(shè)為False
relu_graph = axes.get_graph(
lambda x: max(x,0),
use_smoothing=False,
color=YELLOW,
)
# 對于不連續(xù)的函數(shù),你可以指定間斷點來讓它不試圖填補不連續(xù)的位置
step_graph = axes.get_graph(
lambda x:2.0 if x >3 else 1.0,
discontinuities=[3],
color=GREEN,
)

# Axes.get_graph_label可以接受字符串或者mobject。如果傳入的是字符串
# 那么將將其當(dāng)作LaTeX表達式傳入Tex中
# 默認下,label將生成在圖像的右側(cè),并且匹配圖像的顏色
sin_label = axes.get_graph_label(sin_graph,"sin(x)")
relu_label = axes.get_graph_label(relu_graph, Text("ReLU"))
step_label = axes.get_graph_label(step_graph, Text("Step"), x=4)

self.play(
ShowCreation(sin_graph),
FadeIn(sin_label, RIGHT),
)
self.wait(2)
self.play(
ReplacementTransform(sin_graph, relu_graph),
FadeTransform(sin_label, relu_label),
)
self.wait()
self.play(
ReplacementTransform(relu_graph, step_graph),
FadeTransform(relu_label, step_label),
)
self.wait()

parabola = axes.get_graph(lambda x:0.25 * x**2)
parabola.set_stroke(BLUE)
self.play(
FadeOut(step_graph),
FadeOut(step_label),
ShowCreation(parabola)
)
self.wait()

# 你可以使用Axes.input_to_graph_point(縮寫Axes.i2gp)來找到圖像上的一個點
dot = Dot(color=RED)
dot.move_to(axes.i2gp(2, parabola))
self.play(FadeIn(dot, scale=0.5))

# ValueTracker存儲一個數(shù)值,可以幫助我們制作可變參數(shù)的動畫
# 通常使用updater或者f_always讓其它mobject根據(jù)其中的數(shù)值來更新
x_tracker = ValueTracker(2)
f_always(
dot.move_to,
lambda: axes.i2gp(x_tracker.get_value(), parabola)
)

self.play(x_tracker.animate.set_value(4), run_time=3)
self.play(x_tracker.animate.set_value(-2), run_time=3)
self.wait()

如果在運行的時候你出現(xiàn)了這樣的錯誤:

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2787

    瀏覽量

    50333
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86685
  • 3d視圖
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    11085
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    [OpenHarmony北向應(yīng)用開發(fā)] 做一個 loading加載動畫

    - 本篇文章介紹了如何實現(xiàn)簡單的loading加載動畫,并且在提供了demo工程供讀者下載學(xué)習(xí)。 - loading加載
    的頭像 發(fā)表于 04-20 11:29 ?2390次閱讀
    [OpenHarmony北向應(yīng)用<b class='flag-5'>開發(fā)</b>] 做<b class='flag-5'>一個</b> loading加載<b class='flag-5'>動畫</b>

    用DeepSeek-R1實現(xiàn)自動生成Manim動畫

    動畫,視覺化呈現(xiàn)抽象的概念與原理。 什么是Manim? ?Manim基于 Python
    的頭像 發(fā)表于 02-07 12:31 ?3321次閱讀
    用DeepSeek-R1實現(xiàn)自動生成<b class='flag-5'>Manim</b><b class='flag-5'>動畫</b>

    使用Python和Flask開發(fā)Web程序

    Flask 是使用 Python 語言編寫的 Web 框架,它可以讓你高效的編寫 Web 程序。Web 程序即“網(wǎng)站”或“網(wǎng)頁程序”,是指可以通過瀏覽器進行交互的程序。我們?nèi)粘J褂脼g覽器訪問
    發(fā)表于 02-28 08:00 ?0次下載

    Logistic回歸數(shù)學(xué)推導(dǎo)以及python實現(xiàn)

    Logistic回歸數(shù)學(xué)推導(dǎo)以及python實現(xiàn)
    發(fā)表于 02-25 14:48 ?7次下載

    Python模塊Addit屬性設(shè)置

    Addit 是Python模塊,除了提供標(biāo)準(zhǔn)的字典語法外,Addit 生成的字典的值既可以使用屬性來獲取,也可以使用屬性進行設(shè)置。 這意味著你 不用 再寫這樣的字典了: body
    的頭像 發(fā)表于 11-17 10:15 ?1574次閱讀

    python包、模塊和庫是什么

    1. 模塊 以 .py 為后綴的文件,我們稱之為 模塊,英文名 Module。 模塊讓你能夠有邏輯地組織你的 Python 代碼段,把相關(guān)的代碼分配到
    的頭像 發(fā)表于 03-09 16:47 ?2528次閱讀

    如何使用Arduino構(gòu)建電子動畫眼睛

    在這個項目中,我們將使用 Arduino 構(gòu)建動畫眼睛。在網(wǎng)上尋找新的項目創(chuàng)意時,我萌生了制作動畫眼睛的想法,這個項目立即引起了我的注意。
    的頭像 發(fā)表于 07-10 09:52 ?3290次閱讀
    如何使用Arduino構(gòu)建<b class='flag-5'>一</b><b class='flag-5'>個</b>電子<b class='flag-5'>動畫</b>眼睛

    Python-模塊與包

    模塊Python 程序架構(gòu)的核心概念
    的頭像 發(fā)表于 02-16 14:55 ?1017次閱讀
    <b class='flag-5'>Python</b>-<b class='flag-5'>模塊</b>與包

    Python-pygame 游戲開發(fā)

    pygame 就是Python 模塊,專為電子游戲設(shè)計
    的頭像 發(fā)表于 02-16 15:43 ?1988次閱讀
    <b class='flag-5'>Python</b>-pygame 游戲<b class='flag-5'>開發(fā)</b>

    介紹Python模塊的基礎(chǔ)知識

    Python種高級編程語言,擁有豐富的庫和模塊模塊Python
    的頭像 發(fā)表于 04-21 16:48 ?1221次閱讀

    Python中常見的數(shù)學(xué)運算方法

    Python種面向?qū)ο?、解釋型、交互式的高級編程語言。它支持各種數(shù)學(xué)運算,包括基本算術(shù)運算、比較運算、邏輯運算等。
    的頭像 發(fā)表于 04-21 16:51 ?6036次閱讀

    Python中telnetlib模塊的基本使用

    telnetlib 是 Python 標(biāo)準(zhǔn)庫中的模塊,它提供了 Telnet 協(xié)議的客戶端功能。使用 telnetlib 模塊,我們可以
    的頭像 發(fā)表于 05-04 14:27 ?8829次閱讀

    Python 梯度計算模塊如何實現(xiàn)邏輯回歸模型

    AutoGrad 是老少皆宜的 Python 梯度計算模塊。 對于初高中生而言,它可以用來輕易計算條曲線在任意
    的頭像 發(fā)表于 10-21 11:01 ?735次閱讀
    <b class='flag-5'>Python</b> 梯度計算<b class='flag-5'>模塊</b>如何實現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個</b>邏輯回歸模型

    python如何導(dǎo)入模塊

    Python種強大的編程語言,它支持模塊化編程,使得開發(fā)者可以將代碼分解為可重用且獨立的模塊模塊
    的頭像 發(fā)表于 11-22 14:46 ?1350次閱讀

    Manim動畫生動演示勾股定理

    Manim專業(yè)的數(shù)學(xué)動畫引擎,我們可以將抽象的數(shù)學(xué)概念轉(zhuǎn)化為生動的視覺呈現(xiàn),大幅提升教學(xué)效果。 二,
    的頭像 發(fā)表于 04-27 16:36 ?260次閱讀