用Manim在图形和坐标轴上画线条
.画图像函数的切线
angle_of_tangent(x, graph, dx=1e-08)
angle_of_tangent(x, graph, dx=1e-08)
是 Manim 中用于计算图形在给定点的切线角度的函数。以下是对该函数参数的解释:
参数说明
-
x
:- 这是你想要计算切线角度的 x 坐标。在这个坐标处,函数会计算函数图形的切线。
-
graph
:- 这是一个函数图形对象,通常是通过
Axes
类的plot
方法生成的。这个图形对象是你希望找出切线的曲线。
- 这是一个函数图形对象,通常是通过
-
dx
(默认值为1e-08
):- 这是一个很小的数值,用于计算斜率。
dx
在这里表示一个非常小的增量。通过在x
的坐标上增加和减少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
(可选): -
-
http://t.csdnimg.cn/cCLM7http://t.csdnimg.cn/cCLM7
自定义的线条类,默认为 Manim 的Line
类。这允许您使用不同的线条样式。
-
-
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