manim边学边做--三维的点和线
Manim
提供了一系列专为三维空间设计的对象,让创建三维数学动画变得更加轻松。
本篇开始介绍其中最简单的点和线相关对象,也就是Dot3D
(三维的点),Line3D
(三维的线)和Arrow3D
(三维的箭头)。
Dot3D
用于表示三维空间中的点,是构建其他复杂三维图形的基础,它适用于标记关键点、位置、向量起点等。Line3D
用于在三维空间中绘制线段,可以表示向量、路径、轨迹等。它适用于展示物体的运动轨迹、力的方向等。Arrow3D
在Line3D
的基础上添加了箭头,用于明确表示方向性的线段。它适用于表示矢量、力的方向、速度等。
1. 主要参数
Dot3D
的主要参数:
参数名称 | 类型 | 说明 |
---|---|---|
point | np.ndarray | 点的位置,包含 x,y,z 3个值 |
radius | float | 点的半径 |
color | Color | 点的颜色 |
resolution | tuple[int, int] | 点的分辨率 |
Dot3D
本质上是个球形,所以有radius
参数,控制点的大小;
resolution
参数设置的是点这个球形的分辨率,值越大,点看上去越圆滑,一般不需要设置这个参数,默认值就可以了。
Line3D
的主要参数:
参数名称 | 类型 | 说明 |
---|---|---|
start | np.ndarray | 线段的起点坐标,包含 x,y,z 3个值 |
end | np.ndarray | 线段的终点坐标,包含 x,y,z 3个值 |
thickness | float | 线段的粗细 |
color | Color | 线段的颜色 |
Arrow3D
的主要参数:
参数名称 | 类型 | 说明 |
---|---|---|
start | np.ndarray | 箭头的起点坐标,包含 x,y,z 3个值 |
end | np.ndarray | 箭头的终点坐标,包含 x,y,z 3个值 |
thickness | float | 箭头主体的粗细 |
height | float | 箭头尖部的高度 |
base_radius | float | 箭头尖部的底部半径 |
color | Color | 箭头的颜色 |
2. 主要方法
Dot3D
和Arrow3D
没有什么特殊的方法,就是一些Manim对象常规的缩放,平移等方法。
但是,Line3D
有几个自己特有的方法。
名称 | 说明 |
---|---|
parallel_to | 创建一条与给定线段平行的线段 |
perpendicular_to | 创建一条与给定线段垂直的线段 |
pointify | 获取表示对象中心的点 |
3. 使用示例
最后,还是通过示例来演示上面几个对象的重要参数和方法。
3.1. Dot3D的位置和颜色
在这个示例中,我们将创建个Dot3D
对象。
第一个点具有默认的半径和颜色;而第二个点,我们将自定义其半径和颜色。
通过调整这些参数,我们可以清晰地看到两个点在三维空间中的位置和颜色差异。
# 使用默认参数
dot1 = Dot3D(point=axes.c2p(1, 2, 3))
# 自定义半径和颜色
dot2 = Dot3D(
point=axes.c2p(2, 3, -1),
radius=0.2,
color=RED,
)
3.2. Line3D的长度和方向
此示例将展示如何使用Line3D对象在三维空间中绘制一条线段。
首先根据起点和终点设置一个线段,同时,调整线段的粗细和颜色来使其更加醒目。
然后,通过函数parallel_to
和perpendicular_to
分别绘制此线段的平行线(黄色)和垂线(红色)。
# 指定起点和终点 以及线段粗细
line = Line3D(
start=LEFT + DOWN * 2 + IN,
end=RIGHT + UP * 2 + OUT * 2,
thickness=0.02,
color=BLUE,
)
# 绘制line的平行线
Line3D.parallel_to(line, color=YELLOW)
# 绘制line的垂线
Line3D.perpendicular_to(line, color=RED)
3.3. Arrow3D的方向和样式
在这个示例中,我们使用Arrow3D
对象来表示一个带箭头的线段,以强调方向性。
首先设置箭头的起点和终点,为了突出箭头,
再调整其粗细(thickness
参数)、箭头尖部的高度(height
参数)和底部半径(base_radius
参数)。
# 指定起点和终点 以及箭头样式参数
arrow = Arrow3D(
start=[-1, -1, -2],
end=[1, 2, 2],
thickness=0.05,
height=0.2,
base_radius=0.1,
color=GREEN,
)
3.4. 综合使用Dot3D, Line3D和Arrow3D
在这个综合示例中,我们结合使用Dot3D
、Line3D
和Arrow3D
来创建一个更复杂的三维场景。
首先,在场景中放置一个Dot3D
对象作为起点。
然后,我们将使用Line3D
对象从该点绘制一条线段到另一个位置,表示路径或轨迹。
最后,我们将在线段的终点处添加一个Arrow3D
对象。
通过调整这些对象的参数(如位置、颜色、粗细等),可以创建一个既清晰又富有表现力的三维图形,用于演示、教学或科学研究等多种目的。
# 创建Dot3D对象作为起点
dot = Dot3D(point=[-1, -1, -1], color=BLUE)
# 创建Line3D对象连接起点和另一个点
line = Line3D(
start=[-1, -1, -1],
end=[2, 2, 2],
thickness=0.05,
color=YELLOW,
)
# 创建Arrow3D对象在终点处指示方向
arrow = Arrow3D(
start=[2, 2, 2],
end=[1, 2, -1],
thickness=0.05,
height=0.2,
base_radius=0.1,
color=RED,
)
4. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(dot_line.py
),
下载地址: 完整代码 (访问密码: 6872)
manim边学边做--三维的点和线的更多相关文章
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- 牛腩学Kotlin做Android应用
牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- html5-3 html5标签(热点地图如何实现)(边学边做)
html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl 自定义列表dt 自定义标题dd 自定义列表内容 2. ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
- 牛腩学ASP.NET CORE做博客(视频)
牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...
- 牛腩学用MUI做手机APP
斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
随机推荐
- 需要多久才能看完linux内核源码?
代码中自由颜如玉!代码中自有黄金屋! 一.内核行数 Linux内核分为CPU调度.内存管理.网络和存储四大子系统,针对硬件的驱动成百上千.代码的数量更是大的惊人. 先说说最早的内核linux 0.11 ...
- Plateau-Rayleigh 不稳定性 + Young-Laplace 方程
考虑竖直下落水柱中的 \(AB\) 两点 \[\begin{matrix} \displaystyle\frac12\rho U_0^2+\rho gz+P_A=\frac12\rho U^2(z)+ ...
- 代码随想录Day17
654.最大二叉树 给定一个不重复的整数数组 nums . 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值. 递归地在最大值 左边 的 子数组前缀 ...
- Oracle同一台服务器创建多个数据库
有时候我们需要再同一台机器上创建多个数据库服务(不是单纯的数据库实例),每一个数据库可以有单独的服务运行,只是在一个机器环境而已.可以在不同的端口上监听,也可以在相同端口监听 创建多个数据库步骤 安装 ...
- express项目的创建
前言 前端开发者若要进行后端开发,大多都会选择node.js,在node生态下是有大量框架的,其中最受新手喜爱的便是老牌的express.js,接下来我们就从零创建一个express项目. 安装nod ...
- C#自定义控件—仪表盘
C#用户控件之仪表盘 如何让温度.湿度.压力等有量程的监控值如仪表盘(DashBoard)一样显示? 思路(GDI绘图): 定义属性:(仪表盘的半径.颜色.间隙:刻度圆的半径.颜色.字体:指针的颜色. ...
- 6.23 Web日志分析&php&自动化工具
应急响应的目的:保护阶段.分析.复现.修复.建议 分析出攻击时间,攻击操作,攻击结果,安全修复等给出合理方案: 知识点 熟悉常见web安全攻击技术 熟悉日志启用及存储查看 熟悉日志中记录数据库分类及分 ...
- 使用 Helm 在 Kubernetes 上安装 Consul
Consul Sync 部署 官方文档部署:https://developer.hashicorp.com/consul/docs/k8s/installation/install 部署版本 1.14 ...
- Hash表实践 —— 两数之和
目录 题目背景 解题思路 题目背景 这个题目用常规的双循环就可以完成. 但不是最优解.为什么? 看看他的步骤数: N =[3,2,4] 求结果为6的两个元素坐标如下, 1). 3+2 = 5 不等于 ...
- SQL Management studio copy paste result out (string_agg line break)
refer : https://stackoverflow.com/questions/59283754/string-agg-with-line-break string agg char(10) ...