首页 > 其他分享 >用Manim在图形和坐标轴上画线条

用Manim在图形和坐标轴上画线条

时间:2024-08-04 19:25:11浏览次数:17  
标签:上画 切线 self point label start 坐标轴 坐标 Manim

 用Manim在图形和坐标轴上画线条

.画图像函数的切线

angle_of_tangent(x, graph, dx=1e-08)

angle_of_tangent(x, graph, dx=1e-08)是 Manim 中用于计算图形在给定点的切线角度的函数。以下是对该函数参数的解释:

参数说明

  1. x:

    • 这是你想要计算切线角度的 x 坐标。在这个坐标处,函数会计算函数图形的切线。
  2. graph:

    • 这是一个函数图形对象,通常是通过 Axes 类的 plot 方法生成的。这个图形对象是你希望找出切线的曲线。
  3. dx (默认值为 1e-08):

    • 这是一个很小的数值,用于计算斜率。dx 在这里表示一个非常小的增量。通过在 x 的坐标上增加和减少 dx,可以通过有限差分法来计算在该点的导数(切线的斜率)。具体来说,它会使用公式:

slope=\frac{ f(x+dx)−f(x−dx)}{2⋅dx}

  • 这个方法可以有效地给出 x 处的斜率,从而帮助计算出切线的角度。

返回值

  • 该函数会计算并返回切线的角度,通常用弧度表示,可以在图形的画图和动画中使用,以展示切线在给定点的方向。

示例: 

from manim import *  
import numpy as np  

class ParabolaTangentWithAxes000(Scene):  
    def construct(self): 
        # 创建坐标轴  
        ax = Axes(  
            x_range=[-5, 5, 1],  
            y_range=[-1, 13, 1],  
            axis_config={"color": BLUE},  
        )  
        
        # 定义抛物线曲线  
        curve = ax.plot(lambda x: x**2, color=GREEN)  
        # 添加坐标轴和抛物线到场景中  
        self.add(ax, curve)   
        # 设置切线的 x 坐标  
        x_value = 1.5  
        # 计算切线的斜率  
        slope = self.derivative(x_value)  
        # 获取抛物线上的点  
        y_point = x_value**2  
        # 创建切线  
        tangent_line = self.create_tangent_line(ax, x_value, y_point, slope)  
        # 添加切线到场景中  
        self.add(tangent_line)  

    def derivative(self, x):  
        # y = x^2 的导数是 2x  
        return 2* x  

    def create_tangent_line(self, ax, x, y, slope):  
        # 设置切线的起点和终点  
        x_offset = 2  
        start_x = x - x_offset  
        end_x = x + x_offset  

        # 计算切线在起点和终点的 y 坐标  
        start_y = y + slope * (start_x - x)  
        end_y = y + slope * (end_x - x)  

        # 转换为坐标系坐标  
        start_point = ax.c2p(start_x, start_y)  
        end_point = ax.c2p(end_x, end_y)  

        # 创建并返回切线  
        return Line(start_point, end_point, color=RED)  

 运行结果:

示例2:

from manim import *  
import numpy as np  

class ParabolaTangentWithAxes000(Scene):  
    def construct(self): 
        # 创建坐标轴  
        ax = Axes(  
            x_range=[-5, 5, 1],  
            y_range=[-1, 13, 1],  
            axis_config={"color": BLUE},  
        )  
        
        # 定义抛物线曲线  
        curve = ax.plot(lambda x: x**3, color=GREEN)  
        # 添加坐标轴和抛物线到场景中  
        self.add(ax, curve)   
        # 设置切线的 x 坐标  
        x_value = 1 
        # 计算切线的斜率  
        slope = self.derivative(x_value)  
        # 获取抛物线上的点  
        y_point = x_value**2  
        # 创建切线  
        tangent_line = self.create_tangent_line(ax, x_value, y_point, slope)  
        # 添加切线到场景中  
        self.add(tangent_line)  

    def derivative(self, x):  
        # y = x^2 的导数是 2x  
        return 3* x**2  

    def create_tangent_line(self, ax, x, y, slope):  
        # 设置切线的起点和终点  
        x_offset = 2  
        start_x = x - x_offset  
        end_x = x + x_offset  

        # 计算切线在起点和终点的 y 坐标  
        start_y = y + slope * (start_x - x)  
        end_y = y + slope * (end_x - x)  

        # 转换为坐标系坐标  
        start_point = ax.c2p(start_x, start_y)  
        end_point = ax.c2p(end_x, end_y)  

        # 创建并返回切线  
        return Line(start_point, end_point, color=RED)  

