用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)

 运行结果:

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值