manim边学边做--角度标记
manim
中绘制一个角度其实就是绘制两条直线,本篇介绍的不是绘制角度,而是绘制角度标记。
对于锐角和钝角,角度标记是一个弧,弧的度数与角的度数一样;
对于直角,角度标记是一个垂直的拐角。
manim
中关于角度标记的模型主要有3个:
Angle
:根据两条直线绘制角度标记RightAngle
:根据两条互相垂直的线绘制直角标记Elbow
:不受限于直线,任意方向和大小的直角标记
其中,RightAngle
模块继承自Angle
。
角度标记的主要作用是在动画中标记出一些特殊角度,更好的展示数学定理的证明过程。
1. 主要参数
Angle
模块是通用的角度标记,它的主要参数有:
参数名称 | 类型 | 说明 |
---|---|---|
line1 | Line | 构成角度的第一条线 |
line2 | Line | 构成角度的第二条线 |
radius | float | 角度标记的半径 |
quadrant | Point2D | 此参数控制角度标记显示在哪个位置 |
other_angle | bool | True :顺时针从line1到line2False :逆时针从line1到line2 |
dot | bool | 是否在角度标记中显示一个点 |
dot_radius | float | 点的半径 |
dot_distance | float | 点到圆弧(角度标记)的相对距离 |
dot_color | Color | 点的颜色 |
elbow | bool | 是否显示成直角的形状 |
后面在使用示例中演示这些参数的使用。
RightAngle
模块继承自Angle
,除了上面Angle
的参数之外,还有一个自己特有的参数。
参数名称 | 类型 | 说明 |
---|---|---|
length | float | 标记的大小 |
Elbow
模块与上面两个不一样,它不是根据两条线来生成角度标记。
参数名称 | 类型 | 说明 |
---|---|---|
width | float | 标记的大小 |
angle | float | 标记朝向那个方向 |
Elbow
的形状和RightAngle
是一样的。
2. 主要方法
Angle
模块的方法主要有3个:
名称 | 说明 |
---|---|
from_three_points | 根据三个点来生成角度标记 |
get_lines | 获取生成角度的两条线 |
get_value | 获取角度的值 |
一般我绘制一个角度标记时,都是根据两条相交的线来确定角度位置的。
通过from_three_points
方法,可以根据任意3个点来生成一个角度标记。
A = np.array([2, -1, 0])
B = np.array([0, 0, 0])
C = np.array([1, 1, 0])
angle = Angle.from_three_points(A, B, C)
函数的参数是A
,B
,C
三个点,
- A:角度的起点
- B:角度的顶点
- C:角度的终点
生成的角度以B
为顶点,从点A到点C逆时针旋转。
方法get_lines
可获取构成角度的两条线,也就是上图中的BA
,BC
两条线。
lines = angle.get_lines()
最后,get_value
方法,可以实时得到当前角度的值,值可以是度数,也可以是弧度。
print(f"角度:{angle.get_value(degrees=True)}")
print(f"弧度:{angle.get_value()}")
# 运行结果
角度:71.56505117707799
弧度:1.2490457723982544
3. 使用示例
3.1. 角度大小
因为角度标记Angle
是一个弧形,所以角度的大小通过参数radius
(半径)来调整。
line1 = Line(LEFT, RIGHT)
line2 = Line(DOWN, UP)
Angle(line1, line2)
Angle(line1, line2, radius=0.2)
Angle(line1, line2, radius=0.5)
Angle(line1, line2, radius=0.8)
3.2. 角度位置
角度标记的位置由两个参数来控制,quadrant
和other_angle
。
quadrant
参数一共有四种选项:(1, 1)
或(1, -1)
或(-1, 1)
或(-1, -1)
这个参数分两部分,分别表示角度标记在Line1
上的起点位置和在Line2
上的终点位置。
比如下面相交的两条直线,quadrant
的第一个值和第二个值分别在Line1
和Line2
上的位置如图。
other_angle
默认为False
,表示绘制角度时从Line1
到Line2
;
设置other_angle
为True时,绘制角度的顺序相反,从Line2
到Line1
。
l1 = Line(
LEFT + (1 / 3) * UP,
RIGHT + (1 / 3) * DOWN,
)
l2 = Line(
DOWN + (1 / 3) * RIGHT,
UP + (1 / 3) * LEFT,
)
Angle(l1, l2)
Angle(l1, l2, quadrant=(1, -1))
Angle(l1, l2, quadrant=(-1, 1))
Angle(l1, l2, quadrant=(-1, -1))
Angle(l1, l2, other_angle=True)
Angle(l1, l2, quadrant=(1, -1), other_angle=True)
Angle(l1, l2, quadrant=(-1, 1), other_angle=True)
Angle(l1, l2, quadrant=(-1, -1), other_angle=True)
3.3. 角度中的点
Angle
中可以加一个点的标记,当一个画面中有很多角度的时候,这个标记可以帮助我们区分不同的角。
通过dot_radius
,dot_distance
和dot_color
等参数,可以调整点的大小,位置和颜色。
line1 = Line(
LEFT / 2,
RIGHT / 2,
)
line2 = Line(
DOWN / 2,
UP / 2,
)
Angle(
line1,
line2,
dot=True,
dot_radius=0.02,
dot_color=RED,
)
Angle(
line1,
line2,
dot=True,
dot_radius=0.08,
dot_color=BLUE,
)
Angle(
line1,
line2,
dot=True,
dot_distance=0.2,
dot_color=GREEN,
)
Angle(
line1,
line2,
dot=True,
dot_distance=0.8,
dot_color=YELLOW,
)
3.4. 直角标记
最后,还有一个特殊的角度标记--直角标记。
manim
中提供了2个模块来标记直角,RightAngle
和Elbow
。
它们的显示效果差不多,区别在于,RightAngle
需要根据两条线来生成,
而Elbow
更加灵活一些,它可以在任意位置生成直角标记。
line1 = Line(
LEFT / 2,
RIGHT / 2,
)
line2 = Line(
DOWN / 2,
UP / 2,
)
RightAngle(
line1,
line2,
length=0.2,
)
RightAngle(
line1,
line2,
length=0.4,
)
RightAngle(
line1,
line2,
quadrant=(1, -1),
)
RightAngle(
line1,
line2,
quadrant=(-1, -1),
)
Elbow(width=0.5)
Elbow(width=1)
Elbow(width=1, angle=PI / 2)
Elbow(width=1, angle=5 * PI / 4)
4. 附件
文中完整的代码放在网盘中了(angle.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 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- 如何做一个标记为安全的ACTIVEX控件
1.添加辅助函数控件的基本结构中含有xxApp,xxCtrl,xxPropPage三个类.找到xxApp的头文件,添加三个辅助函数.// Helper functionto create a comp ...
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
- transient 做个标记
import java.io.*; import java.util.*; public class Logon implements Serializable { /** * */ private ...
- 如何在WebGL全景图上做标记
WebGL可以用来做3D效果的全景图呈现,例如故宫的全景图.但有时候我们不仅仅只是呈现全景图,还需要增加互动.故宫里边可以又分了很多区域,例如外朝中路.外朝西路.外朝东路等等.我们需要在3D图上做一些 ...
随机推荐
- sshd管理限制登录配置(centos7.9)
背景情况:为了公网的主机,被无限的密码爆破,需要对主机的ssh进行安装加固 1.首先要禁用root的远程登录和修改ssh的端口 vi /etc/ssh/sshd_config# 修改端口,不适用22端 ...
- 权威技术社区InfoQ列网易数帆为年度最有价值技术团队,技术实力获广泛认可
近日,权威技术社区InfoQ公布数字化转型技术服务商网易数帆为2020年最有价值技术团队,并被授予"最佳技术社区驱动力奖",认可网易数帆在技术领域的突出成就和实力. Inf ...
- 如何查看Chrome内核版本
Blink Google chrome即谷歌浏览器原来采用的渲染引擎是Webkit,自chrome 28开始,谷歌浏览器放弃了Webkit,改用自主开发的渲染引擎Blink. 所以现在大多数喜欢尝鲜的 ...
- TypeScript 学习笔记 — 接口的使用(六)
目录 一.函数接口参数 二.函数类型接口 三.函数混合类型 四.对象接口(最常用) 确定属性 可选属性 任意属性 只读属性 可索引接口 索引访问符 类接口 接口继承 构造函数类型 type 和 int ...
- [oeasy]python0101_尾声_PC_wintel_8080_诸神的黄昏_arm_riscv
尾声 回忆上次内容 回顾了 ibm 使用开放架构 用 pc兼容机 战胜了 dec 小型机 apple 个人电脑 触击牺牲打 也破掉了 自己 软硬一体全自主的 金身 借助了 各种 软硬件厂商的 力量 最 ...
- 仓颉编程语言技术指南:嵌套函数、Lambda 表达式、闭包
本文分享自华为云社区<[华为鸿蒙开发技术]仓颉编程语言技术指南[嵌套函数.Lambda 表达式.闭包]>,作者:柠檬味拥抱. 仓颉编程语言(Cangjie)是一种面向全场景应用开发的通用编 ...
- Python列表、元组、字典和集合的用法
1.列表 标志符号是[],元素可以修改.删除和新增 1.1 提取元素(索引从0开始计算) testList=['A','B','C',1,'D'] print(testList[1]) #打印索引区间 ...
- 【MybatisPlus】 Field '主键' doesn't have a default value
使用MybatisPlus的 PoMapper执行Insert插入方法报错: 复原场景: 1.PO对象存在主键值(双主键) 2.表中数据为空 3.首次插入 这张表使用的是双主键,发现原因是因为PO设置 ...
- 【Spring-Security】Re08 Thymeleaf权限控制 与 退出功能
一.需要的组件支持: 新版本这里的组件有些问题: https://blog.csdn.net/qq_36488647/article/details/104532754 https://blog.cs ...
- 为wsl ubuntu设置固定IP
参考: https://www.cnblogs.com/lidabo/p/16855858.html https://zhuanlan.zhihu.com/p/515068209 ========== ...