翼度科技»论坛 编程开发 python 查看内容

manim边做边学--曲面

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
Surface类是Manim中专为创建和操控复杂的三维表面而打造的。
在实际应用中,无论是创建数学教学中的几何模型,还是模拟物理现象中的曲面变化,甚至是构建复杂的动画场景中的三维元素,Surface类都能以其强大的功能和灵活性满足我们的需求。
通过Surface类的参数和方法,我们可以创造出既逼真又富有创意的三维动画效果。
1. 主要参数

Surface的主要参数有4个:
参数名称类型说明funcCallable[[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参数定义,该函数描述了曲面在三维空间中的形状。
  1. # 创建一个基本的曲面
  2. f = lambda u, v: (u, v, u**2 - v**2)
  3. s = Surface(
  4.     func=f,
  5.     u_range=[-PI / 2, PI / 2],
  6.     v_range=[0, PI / 2],
  7. )
复制代码

3.2. 棋盘填充曲面

此示例演示了如何将曲面填充为棋盘样式。
通过使用set_fill_by_checkerboard方法,曲面被分割成多个小方格,并且这些小方格以交替的颜色(如红色和蓝色)填充,有助于区分曲面的不同部分。
  1. # 创建一个基本的曲面
  2. f = lambda u, v: (u, v, u * v)
  3. s = Surface(
  4.     func=f,
  5.     u_range=[-PI / 2, PI / 2],
  6.     v_range=[0, PI / 2],
  7. )
  8. # 填充颜色
  9. s.set_fill_by_checkerboard(RED, BLUE)
复制代码

3.3. 值填充曲面

在这个示例中,曲面的填充颜色是根据曲面上的数值来确定的。
set_fill_by_value方法允许用户定义一个颜色渐变函数,该函数根据曲面上的每个点的值来返回对应的颜色。
  1. # 创建一个基本的曲面
  2. f = lambda u, v: axes.c2p(
  3.     u,
  4.     v,
  5.     np.sin(u * PI) * np.cos(v * PI),
  6. )
  7. s = Surface(
  8.     func=f,
  9.     u_range=[-PI, PI],
  10.     v_range=[0, PI],
  11. )
  12. # 使用值填充曲面,颜色根据曲面上的值变化
  13. s.set_fill_by_value(
  14.     axes=axes,
  15.     colorscale=[
  16.         (RED, -0.5),
  17.         (YELLOW, 0),
  18.         (GREEN, 0.5),
  19.     ],
  20.     axis=2,
  21. )
复制代码

3.4. 自定义曲面样式

此示例展示了如何自定义曲面的颜色和线宽。
通过使用stroke_color和stroke_width方法,用户可以分别设置曲面分割线的颜色和线条的宽度。
下面的示例中,使用黄色,且宽度为2的线来作为曲面上的分割线。
  1. # 创建一个基本的曲面
  2. f = lambda u, v: (u, v, u**2 - v**2)
  3. s = Surface(
  4.     func=f,
  5.     stroke_color=YELLOW,
  6.     stroke_width=2,
  7.     u_range=[-PI / 2, PI / 2],
  8.     v_range=[0, PI / 3],
  9. )
复制代码

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(surface.py),
下载地址: 完整代码 (访问密码: 6872)

来源:https://www.cnblogs.com/wang_yb/p/18582943
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具