运行结果:

 

c2p(*coords)

    c2p(*coords) 是 Manim 中的一个函数,用于将给定的坐标转换为可绘制的点,通常用于在 2D 或 3D 场景中定位对象。

参数解释

  • coords:
    • 这是一个或多个坐标,可以是以下类型之一:
      • float: 单个浮点数,表示一个坐标。
      • Sequence[float]: 一个序列(如列表或元组),表示一组坐标。对于 2D 场景,通常包含两个值(x 和 y),对于 3D 场景,则通常包含三个值(x、y 和 z)。
      • Sequence[Sequence[float]]: 多个序列的序列,每个序列表示一组坐标。例如,多个点的坐标。
      • ndarray: NumPy 数组,表示坐标点的集合。

返回类型

  • 返回类型是 numpy.ndarray,这是经过转换后的坐标,将其转换为可用于在场景中绘制的格式。

示例:

from manim import *  

class C2PExample(Scene):  
    def construct(self):  
        # 创建一个 Axes 对象,用于绘制坐标系  
        axes = Axes(x_range=[-5, 5], y_range=[-5, 5], axis_config={"color": BLUE})  

        # 使用 c2p 转换坐标  
        point_coords = (3, 2)  # x = 3, y = 2  
        point_location = axes.c2p(*point_coords)  # 转换坐标  

        # 创建一个点  
        self.play(Create(axes))  
        point = Dot(point_location, color=YELLOW)  

        # 添加坐标轴和点到场景中  
        self.play(Create(axes))  
        self.play(Create(point))  

        # 添加文本说明  
        label = MathTex("Point (3, 2)").next_to(point, DR)  
        self.play(Write(label))  

        self.wait(2)

运行结果:

 

 get_T_label 

         get_T_label是 Manim 中的一个函数,其作用是为给定的函数图形上的某个 x 坐标生成切线标记(T-label)和辅助线,这在可视化数学函数时非常有用。这个函数通常会返回一个切线的显示和一个标签,帮助观众理解导数和切线的概念。

参数解释

  • x_val:

    • 给定的 x 坐标,函数在该坐标处计算对应的 y 值,并生成切线。
  • graph:

    • 要分析的图形对象,通常是一个 Graph 类的实例,表示某个数学函数的图像。
  • label (可选):

    • 用于切线的文本标签,若不提供则默认为 None。
  • label_color (可选):

    • 标签文本的颜色,若不提供则默认为 None,使用默认颜色。
  • triangle_size (可选):

    • 三角形的大小,通常用于在切线标记上显示方向。
  • triangle_color (可选):

    • 三角形的颜色,默认为白色(ManimColor('#FFFFFF'))。
  • line_func (可选):

  • line_color (可选):

    • 辅助线的颜色,默认为黄色(ManimColor('#FFFF00'))。

返回类型

该函数返回一个包含切线和标签的 Mobject 对象,便于在场景中添加。

 示例:

class TLabelExample(Scene):
    def construct(self):
        # defines the axes and linear function
        axes = Axes(x_range=[-1, 10], y_range=[-1, 10], x_length=9, y_length=6)
        func = axes.plot(lambda x: x**2, color=BLUE)
        # creates the T_label
        t_label = axes.get_T_label(x_val=2, graph=func, triangle_size=0.5,
                                   line_func=DashedLine,line_color=RED,label=Tex("x-V1"))
        t_label02 = axes.get_T_label(x_val=3, graph=func,line_func=Arrow,label=Tex("xV2"))
        self.add(axes, func, t_label,t_label02)

 运行结果:

