
我们在作几何图像的时候,难免会涉及两线垂直的情况,从几何常识的角度思考,此时我们就需要添加一个垂直符号,更加直观的告诉观察者,这两条线是垂直的位置关系,今天我们就来学习探究这个知识点,如何在相互垂直的两线交点处添加一个垂直符号。在Manim中,RightAngle 是用于绘制直角的几何对象。以下是关于它的详细说明:
1.参数说明
1 2 3 4 5 6 7 8 9
| RightAngle( line1, # 第一条线段 line2, # 第二条线段 length=0.25, # 直角边长度(默认0.25) quadrant=(-1, 1), # 直角所在象限 stroke_width=2, # 线宽 color=WHITE, # 颜色 **kwargs )
|
2.参数分析
从参数来看,直角所在的象限理解起来有点问题,互联网查了查资料,发现这个象限,并不是笛卡尔坐标系的象限,在数学常识中,笛卡尔坐标系的象限是
- 第一象限:x>0, y>0(右上)
- 第二象限:x<0, y>0(左上)
- 第三象限:x<0, y<0(左下)
- 第四象限:x>0, y<0(右下)
可以简单的如下图标识
1 2 3 4 5 6
| # 标准坐标系象限 # ↑ y # II | I # ←---⊕---→ x # III | IV # ↓
|
然而,RightAngle 的象限是相对于两条线段的方向来定义的,而不是绝对坐标系。它的规则是:
1 2 3 4 5 6 7 8 9
| # quadrant=(line1, line2) 表示: # - line1: 沿第一条线段的延伸方向(±1) # - line2: 沿第二条线段的延伸方向(±1)
# 默认实际效果: # quadrant=(1, 1) # 从交点出发,沿line1正方向 + 沿line2正方向 # quadrant=(-1, 1) # 从交点出发,沿line1反方向 + 沿line2正方向 # quadrant=(-1, -1) # 从交点出发,沿line1反方向 + 沿line2反方向 # quadrant=(1, -1) # 从交点出发,沿line1正方向 + 沿line2反方向
|
如果两条直线如坐标系两条轴一样的水平和竖直,那么直角标识的象限有可能和坐标系象限相同,如果两条直线倾斜了角度,就要看直线的走向区分正负,根据两条直线的正负方向来确定直角标识所在的象限。关于两条线的起点和终点,在line对象中有规定
1 2
| line1 = Line(start, end1, color=RED) # 起点→终点1 line2 = Line(start, end2, color=BLUE) # 起点→终点2
|
再例如
1 2 3
| # 创建不同顺序的线段对 line_AB = Line(A, B, color=RED) # A→B line_BA = Line(B, A, color=RED) # B→A(反向)
|
最为便捷的是,RightAngle 会自动计算两条线段的交点,或延长线的交点,不需要特意指明交点的情况,这是它非常智能和方便的地方。
3.示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| from manim import *
class RightAngleExample(Scene): def construct(self): # 创建两条线段的端点 A = LEFT * 2 B = ORIGIN C = UP * 2 # 创建两条线段 line1 = Line(A, B) line2 = Line(B, C) # 创建直角(默认在B点处) right_angle = RightAngle(line1, line2, quadrant=(-1,1), color=RED) # 添加标签(可选,便于理解) dot_A = Dot(A, color=RED) dot_B = Dot(B, color=GREEN) dot_C = Dot(C, color=BLUE) label_A = Text("A", font_size=24).next_to(A, LEFT) label_B = Text("B", font_size=24).next_to(B, DOWN) label_C = Text("C", font_size=24).next_to(C, UP) # 添加到场景 self.play(Create(line1), Create(line2), Create(right_angle)) self.play(Create(dot_A),Create(dot_B),Create(dot_C)) self.play(Create(label_A), Create(label_B), Create(label_C)) self.wait()
|
显示的效果如下
4.实例分析
再来看在直角三角形中创建直角标识
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| from manim import *
class TriangleRightAngle(Scene): def construct(self): # 创建直角三角形 A = LEFT * 2 B = ORIGIN C = UP * 2 triangle = Polygon(A, B, C, color=BLUE) # 在B点处创建直角标记 right_angle = RightAngle( Line(A, B), Line(B, C), length=0.3, quadrant=(-1, 1), color=RED, stroke_width=6 ) self.play(Create(triangle), Create(right_angle)) self.wait(2)
|
显示的实际效果
5.注意事项
1 2 3 4 5 6 7 8 9
| right_angle = RightAngle( line1, line2, length=0.35, quadrant=(-1, 1), color="#FF6B6B", # 自定义颜色 stroke_width=8, # 更粗的线 fill_opacity=0.3, # 添加填充 fill_color=YELLOW # 填充颜色 )
|
这段代码的参数可能更多一些,在这里适当的做一个标记,最后汇总一下直角标识的知识,
- 自动对齐:
RightAngle 会自动计算两条线段的交点作为直角的顶点。
- 更新机制:如果线段移动,
RightAngle 会自动更新位置。
- 非直角情况:即使两条线段不垂直,
RightAngle 仍会绘制,但可能不是数学上的直角。
- 长度单位:
length 参数的单位与 Manim 坐标系单位相同。