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)
manim边做边学--曲面的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- 【Leetcode 做题学算法周刊】第四期
首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
- 【Leetcode 做题学算法周刊】第二期
首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...
- 【Leetcode 做题学算法周刊】第三期
首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...
- 【Leetcode 做题学算法周刊】第六期
首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...
- 【Leetcode 做题学算法周刊】第七期
首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...
随机推荐
- 鸿蒙Next-支付宝SDK接入教程
App适配鸿蒙Next,开始做支付功能了,目前来说只有支付宝支持鸿蒙Next,微信还没上架,但是支付宝官方的文档跟Demo都很老,下载官方的Demo用最新版的DevEco-Studio导入都不成功. ...
- 【论文解读】System 2 Attention提高大语言模型客观性和事实性
一.简要介绍 本文简要介绍了论文"System 2 Attention (is something you might need too) "的相关工作.基于trans ...
- Angular 18+ 高级教程 – Getting Started
前言 这篇主要是教大家如何快速搭建一个 Angular 项目,纯用于学习. Before Starting 开始前,我们需要知道几个小知识. 1. Angular Compilation 游览器支持的 ...
- WiFi基础(四):WiFi工作原理及WiFi接入过程
liwen01 2024.09.16 前言 802.11 无线 WiFi 网有三类帧:数据帧.管理帧.控制帧.与有线网相比,无线 WiFi 网会复杂很多.大部分应用软件开发对 WiFi 的控制帧和管理 ...
- 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境转换为管理域。
VMware Cloud Foundation 5.2 发布并引入了一个新的功能,借助 VCF Import Tool 工具可以将现有 vSphere 环境直接转换(Convert)为管理工作负载域或 ...
- [CL-FOOL] CLOI 愚人赛的部分官方题解与小杂谈
小细节 谁会拿 Rank 奖励? 头图里有写哦. 发现没有,这里的问号是蓝色的,点进去可以进到彩蛋界面. 当然彩蛋界面也什么都没有,提交界面藏在下面的源码里. 那么交什么呢. CLOI 的文件里有一团 ...
- ZRAM的Swap功能和 SWAP分区有什么区别
ZRAM(压缩内存块设备)和传统的SWAP分区都是Linux系统中用来增加可用内存的方法,但它们的工作原理和实现方式有很大的区别: ZRAM 压缩内存:ZRAM使用压缩算法将数据存储在内存中.这样,当 ...
- 介绍一下 websocket
一般的http请求都是短连接,而webpack的使用可以建立长连接 : 什么是 websocket websocket 是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双 ...
- 38. data为什么是一个函数
vue中的data为什么是返回对象的函数,而不是直接使用对象形式 : 我们复用组件的时候,要求每一份data数据之间是独立的,不能互相影响,如果写成对象的形式所有的组件使用一份data数据 ,如果使用 ...
- 云原生周刊:DevOps-resources
推荐一个 GitHub 仓库 "DevOps-resources".这个 GitHub 仓库包含了学习和实践 DevOps 所需的资源列表.它包括涉及云计算.容器化.微服务.自动化 ...