Python日报0411

manim 专栏收录该内容
1 篇文章 0 订阅

使用manim数学引擎复习python语言基本元素

from manimlib.imports import *

class Projectile(Scene):
    def construct(self):
        axes = Axes(
            x_min = (-5) * (np.sqrt(5) - 1), x_max = 40,
            y_min = (-5) * (np.sqrt(5) - 1), y_max = 25,
            center_point = LEFT*3 + DOWN*2,
            axis_config={
                "unit_size": 0.2,
                "tick_frequency": 5,
            }
        )

        axes.add_coordinates(
            [-5]+[i for i in range(5, 45, 5)],
            [-5]+[i for i in range(5, 25, 5)]
        )
        self.play(ShowCreation(axes))
        unit_size = 0.2

        t = ValueTracker(0)
        v0 = 20                         # 初速度
        theta = PI/3                    # 抛射角
        height = 8                      # 抛射高
        g = 9.8
        args = [(-1)*0.5 * 9.8, v0 * np.sin(theta), height]
        sov = np.roots(args)
        dot = Dot().add_updater(lambda m: m.move_to(
            np.array([
                (v0 * np.cos(theta) * t.get_value()) * unit_size - 3,
                (v0 * np.sin(theta) * t.get_value() - 0.5 * g * t.get_value() **2 + height ) * unit_size - 2,
                0
            ])
        ))
        apex_t = ((-1)*args[1]) /( 2 * args[0])
        path = TracedPath(dot.get_center, stroke_width=4, stroke_color=WHITE)
        label = VGroup(
            TexMobject("y=", color=WHITE),
            DecimalNumber(8, color=WHITE),
        ).arrange(RIGHT)\
            .add_updater(lambda m: m.next_to(dot, UP))
        label[1].add_updater(lambda m: m.set_value(
            v0 * np.sin(theta) * t.get_value() - 0.5 * g * t.get_value() ** 2 + height
        ))

        self.add(path)
        self.play(Write(dot), Write(label))
        t_1 = apex_t
        self.play(t.set_value, t_1, run_time=t_1, rate_func=linear)

        label_1 = label.copy().clear_updaters()
        t = ValueTracker(t_1)
        self.play(Write(label_1))
        t_2 = sov[0]
        self.play(t.set_value, t_2, run_time=t_2-t_1, rate_func=linear)

        label_2 = VGroup(
            TexMobject("x=", color=WHITE),
            DecimalNumber(v0 * np.cos(theta) * t.get_value(), color=WHITE),
        ).arrange(RIGHT).next_to(dot, UP, buff=1)
        self.play(Write(label_2))
        t = ValueTracker(t_2)
        self.play(t.set_value, 5, run_time=5-t_2, rate_func=linear)

        self.wait(2)

Projectile


(修改常量初速度、抛射角、抛射高可以绘制任意抛体图像)

元素实例所在行(大概,代码修改过懒得再检查了)
变量22
标识符3,20
保留字1,3,4
常量23-26
注释23-25
数字6
字符串36
列表16,17
字典9-12
整型23
浮点型26
运算符30
函数4
  • 1
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值