标签:上画,切线,self,point,label,start,坐标轴,坐标,Manim
From: https://blog.csdn.net/qq_45449625/article/details/140898617

相关文章

  • 用Manim实现——计算和绘制图形下方区域
    用Manim实现——计算和绘制图形下方区域get_area 函数    get_area是一个用于计算和绘制图形下方区域的函数,常用于图形动画库(如Manim)get_area(graph,x_range=None,color=(ManimColor('#58C4DD'),ManimColor('#83C167')),opacity=0.3,bounded_graph=None,**kwar......
  • Manim系列——创建并使用坐标系统
    到目前为止,我们一直在研究表单的功能具有一个自变量和一个因变量。这些函数可以在二维空间中表示,使用两个数值轴,使我们能够用两个数字识别平面中的每个点。我们现在想谈谈三维空间;为了识别三维空间中的每个点,我们需要三个数值。建立这种关联的明显方法是添加一个新轴,垂直于和......
  • 用Python打造精彩动画与视频, 6.2 使用Manim进行数学和科学可视化
     6.2使用Manim进行数学和科学可视化Manim(MathematicalAnimationEngine)是一款强大的动画制作工具,尤其适用于数学和科学领域的可视化。它由3Blue1Brown的GrantSanderson开发,旨在通过动画演示复杂的数学概念,使其更易于理解。使用Manim,用户可以创建高质量的数学动画,从简单的......
  • 用Python打造精彩动画与视频,5.3 使用Manim创建简单动画
     5.3使用Manim创建简单动画在这一节中,我们将介绍如何使用Manim创建简单的动画。我们将从基本的场景构建开始,然后演示如何添加动画效果。通过这些示例,你将能够掌握使用Manim创建各种动画的基本技能。5.3.1创建一个简单的场景Manim中的基本单元是场景(Scene)。每个场景都是一......
  • 用Python打造精彩动画与视频, 5.2 安装和设置Manim
     5.2安装和设置ManimManim是一个强大的动画库,用于创建高质量的数学动画。它最初由3Blue1Brown的GrantSanderson开发,并被广泛用于教育和展示。以下是安装和设置Manim的详细步骤。5.2.1安装ManimManim需要Python环境和一些依赖库。在安装Manim之前,请确保已经......
  • Manim 学习笔记(二)--文本测试
    文本测试--效果:代码:#-*-coding:utf-8-*-frommanimimport*classTransformExample(Scene):defconstruct(self):banner=ManimBanner()banner.shift(UP*0.5)self.play(banner.create(),run_time=1)self.play(banner.anima......
  • Manim 学习笔记(三)--坐标系与坐标平面
    坐标系与坐标平面--效果:代码:#-*-coding:utf-8-*-frommanimimport*classZBX_ZBPM(Scene):defconstruct(self):#坐标平面(网格)my_plane=NumberPlane(faded_line_ratio=2,x_range=[-8,8,1],#[前两个参数的......
  • Manim 学习笔记(一)--常用的几个函数和操作
    常用的一些操作【注:随版本升级,有些操作和指令会有改动】frommanimimport*从manim中导入了需要用到的模块classHello_World(Scene)创建一个继承自Scene的一个类;defconstruct(self)construct方法对于manim很特殊,manim调用这个方法来创建动画。所以基本上......
  • manim边学边做--Table
    表格是一种常见的数据展示形式,manim提供了Table模块专门用于显示表格形式的数据。表格Table和上一节介绍的矩阵Matrix都是用来显示二维数据的,不过,Table的表现力更强,比如,它可以显示表头信息,列名信息等等。Table模块也细分了多个对象:通用Table:显示任何内容DecimalTable:表格内容......
  • 如何在带有DX11绘图界面的软件上画imgui界面
    前言处于某些研究目的,我们经常需要在dx11绘制的界面上绘制我们自己的操作菜单,以方便进行一些可视化操作;这里面imgui库因为其优越的可用性,健壮性和美观性,得到了很多人的青睐。那么我们应该如何在一个带有dx的软件界面上利用imgui绘制我们自己的界面呢?下面的代码就是为了解决这个问......