边学边做Manim中直角的画法

Manim中Elbow 是一个表示直角连接线的图形类,常用于示意图、流程图或需要显示垂直连接的情况。毋庸置疑的,这个形体直接继承自VMobject,也具有属性调控代码,下面我们来看具体的举例。

1.简单代码

1
2
3
4
5
6
7
8
from manim import *

class ElbowExample(Scene):
def construct(self):
# 创建一个Elbow(默认角度为0,即向右上方)
elbow = Elbow()
self.play(Create(elbow))
self.wait()

这段代码就是创建一个简单的直角,属性都是默认的属性值,下面来看演示效果

2.属性介绍

1
2
3
4
5
Elbow(
width=0.2, # 每个臂的长度
angle=0, # 旋转角度(弧度)
**kwargs # 其他VMobject参数
)

从当前来看,Elbow仅仅是两个属性值,一个是宽度width,直角边长,另一个是角度angle,指的是旋转的角度。先来看边长的改变

3.不同的边长

1
2
3
4
5
6
7
8
from manim import *

class ElbowExampleWidth(Scene):
def construct(self):
# 创建一个Elbow(默认角度为0,即向右上方)
elbow = Elbow(width=1)
self.play(Create(elbow))
self.wait()

在这里我们添加了一个width属性值,改变了直角边长,来看下面的演示效果

相比较与没有width的属性值,直角边明显变大。

4.不同角度

1
2
3
4
5
6
7
8
from manim import *

class ElbowExampleAngle(Scene):
def construct(self):
# 创建一个Elbow(默认角度为0,即向右上方)
elbow = Elbow(width=1,angle=PI/2)
self.play(Create(elbow))
self.wait()

在这里我们添加了一个angle角度值,先来看一下演示效果

从演示效果来看,在Manim中,Elbow的旋转是逆时针方向,这与Manim和数学中角度系统的标准一致。下面来看一个复杂一点的图形,看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from manim import *
from os import system

class geometry(Scene):
def construct(self):
colors = [BLUE, RED, GREEN, GREY_A]
elbows = []

# 创建所有图形(不显示)
for i in range(4):
elbow = Elbow(
width=3.,
angle=i * PI / 2.,
color=colors[i]
)
elbows.append(elbow)

# 一次性显示所有图形
self.play(*[Create(elbow) for elbow in elbows], run_time=1.5)
self.wait(2)

借助一个循环,创建四个颜色的直角,来看效果

5.与直角标识的区别

是不是很有意思,也有朋友说这个Elbow可以用来当做直角标识,其实在Manim中,有专门的直角标识符号,RightAngle,感兴趣的朋友可以看一下我的另一篇文章:Manim中几何作图时如何添加直角标识,里面有详细介绍。

1
right_angle = RightAngle(line1, line2, quadrant=(-1,1), color=RED)

在两条线的交点位置,第二象限绘制直角符号,有什么不清楚的地方,大家可以看文章记录,我也正在学习之中。