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 ...
随机推荐
- Asp.net core 学习笔记 Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇
更新 30-04-2023 最新版本请看这 2 篇 ASP.NET Core – User Secret & Azure Key Vault 之前有写过 2 篇关于 key-vault 和 d ...
- 全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数
全网最适合入门的面向对象编程教程:48 Python 函数方法与接口-位置参数.默认参数.可变参数和关键字参数 摘要: 在 Python 中,函数可以接受多种不同类型的参数,包括位置参数.默认参数.可 ...
- QT原理与源码分析之QT对象类型QObject源码中的间接的设计思想
这一篇文章介绍QT框架中QT对象类型QObject类型的源代码在设计上的一个比较优秀的设计思想. QObject类型定义 QObject 直接来看QObject的源代码.为了表达更简洁更直观,这里省略 ...
- 优化 Go 语言数据打包:性能基准测试与分析
优化 Go 语言数据打包:性能基准测试与分析 场景:在局域网内,需要将多个机器网卡上抓到的数据包同步到一个机器上. 原有方案:tcpdump -w 写入文件,然后定时调用 rsync 进行同步. 改造 ...
- Codeforces Round 973 (Div. 2) D
性质1:题目操作相当于将前面的数搬到了后面,将其视为柱状图,则是把前面柱的高度转移至后面柱的高度 性质2:最后移成的序列以单调不下降序列为最优,易证明当存在下降时,可通过操作使答案更优或不变差 性质3 ...
- LNMP 和 LAMP 对比 (仅供参考)
Nginx 性能稳定.功能丰富.运维简单.处理静态文件速度快且消耗系统资源极少. Apache 是 LAMP 架构最核心的 Web Server,开源.稳定.模块丰富是 Apache 的优势.但 Ap ...
- Nuxt.js 应用中的 app:mounted 钩子详解
title: Nuxt.js 应用中的 app:mounted 钩子详解 date: 2024/10/5 updated: 2024/10/5 author: cmdragon excerpt: ap ...
- NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比 随着生成式人工智能(Artificial Intelligence Generated Conten ...
- dotnet 的LINQ使用
// LINQ (Language Integrated Qyery) 语言集成查询 -- 用来查询的一些操作类库 // 1. LINQ to Objects 主要负责对象的查询 // 2. LINQ ...
- 09-react的组件传值 props
// 组件传值 props 接收传递过来的数据 import ReactDom from "react-dom" import { Component } from "r ...