manim边做边学--曲面
Surface
类是Manim
中专为创立和控制杂乱的三维外表而打造的。
在实践运用中,无论是创立数学教育中的几许模型,仍是模仿物理现象中的曲面改变,乃至是构建杂乱的动画场景中的三维元素,Surface
类都能以其强壮的功用和灵敏性满足咱们的需求。
经过Surface
类的参数和办法,咱们能够创造出既传神又赋有构思的三维动画作用。
1. 首要参数
Surface
的首要参数有4个:
参数称号 | 类型 | 阐明 |
---|---|---|
func | Callable[[float, float], np.ndarray] | 一个承受两个参数(一般称为u和v)的函数,回来三维空间中的一个点(x, y, z)的z坐标 |
u_range | [float] | 参数u的取值规模,决议了外表在u方向上的延伸状况 |
v_range | [float] | 参数v的取值规模,决议了外表在v方向上的延伸状况 |
resolution | [int] | 在u和v方向上的分辨率,即外表在这两个方向上的细分程度 |
其间,参数func
比较重要,它决议了曲面的形状。
经过这个函数来创立任何能够用参数方程表明的三维外表,例如,球面、椭球面、双曲面等。
2. 首要办法
Surface
类有2个设置去曲面款式的办法。
称号 | 阐明 |
---|---|
set_fill_by_checkerboard | 经过替换色彩填充曲面,适用于需求视觉区别曲面不同部分的状况 |
set_fill_by_value | 依据曲面上的数值运用色彩突变进行填充,适用于表明连续变量的改变 |
3. 运用示例
下面经过几个示例来用演示怎么运用Surface
类。
3.1. 根本曲面
这个示例展现了怎么运用Manim
的Surface
类创立一个根本的三维曲面。
曲面由func
参数界说,该函数描绘了曲面在三维空间中的形状。
# 创立一个根本的曲面
f = lambda u, v: (u, v, u**2 - v**2)
s = Surface(
func=f,
u_range=[-PI / 2, PI / 2],
v_range=[0, PI / 2],
)
3.2. 棋盘填充曲面
此示例演示了怎么将曲面填充为棋盘款式。
经过运用set_fill_by_checkerboard
办法,曲面被分割成多个小方格,而且这些小方格以替换的色彩(如赤色和蓝色)填充,有助于区别曲面的不同部分。
# 创立一个根本的曲面
f = lambda u, v: (u, v, u * v)
s = Surface(
func=f,
u_range=[-PI / 2, PI / 2],
v_range=[0, PI / 2],
)
# 填充色彩
s.set_fill_by_checkerboard(RED, BLUE)
3.3. 值填充曲面
在这个示例中,曲面的填充色彩是依据曲面上的数值来确认的。
set_fill_by_value
办法答应用户界说一个色彩突变函数,该函数依据曲面上的每个点的值来回来对应的色彩。
# 创立一个根本的曲面
f = lambda u, v: axes.c2p(
u,
v,
np.sin(u * PI) * np.cos(v * PI),
)
s = Surface(
func=f,
u_range=[-PI, PI],
v_range=[0, PI],
)
# 运用值填充曲面,色彩依据曲面上的值改变
s.set_fill_by_value(
axes=axes,
colorscale=[
(RED, -0.5),
(YELLOW, 0),
(GREEN, 0.5),
],
axis=2,
)
3.4. 自界说曲面款式
此示例展现了怎么自界说曲面的色彩和线宽。
经过运用stroke_color
和stroke_width
办法,用户能够别离设置曲面分割线的色彩和线条的宽度。
下面的示例中,运用黄色,且宽度为2的线来作为曲面上的分割线。
# 创立一个根本的曲面
f = lambda u, v: (u, v, u**2 - v**2)
s = Surface(
func=f,
stroke_color=YELLOW,
stroke_width=2,
u_range=[-PI / 2, PI / 2],
v_range=[0, PI / 3],
)
4. 附件
文中的代码仅仅要害部分的截取,完好的代码同享在网盘中(surface.py
),
下载地址: 完好代码 (拜访暗码: 6872)