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

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

其中,DashedLineTangentLineLabeledLine都继承自Line

直线系列的模块也位于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,
)

3.2. 动态改变直线

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

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

3.3. 虚线样式

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

start = LEFT * 2
end = RIGHT * 2 DashedLine(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,
)

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)

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,
)

4. 附件

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

manim边学边做--直线类的更多相关文章

  1. scratch教程:学做控制类积木

    少儿编程中scratch很容易被小孩所接受,不管是从外观还是教程中,都符合少儿的兴趣,为此现在只要是开少儿编程课都会有scratch课程,今天娜娜姐小码王scratch培训机构就为大家分享,scrat ...

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

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

  3. 牛腩学Kotlin做Android应用

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

  4. 基于jQuery适合做图片类网站的特效

    分享一款基于jquery适合做图片类网站的特效.这是一款鼠标经过图片滑动弹出标题效果代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="c ...

  5. C++第11周(春)项目3 - 点类派生直线类

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目3 - 点类派生直线类]定义点类Poin ...

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

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

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

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

  8. 小白学Java:File类

    目录 小白学Java:File类 不同风格的分隔符 绝对与相对路径 File类常用方法 常用构造器 创建方法 判断方法 获取方法 命名方法 删除方法 小白学Java:File类 我们可以知道,存储在程 ...

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

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

  10. 编写高质量代码改善C#程序的157个建议[勿选List<T>做基类、迭代器是只读的、慎用集合可写属性]

    前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议23.避免将List<T>作为自定义集合类的基 ...

随机推荐

  1. ODPS 不用循环生成连续日期

    生成 20230801 ~ 20230831之间的每一天的sql代码怎么写? 只要一行代码. 一行代码: select TO_CHAR(DATEADD(TO_DATE(bizdate,'yyyymmd ...

  2. HTTP协议 学习:0-有关概念

    HTTP协议 学习:0-有关概念 背景 实际上,HHTP协议是一种比较简单的协议,它的本质上是一个文本协议,在实际开发中,我们重点关注解析对方发来的内容的过程(字符串匹配). 参考资料: HTTP H ...

  3. 【论文阅读】ICRA2022: Panoptic Multi-TSDFs: a Flexible Representation for Online Multi-resolution Volumetric Mapping and Long-term Dynamic Scene Consistency

    Type: ICRA Year: 2022 tag: SLAM 参考与前言 论文链接:https://arxiv.org/abs/2109.10165 代码链接:https://github.com/ ...

  4. 【electron-vite+live2d+vue3+element-plus】实现桌面模型宠物+桌面管理系统应用(踩坑)

    脚手架 项目使用 electron-vite 脚手架搭建 ps:还有一个框架是 electron-vite ,这个框架我发现与pixi库有冲突,无法使用,如果不用pixi也可以用这个脚手架. node ...

  5. Hadoop集群管理之fsimage和edits工作机制

    客户端对hdfs进行写文件时会首先被记录在edits文件中. edits修改时元数据也会更新. 每次hdfs更新时edits先更新后客户端才会看到最新信息. fsimage:是namenode中关于元 ...

  6. 逻辑回归求解二分类问题以及SPSS的实现

    分类问题就是给出物质的属性,判断其属于什么成分,本文将讲述逻辑回归求解二分类问题 本文着重于模型的实现,对于推导只是概括性的叙述 目录 一.问题提出 二.逻辑回归函数logistic 1.线性线性概率 ...

  7. MySQL 并发控制(锁得使用)

    导读 并发问题:同一时刻进行读写,并发问题回引发数据不一致问题. 解决并发问题:MySQL采用了锁定机制去解决并发问题 锁的分类 MySQL使用两种锁机制去解决问题:共享锁和排他锁,也叫读锁或者写锁. ...

  8. 🚀RabbitMQ+redis+Redisson分布式锁+seata实现订单服务

    引言 订单服务涉及许多方面,分布式事务,分布式锁,例如订单超时未支付要取消订单,订单如何防止重复提交,如何防止超卖.这里都会使用到. 开启分布式事务可以保证跨多个服务的数据操作的一致性和完整性, 使用 ...

  9. scratch少儿编程卡通三国背景72张全套素材包【免费下载】

    scratch卡通三国题材背景图片,共72张,让你轻松打造scratch三国世界! 免费下载地址:https://www.xiaohujing.com.cn 这套背景图片以卡通风格呈现,色彩鲜艳.造型 ...

  10. 【Java】Input,Output,Stream I/O流 05 RandomAccessFile 随机访问文件类

    RandomAccessFile 随机访问文件类 直接继承java.lang.Object 实现DataInput & DataOutput 接口 即是输入流,也是输出流 public cla ...