manim边学边做–角度标记u6

随笔2个月前发布 多多选择
38 0 0

合集 – manim(33)1.【manim动画教程】– 安装2023-03-282.【manim动画教程】– 基本图形2023-03-293.【manim动画教程】– 坐标系2023-04-104.【manim动画教程】– 文本样式2023-04-075.【manim动画教程】– 文字和公式2023-04-046.【manim动画教程】– 图形样式2023-03-317.【manim动画教程】–相机2023-04-198.【manim动画教程】–高级动画效果2023-04-149.【manim动画教程】–常用动画效果2023-04-1210.【manim】之滚动字幕2022-12-0611.【manim】之圆规动画2023-01-3112.【manim】之目录动画2023-02-2813.manim边学边做–DecimalNumber06-1214.manim边学边做–Integer06-1315.manim边学边做–Variable06-1416.manim边学边做–Title06-2017.manim边学边做–BulletedList06-21:楚门加速器p18.manim边学边做–SingleStringMathTex06-2319.manim边学边做–MathTex06-2820.manim边学边做–Tex07-0121.manim边学边做–Text07-0422.manim边学边做–Paragraph07-0923.manim边学边做–MarkupText07-1024.manim边学边做–Code07-1625.manim边学边做–Matrix07-1726.manim边学边做–Table07-2527.manim边学边做–点08-0928.manim边学边做–圆形类08-1529.manim边学边做–圆弧形08-2030.manim边学边做–直线类08-2231.manim边学边做–带箭头直线09-0232.manim边学边做–曲线类09-0433.manim边学边做–角度标记09-07收起
manim中绘制一个角度其实就是绘制两条直线,本篇介绍的不是绘制角度,而是绘制角度标记

对于锐角钝角角度标记是一个弧,弧的度数与角的度数一样;

对于直角角度标记是一个垂直的拐角。

manim中关于角度标记的模型主要有3个:

Angle:根据两条直线绘制角度标记
RightAngle:根据两条互相垂直的线绘制直角标记
Elbow:不受限于直线,任意方向和大小的直角标记

其中,RightAngle模块继承自Angle

manim边学边做--角度标记u6

角度标记的主要作用是在动画中标记出一些特殊角度,更好的展示数学定理的证明过程。

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)

函数的参数是ABC三个点,

A:角度的起点
B:角度的顶点
C:角度的终点

生成的角度以B为顶点,从点A到点C逆时针旋转。

manim边学边做--角度标记u6

方法get_lines可获取构成角度的两条线,也就是上图中的BABC两条线。

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)

manim边学边做--角度标记u6

3.2. 角度位置

角度标记的位置由两个参数来控制,quadrantother_angle

quadrant参数一共有四种选项:(1, 1)(1, -1)(-1, 1)(-1, -1)

这个参数分两部分,分别表示角度标记在Line1上的起点位置和在Line2上的终点位置

比如下面相交的两条直线,quadrant的第一个值和第二个值分别在Line1Line2上的位置如图。

manim边学边做--角度标记u6

other_angle默认为False,表示绘制角度时从Line1Line2

设置other_angle为True时,绘制角度的顺序相反,从Line2Line1

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)


manim边学边做--角度标记u6

3.3. 角度中的点

Angle中可以加一个点的标记,当一个画面中有很多角度的时候,这个标记可以帮助我们区分不同的角。

通过dot_radiusdot_distancedot_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,
)

manim边学边做--角度标记u6

3.4. 直角标记

最后,还有一个特殊的角度标记–直角标记。

manim中提供了2个模块来标记直角,RightAngleElbow

它们的显示效果差不多,区别在于,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)


manim边学边做--角度标记u6

4. 附件

文中完整的代码放在网盘中了(angle.py),

下载地址: 完整代码 (访问密码: 6872)

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...