manim边学边做--直线类
直线是最常用的二维结构,也是构造其他二维图形的基础。manim中针对线性结构提供了很多模块,本篇主要介绍常用的几个直线类的模块。
Line:通用直线DashedLine:各种类型的虚线TangentLine:根据已有的几何体,绘制它的切线LabeledLine:带有标签的直线
其中,DashedLine,TangentLine和LabeledLine都继承自Line。
直线系列的模块也位于manim中的Mobject之下。
1. 主要参数
模块Line的常用参数有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| start | Point3D | 直线的起点 |
| end | Point3D | 直线的终点 |
| path_arc | float | 直线的弯曲程度 |
Line模块常用的就是start和end参数,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_handle和get_last_handle是为了获取贝塞尔曲线的控制点。
模块TangentLine和LabeledLine没有自己特殊的方法,但是它们继承自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边学边做--直线类的更多相关文章
- scratch教程:学做控制类积木
少儿编程中scratch很容易被小孩所接受,不管是从外观还是教程中,都符合少儿的兴趣,为此现在只要是开少儿编程课都会有scratch课程,今天娜娜姐小码王scratch培训机构就为大家分享,scrat ...
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- 牛腩学Kotlin做Android应用
牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...
- 基于jQuery适合做图片类网站的特效
分享一款基于jquery适合做图片类网站的特效.这是一款鼠标经过图片滑动弹出标题效果代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="c ...
- C++第11周(春)项目3 - 点类派生直线类
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目3 - 点类派生直线类]定义点类Poin ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- html5-3 html5标签(热点地图如何实现)(边学边做)
html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl 自定义列表dt 自定义标题dd 自定义列表内容 2. ...
- 小白学Java:File类
目录 小白学Java:File类 不同风格的分隔符 绝对与相对路径 File类常用方法 常用构造器 创建方法 判断方法 获取方法 命名方法 删除方法 小白学Java:File类 我们可以知道,存储在程 ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
- 编写高质量代码改善C#程序的157个建议[勿选List<T>做基类、迭代器是只读的、慎用集合可写属性]
前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议23.避免将List<T>作为自定义集合类的基 ...
随机推荐
- 【论文阅读】BEVFormer: Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal
论文题目:BEVFormer: Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal ...
- Mac制作U盘启动项
导读 鄙人刚买回来的电脑,自带系统版本:10.14.5(19款的),有一天,提示系统升级,升到了10.15.4,从此落下了后遗症,mac系统密码输入完之后,读条读到2/3的时候,会黑屏闪一下,百思不得 ...
- Python代码学习
1.生成四位数字字母验证码,大小写字母随机 import random if __name__ =="__main__": #四位数字字母验证码的生成 checkcode=&quo ...
- 高程读后感(四)— 关于BOM本人容易忽略的知识点总结
目录 window对象 window对象上属性及方法 超时调用setTimeout和间歇调用setInterval BOM location对象及其位置操作 history对象 window对象 wi ...
- Django日期字段默认值default=timezone.now
如果你确实希望默认值是当前日期和时间,Django 提供了一个方便的函数 django.utils.timezone.now 来实现这一目的. 你可以这样调整你的模型,以使用当前日期和时间作为默认值: ...
- [oeasy]python0015_键盘改造_将esc和capslock对调_hjkl_移动_双手正位
键盘改造 回忆上次内容 上次练习了复制粘贴 按键 作用 <kbd>y</kbd><kbd>y</kbd> 复制光标行代码 到剪贴板 <kbd> ...
- abc--cf训练日常总结
ABC 最近遇到好多思维和位运算的题目不会做,特地过来总结一些小小的知识点. 思维题目 https://atcoder.jp/contests/abc353/tasks/abc353_c 这道题目要求 ...
- 数组的创建-数组-C
数组内存是连续的 数组是一个整体,它的内存是连续的:也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙.下图演示了int a[4];在内存中的存储情形: 「数组内存是连续的」这一点很重要,所以 ...
- 如何用 WinDbg 调试Linux上的 .NET程序
一:背景 1. 讲故事 最新版本 1.2402.24001.0 的WinDbg真的让人很兴奋,可以将自己伪装成 GDB 来和远程的 GDBServer 打通来实现对 Linux 上 .NET程序进行调 ...
- electron安装成功记录
1.登录官网查看当前最新版本对应的node,注意这里不要看php那个汉化的,他那个是老版本的,node对不上 2.nvm安装一个新的node 3.使用cnpm安装(npm安装还是报错了,记得删node ...