首页 > 其他分享 >Manim 学习笔记(三)--坐标系与坐标平面

Manim 学习笔记(三)--坐标系与坐标平面

时间:2024-07-26 09:29:42浏览次数:13  
标签:play -- self add ax wait my 坐标系 Manim

坐标系与坐标平面--效果:

代码:

# -*- coding: utf-8 -*-
from manim import *

class ZBX_ZBPM(Scene):
   
    def construct(self):
        #坐标平面(网格)
        my_plane = NumberPlane(
            faded_line_ratio=2,
            x_range=[-8, 8, 1],#[前两个参数的平均值为原点,其和表示坐标宽度,第三个参数表示坐标步长]
            y_range=[-4, 4, 1],
            x_length=16,#长度和上述范围一致才能是单位长度坐标
            y_length=8,            
            background_line_style={
                "stroke_color": TEAL,
                "stroke_width": 2,
                "stroke_opacity": 0.4,
            }
        )
        #坐标轴
        my_ax=Axes(#系统性默认全屏宽=14,高=8
            x_range=[-7, 7, 1],#[前两个参数的平均值为原点,其和表示坐标宽度,第三个参数表示坐标步长]
            y_range=[-4, 4, 1],
            x_length=14,#长度和上述范围一致才能是单位长度坐标
            y_length=8,
            #tips=True,
            
            axis_config={
                "include_numbers": True,
                "tip_shape": StealthTip,#箭头形状
                "color": TEAL,
                "numbers_to_include": np.arange(-4, 6, 2),
                #"font_size": 24,
            },
        )
        d1=my_ax.c2p(2,2)
        self.add(my_plane,my_ax)
        self.wait()
        self.add(Dot(d1))
        self.wait()
        lines_1 = my_ax.get_lines_to_point(d1)
        self.play(Create(lines_1))
        self.wait(2)
        
        dot0 = Dot()
        dot1 = Dot().move_to(LEFT*2)
        text1 = Tex("$\\vec{a}$")
        l1=Line(dot0,dot1)
        R1=VGroup(dot0,dot1,l1,text1) #把点和文字组合在一起
        text1.next_to(dot1,LEFT) # 文字放在点的左侧

        self.add(R1)
        self.play(Rotating(R1,radians=2*PI,run_time=5,axis=OUT,about_point=0*RIGHT))
        self.wait(2)


        dot2 = Dot().move_to(RIGHT*2)
        text2 = Text("A")
        text2.next_to(dot2,LEFT)
        self.add(dot2,text2)   

        # Update function 保持文字在点左侧
        def update_text(obj):
            obj.next_to(dot2,LEFT,buff=SMALL_BUFF) 

        text2.add_updater(update_text)     # 把这个函数添加给text   
        self.play(Rotating(dot2,radians=2*PI,run_time=5,axis=OUT,about_point=0*RIGHT))

        self.wait()

        dot3 = Dot()
        text3 = Text("B")
        text3.next_to(dot3,RIGHT)
        l3=Line(dot2,dot3)
        self.add(text3)
        R2=VGroup(dot2,dot3,l3)
        self.add(R2)
        # Update function 更新函数
        def update_text(obj):
            obj.next_to(dot3,RIGHT,buff=SMALL_BUFF)
        self.play(Rotating(R2,radians=2*PI,run_time=5,axis=OUT,about_point=2*RIGHT),UpdateFromFunc(text3,update_text))
        self.wait()
        self.clear()


        def x2(x):
            return x**2
        
        def sinx(x):
            return np.sin(x)

        def fx(x):
            for x in [-2,0]:
                return x**2
            
            for x in [0,6.28]:
                return np.sin(x)
            
        c1=Circle(color=BLUE,radius=3)

        self.add(my_plane,my_ax)

        f1= my_ax.plot(x2,color=YELLOW,x_range=[-2, 0])
        f2= my_ax.plot(sinx, x_range=[0, 6.28], color=BLUE)
        f3= my_ax.plot(fx, x_range=[-2, 0], color=RED)
        dot4=Dot(color=RED).scale(2)
        dot5=Dot(my_ax.c2p(3,0))
        l2=Line(dot0,dot5)
        vg1=VGroup(f1,f2)
        self.add(vg1,l2)        
        def update_dot(obj):
            
            obj.move_to(my_ax.c2p(x,np.sin(x))) 

        dot5.add_updater(update_dot) 
    

        self.play(FadeIn(c1),run_time=4)
        self.play(MoveAlongPath(dot4,f1),run_time=5,rate_fun=linear)
        self.play(MoveAlongPath(dot4,f2),run_time=5,rate_fun=linear)
        self.play(MoveAlongPath(dot4,c1),run_time=5,rate_fun=linear)
        self.wait()
        self.clear()

        self.add(f3)
        self.wait()

