manim边学边做--直线类

news/2024/9/19 16:54:31/文章来源:https://www.cnblogs.com/wang_yb/p/18374417

直线是最常用的二维结构,也是构造其他二维图形的基础。
manim中针对线性结构提供了很多模块,本篇主要介绍常用的几个直线类的模块。

  1. Line:通用直线
  2. DashedLine:各种类型的虚线
  3. TangentLine:根据已有的几何体,绘制它的切线
  4. LabeledLine:带有标签的直线

其中,DashedLineTangentLineLabeledLine都继承自Line
image.png
直线系列的模块也位于manim中的Mobject之下。

1. 主要参数

模块Line的常用参数有:

参数名称 类型 说明
start Point3D 直线的起点
end Point3D 直线的终点
path_arc float 直线的弯曲程度

Line模块常用的就是startend参数,path_arc参数是调节直线弯曲度的,用的不多。

模块DashedLine除了包含Line的参数之外,还有两个特有的参数:

参数名称 类型 说明
dash_length float 每小段虚线的长度
dashed_ratio float 虚线的疏密程度

模块TangentLine是专门用来绘制切线的,它的参数有:

参数名称 类型 说明
vmob VMobject 绘制切线的几何体,一般是圆形
alpha float 切线围绕在几何体上的方向,范围从0~1
d_alpha float 切线的偏移度,默认是很小的值
length float 切线长度

这里的alpha参数范围从0~1,代表了围绕vmob一周。

模块LabeledLine可以在直线上加一个便签,这在制作动画时非常有用,可以给线段添加说明信息。

参数名称 类型 说明
label str 标签中文字,可支持数学公式
label_position float 标签位置,默认在直线正中间
font_size float 标签字体大小
label_color Color 标签颜色
label_frame bool 是否显示标签背景
frame_fill_color Color 标签背景颜色
frame_fill_opacity float 标签背景透明度

2. 主要方法

模块Line的常用方法有:

名称 说明
get_angle 直线相对于水平方向的角度
get_projection 直线外一点在直线上的投影
get_slot 直线的斜率
get_unit_vector 直线对应的单位向量
get_vector 直线对应的向量
put_start_and_end_on 重新设置直线的起点和终点
set_angle 重新设置直线的角度
set_length 重新设置直线的长度
set_path_arc 重新设置直线的弯曲度
set_points_by_ends 重新设置直线的起点和终点,类似 put_start_and_end_on

通过Line提供的get_*set_*方法,可以灵活的获取直线的信息,进行计算之后,再改变直线的状态。
这在制作数学动画时非常有用。

模块DashedLine的常用方法有:

名称 说明
get_start 虚线的起点
get_end 虚线的终点
get_first_handle 贝塞尔曲线的第一个控制点
get_last_handle 贝塞尔曲线的最后一个控制点

manim中,直线也可以有弯曲度,所以直线都是通过贝塞尔曲线的方式绘制的,
get_first_handleget_last_handle是为了获取贝塞尔曲线的控制点。

模块TangentLineLabeledLine没有自己特殊的方法,但是它们继承自Line的方法基本都可以使用。

3. 使用示例

下面通过示例来演示直线类模块的效果。

3.1. 直线样式

直线Line从形状上看比较简单,能够设置的属性也就是长度,弯曲度等等。

Line(LEFT * 2, RIGHT * 2)
Line(LEFT, RIGHT)
Line(LEFT * 1.5,ORIGIN,path_arc=0.5,
)
Line(ORIGIN,RIGHT * 1.5,path_arc=1.5,
)

out.gif

3.2. 动态改变直线

通过直线的方法,可以动态的改变直线。

l = Line(LEFT * 2, RIGHT * 2)
# 改变长度
l.set_length(2)
# 改变角度
l.set_angle(0.785)
# 改变弯曲度
l.set_path_arc(1)

out.gif

3.3. 虚线样式

虚线DashedLine除了上面直线Line的属性之外,还可以设置自己特有的虚线样式。

start = LEFT * 2
end = RIGHT * 2DashedLine(start, end)
DashedLine(start,end,dash_length=0.5,
)
DashedLine(start,end,dash_length=1,dashed_ratio=0.8,
)
DashedLine(start,end,dashed_ratio=0.1,
)

out.gif

3.4. 切线样式

切线TangentLine本身就是一个普通的直线Line
它的主要作用是制作动画时不用自己去手工计算,就能方便的绘制一个图形的切线。

c = Circle(radius=1).shift(DOWN)TangentLine(c, alpha=0)
TangentLine(c, alpha=0.125)
TangentLine(c, alpha=0.375)
TangentLine(c, alpha=0.75)

out.gif

3.5. 直线上的标签

LabeledLine在需要给动画中的某些线加说明的时候非常有用。

start = LEFT * 2
end = RIGHT * 2
txt1 = Text("中文说明")
txt2 = Text("标签背景")LabeledLine(label="y=kx+b",font_size=25,start=start,end=end,
)
LabeledLine(label=txt1,start=start,end=end,
)
LabeledLine(label="z=\sqrt{x^2+y^2}",font_size=25,start=start,end=end,label_color=RED,label_frame=False,
)
LabeledLine(label=txt2,start=start,end=end,frame_fill_color=GREEN,frame_fill_opacity=0.8,
)

