Manim 提供了一系列专为三维空间设计的对象,让创建三维数学动画变得更加轻松。

本篇开始介绍其中最简单的点和线相关对象,也就是Dot3D(三维的点),Line3D(三维的线)和Arrow3D(三维的箭头)。

  • Dot3D用于表示三维空间中的点,是构建其他复杂三维图形的基础,它适用于标记关键点、位置、向量起点等。
  • Line3D用于在三维空间中绘制线段,可以表示向量、路径、轨迹等。它适用于展示物体的运动轨迹、力的方向等。
  • Arrow3DLine3D的基础上添加了箭头,用于明确表示方向性的线段。它适用于表示矢量、力的方向、速度等。

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. 主要方法

Dot3DArrow3D没有什么特殊的方法,就是一些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_toperpendicular_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

在这个综合示例中,我们结合使用Dot3DLine3DArrow3D来创建一个更复杂的三维场景。

首先,在场景中放置一个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边学边做--三维的点和线的更多相关文章

  1. 学EE做硬件找工作不如学CS做软件,为什么会这样?

    学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...

  2. 牛腩学Kotlin做Android应用

    牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...

  3. php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...

  4. html5-3 html5标签(热点地图如何实现)(边学边做)

    html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl  自定义列表dt  自定义标题dd  自定义列表内容 2. ...

  5. 第一份开发工作,边学边做android

    我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...

  6. 边学边做,简单的 GraphQL 实例

    项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...

  7. LabVIEW Actor Framwork (2)________ 边学边做server&client

    回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...

  8. 牛腩学ASP.NET CORE做博客(视频)

    牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...

  9. 牛腩学用MUI做手机APP

    斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...

  10. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

随机推荐

  1. kubernetes负载感知调度

    背景 kubernetes 的原生调度器只能通过资源请求来调度 pod,这很容易造成一系列负载不均的问题, 并且很多情况下业务方都是超额申请资源,因此在原生调度器时代我们针对业务的特性以及评估等级来设 ...

  2. 【全】CSS动画大全之按钮【c】

    效果预览 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  3. 【倍增】Rigged Games

    题意 两队打比赛,大比分 2b − 1 赢,小比分 2a − 1 赢. 给定的长度为 n 的串,两队比赛的每个小分结果是这个串的循环重复. 问从该串的每个位置开始,最终谁会赢得整个比赛. 思路 倍增. ...

  4. 一文教你如何用C代码解析一段网络数据包?【含代码】

    本文的目的是通过随机截取的一段网络数据包,然后根据协议类型来解析出这段内存. 学习本文需要掌握的基础知识: 网络协议 C语言 Linux操作 抓包工具的使用 其中抓包工具的安装和使用见下文: < ...

  5. JavaScript设计模式样例十四 —— 观察者模式

    观察者模式(Observer Pattern) 定义:当一个对象被修改时,则会自动通知它的依赖对象.目的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被 ...

  6. Unix、Linux、GNU 关系梳理

    之前写了一篇 MSYS2.MinGW 和 Cygwin 关系梳理的博客,但是要讲清它们几个的关系最好还是先了解一下操作系统的发展历程.遂补充了这篇博客. UNIX:现代操作系统的始祖 Operatin ...

  7. Windos操作系统下的Zookeeper安装图文教程

    凯哥已经准备好最新版本3.9.1且已经配置好了.既获取到配置好的. 获取到凯哥准备的安装后,只需要修改一下配置.将解压包解压后,找到conf文件,里面有个zoo.cfg配置文件.如下图: 下载后con ...

  8. 部署在阿里云上的项目收到了阿里云发送的shiro漏洞

    编辑 ​ 还记得在十月份凯哥发布过一篇修改若依系统编辑器的文章,然后为了方便大家浏览,凯哥就部署在服务器上了,结果,没想到最近收到了阿里云漏洞扫描通知: 编辑 ​ 如果不修改的话:对于长期存在安全隐患 ...

  9. Ubuntu18.04未发现WiFi适配器情况解决方案之一

    问题: 第一次你可能会遇见这种情况,ubuntu未发现Wifi适配器解决方案  无法打开WIfi 并告诉你没有WiFi适配器 解决方案: 解决方案如下: sudo modprobe -r ideapa ...

  10. Angular Material 18+ 高级教程 – CDK Accessibility の Focus

    介绍 CDK Focus 是对原生 DOM focus 的上层封装和扩展. Focus Origin 原生 DOM focus 我们只能知道 element 被 focus 了,但是无法知道它是怎么被 ...