标签:play,--,self,add,ax,wait,my,坐标系,Manim
From: https://www.cnblogs.com/zjzBlogs/p/18324536

相关文章

  • BGP(Border Gateway Protocol,边界网关协议)劫持是指恶意或非法地篡改BGP路由信息的行为
    BGP(BorderGatewayProtocol,边界网关协议)劫持是指恶意或非法地篡改BGP路由信息的行为。BGP是互联网上用来交换路由信息的主要协议之一,它负责决定网络数据包应该如何从一个网络路由到另一个网络。BGP劫持可以分为两种主要类型:前缀劫持(PrefixHijacking):在前缀劫持中,攻击者发送......
  • 一文教你如何利用ThinkPHP6打造高效SEO优化的网站!
    在今天的互联网时代,网站的SEO(SearchEngineOptimization)优化已经成为了网站建设的一个重要环节。ThinkPHP6是一种基于PHP语言的开源Web应用框架,因其高效、安全、简洁等优势受到广泛的使用和推崇。本文将为大家介绍如何使用ThinkPHP6进行网站SEO优化。一、ThinkPHP6中SEO优化......
  • AtCoder Beginner Contest 360 题解(C-E)
    C-MoveIt题目链接:C-MoveIt题目大意:有\(N\)个盒子和\(N\)个物品编号为\(1-N\),物品\(i\)在盒子\(A_i\)中,重量为\(W_i\),你可以进行一种操作将盒子中的一件物品移动到其他任意盒子中,代价为\(W_i\),求使得所有盒子中只存在一件物品的最小操作代价。题解:贪心,可以发现......
  • php--序列化与反序列化
    ......
  • Windows10禁用资源管理器文件夹自动视图转换
    在Windows系统中,当使用资源管理器浏览文件夹时,系统有时会自动将文件夹视图转换为特定类型(如音乐或图片)的显示模式,这可能会给一些用户带来不便。为了禁用这个功能,你可以通过修改注册表来实现。以下是详细的步骤:方法一:通过修改注册表禁用自动视图转换打开注册表编辑器:按下Win+......
  • 基于springboot的学科竞赛管理-毕业设计+springboot+VUE
    介绍基于Springboot的学科竞赛管理系统是一款专为学科竞赛活动设计的综合管理平台,旨在提高竞赛组织和参与的效率。该系统分为管理端、教师端和学生端,每个角色均提供了丰富的功能模块,以满足不同用户的需求和职责。技术栈后端技术栈:Springboot+Mysql+Maven前端技术栈:Vue+Html......
  • 基于SpringBoot+Vue的人事系统 毕业设计 springboot+Vue+mysql
    介绍本人事系统基于SpringBoot和Vue框架开发,旨在为企业提供高效、便捷、准确的人事管理解决方案。通过现代化的技术手段,实现了人事数据的集中管理、流程的自动化处理以及信息的实时共享,从而提高企业的人事管理效率和决策科学性。技术栈后端技术栈:Springboot+Mysql+Maven......
  • java题目之金额转换以及如何优化
    publicclassScannerDemo5{publicstaticvoidmain(String[]args){//键盘录入一个金额intmoney;while(true){System.out.println("请输入一个金额:");Scannersc=newScanner(System.in);mon......
  • E9-解决表单中关联流程无权限查看
    效果场景描述费用报销流程需要关联事前申请流程,并且需要关联已经归档的事前申请流程。配置步骤改造事前申请流程:改造事前申请流程中归档节点的操作者归档节点操作者增加需要查看此流程的用户例如:报销流程中必须经过总裁、财务经理审核,但是事前申请流程并未经过这些高......
  • 数字化时代下高校程序设计类课程综合实践平台-计算机毕业设计源码41020
    摘要在数字化时代浪潮的推动下,高校程序设计类课程的教学与实践面临着前所未有的挑战与机遇。为适应这一时代变革,培养具备创新能力和实践精神的高素质程序设计人才,综合实践平台的设计与开发显得尤为重要。本文旨在探讨高校程序设计类课程综合实践平台的设计与开发,通过深入分析......