out.gif

4. 附件

文中完整的代码放在网盘中了(line.py),
下载地址: 完整代码 (访问密码: 6872)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/785502.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AP5174内置PWM调节LED灯亮度输入5-100V车灯驱动IC 手电筒与车灯方案

产品描述 AP5174 是一款效率高,稳定可靠的 LED 灯恒流驱动控制芯片,内置高精度比较器,固定 关断时间控制电路,恒流驱动电路等,特别适合大功率 LED 恒流驱动。 AP5174 采用 ESOP8 封装,散热片内置接 SW 脚,通过调节外置电流检测的电阻值来设置 流过 LED 灯的电流,支持外…

Adobe Illustrator AI v28下载及安装教程 (矢量图形设计软件)

前言 Adobe Illustrator(简称AI)专业矢量图形设计软件,矢量绘图设计工具,设计师常用的矢量绘制软件。该软件广泛应用于广告设计、印刷出版、海报书籍、插画绘制、图像处理、PDF文档设计、WEB页面等设计,借助这款矢量绘图工具,可以制作适用于印刷,Web,视频和移动设备的徽标…

DPDK简介和原理

DPDK是一种绕过内核直接在用户态收发包来解决内核性能的瓶颈技术。本文分享自天翼云开发者社区《DPDK简介和原理》,作者:s****n DPDK是一种绕过内核直接在用户态收发包来解决内核性能的瓶颈技术。 什么是中断 了解DPDK之前,首先需要先了解什么是中断,其实中断就是电信号,中…

Webpack 核心流程

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:霜序三个阶段 初始化阶段初始化参数:从配置文件、配置对象、shell 参数中读取,与默认的配置参数结合得出最后的参数。 创建编译器…

算法与数据结构——基本数据类型与编码

基本数据类型 基本数据类型是计算机CPU可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种整数类型byte、short、int、long。 浮点数类型float、double,用于表示小数 字符类型char,用于表示各种语言的字母、标点符号甚至表情符号等。 布尔类型bool,用于表示“是…

中国电信公布2024年中期业绩!

2024年上半年,中国电信紧抓发展机遇,完整准确全面贯彻新发展理念,坚定履行建设网络强国和数字中国、维护网信安全责任,持续深入实施云改数转战略,加快推动数字信息基础设施智能化、绿色化演进升级,加大高质量产品和服务供给,加速战略新兴业务规模拓展,全面深化改革开放…

这是一款轻量存储黑科技!

近日,天翼云联合InfoQ举办了以“新存储,更轻量”为主题的线上技术分享会。天翼云存储产品线总监潘亚莲以“轻量级存储集群控制器HBlock的设计理念与场景实践”为主题,讲解了HBlock在产品理念、价值主张、应用场景等方面的内容。近日,天翼云联合InfoQ举办了以“新存储,更轻…

xlsx-js-style前端组装表格数据下载到本地

1.数据格式: 对象:key/valueconst data1 = {合同 主体信息:{\n "合同编号": "FWTsAEY-S1T-2023-01",\n "项目编号": "FTCG2023000265A",\n "项目名称": "福田区第二人民医院食堂服务采购项直",\n "总计…

Cookie,Session Filter,Listener详解

HTTP请求的无状态性HTTP的无状态性是其一个重要的特征,指的是HTTP协议本身并不保留客户端与服务器交互的历史信息,换而言之,即每次的HTTP请求都是独立的,服务器在处理每一个请求时都不会记住前一个请求的状态无状态的含义独立性:每次的HTTP请求都是独立的,不依赖于之前的请求,即…

探索风扇产品模型的3D可视化魅力

在这个科技日新月异的时代,每一个细微的创新都能为我们的生活带来前所未有的便捷与享受。今天,就让我们一起踏入一场视觉与科技的盛宴,探索风扇产品模型如何通过3D可视化技术,重新定义家居生活的舒适与美学。想象一下,在炎炎夏日,你无需亲临实体店,只需轻点鼠标或滑动指…

Tree组件的快速定位更新节点的状态,以及修改节点的数据属性等操作

当我们点击树节点的时候我们常常只能获得树的id,那么我么如何获快速定位到树节点的内容呢,除此之外,当树已经存在时,但是缺少我们想要的内容时,我们想在树节点上添加我们需要的额外的内容时该怎么办,那么就是用以下方法可以快速定位到我们需要的节点并可以快速添加内容当…

供应链管理系统(SCM) —— 企业物流的智能枢纽

SAP 供应链管理系统以打造数字化和集成化的供应链管理平台为使命,将传统的仓储管理系统、制造执行系统、产品管理系统等软件进行升级和上云管理,为企业提供面向客户、合作伙伴及员工的数字化SCM系统平台。SAP SCM系统从设计到运维,全面优化供应链,规避风险 供应链管理模式日…