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 ...
随机推荐
- AI工具合集
以下工具来源于互联网,可能会失效,请参考使用 网红工具 名称 链接 说明 GPT-4 https://chat.openai.com/ 需要梯子,需要付费.功能最强大的聊天机 器人. 文心一言 h ...
- 安全 – CSP (Content Security Policy)
前言 之前讲过 CSRF.防 Cookie hacking 的. 也介绍过防 XSS 的 HtmlSanitizer. 今天再介绍 CSP. 参考 Content Security Policy 介绍 ...
- JavaScript – Symbol
前言 Symbol 是 es6 的特性. 如果只是写业务逻辑代码, 其实是不太会用到的. 如果是做架构, 封装, UI 组件才有需要. 但学它的概念是好的. es6 有需要内置的 Symbol 链接者 ...
- 系统编程-操作系统概论PART1
Part1. 计算机的基本组成原理 Part2. 计算机执行原理顶层视图 Part3. 指令 指令周期 取指令和执行指令 指令格式 前面1字节是操作码,代码指令的功能,例如加法功能. 后面3字节用于寻 ...
- IDEA如何查看每一行代码的提交记录(人员,时间)
前言 我们在使用IDEA开发时,一般需要使用git来管理我们的代码,而且大家协同开发. 有时候,我们在开发的时候,经常需要看一下当前的代码时谁开发的,除了看类上面的作者外,更精细的方式是看每一行代 ...
- [OI] 偏序
\(n\) 维偏序即给出若干个点对 \((a_{i},b_{i},\cdots,n_{i})\),对每个 \(i\) 求出满足 \(a_{j}\gt a_{i},b_{j}\gt b_{i}\cdot ...
- Nuxt.js 应用中的 app:beforeMount 钩子详解
title: Nuxt.js 应用中的 app:beforeMount 钩子详解 date: 2024/10/4 updated: 2024/10/4 author: cmdragon excerpt ...
- Android应用启动全流程分析(源码深度剖析)
目录 1.前言 2.大纲 3. Input触控事件处理流程 3.1 系统机制分析 3.2 结合Systrace分析 4. 应用进程的创建与启动 4.2 创建应用进程 4.2.1 AMS 发送socke ...
- .NET 实现的交互式 OA 系统
前言 近期,我们在后台收到了粉丝们的留言,需要一个高效办公自动化(OA)系统.为了回应大家的期待,今天我们推荐一款既灵活又强大的 OA 系统解决方案,帮助提升日常办公效率和团队协作水平. 在日常工作中 ...
- Transformer原理+代码详解
简介 Transformer是一种深度学习模型,它在自然语言处理(NLP)领域中非常流行和有效.它最初由Vaswani等人在2017年的论文<Attention is All You Need& ...