边学边做Manim中垂线的做法

今天我们来学习一下 Manim 中如何过直线外一点做一条直线的垂线,其实很多时候,Manim中的直线就是一条线段,如果没有特殊的设置,就是由两个点确定的一条线段,过一点做已知直线的垂线,用到了新的几何函数方法get_projection()

1.代码示例

get_projection()Manim 中一个非常重要的几何方法,用于计算一个点在直线(或线段)上的投影(垂足)。我们先来看代码,

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
from manim import *

class PerpendicularLine1(Scene):
def construct(self):
# 创建一条线段
line = Line(start=LEFT*2, end=RIGHT*2, color=BLUE)
point = UP + RIGHT*0.5 # 外部一点

# 找到在线段上的投影点
projection = line.get_projection(point)

# 创建垂线
perpendicular = DashedLine(start=point, end=projection, color=RED)

# 标记直角符号 - 明确指定象限
# quadrant参数: (1,1) = 第一象限, (-1,-1) = 第二象限等
right_angle = RightAngle(
line1=line,
line2=perpendicular,
length=0.3,
color=YELLOW,
quadrant=(1, -1) # 根据你的需要调整
)

self.play(Create(line), Create(Dot(point, color=GREEN)))
self.play(Create(perpendicular))
self.play(Create(right_angle))
self.wait()

来看代码的演示效果

2.关键点

  1. get_projection():获取点在直线上的投影(垂足)
  2. DashedLine():创建虚线,适合表示辅助线
  3. RightAngle():直接创建直角标记
  4. 数学原理:使用向量投影公式计算垂足

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
from manim import *

class PerpendicularLine2(Scene):
def construct(self):
# 创建一条线段
line = Line(start=LEFT*2, end=UP*2, color=BLUE)
point = UP + RIGHT*0.5 # 外部一点

# 找到在线段上的投影点
projection = line.get_projection(point)

# 创建垂线
perpendicular = DashedLine(start=point, end=projection, color=RED)

# 标记直角符号 - 明确指定象限
# quadrant参数: (1,1) = 第一象限, (-1,-1) = 第二象限等
right_angle = RightAngle(
line1=line,
line2=perpendicular,
length=0.3,
color=YELLOW,
quadrant=(1, -1) # 根据你的需要调整
)

self.play(Create(line), Create(Dot(point, color=GREEN)))
self.play(Create(perpendicular))
self.play(Create(right_angle))
self.wait()

然后我们来看视频效果

4.知识总结

看来 get_projection()函数还是非常强大的,

1
projection = line.get_projection(point)

一般的过一点做已知直线的垂线还是够用的,但是需要注意的,就是直角标识所在的象限,需要手动的调整所在的象限位置。对于两条相交直线,它们形成四个角,每个角都可以画直角符号:

1
2
3
4
5
6
7
8
9
10
         line2

|
| 角2 | 角1
| |
----------+---------+---------> line1
| |
| 角3 | 角4
| |

line1 为x轴正方向,line2 为y轴正方向:

  1. 角1line1正方向与line2正方向之间 → quadrant=(1, 1)
  2. 角2line1负方向与line2正方向之间 → quadrant=(-1, 1)
  3. 角3line1负方向与line2负方向之间 → quadrant=(-1, -1)
  4. 角4line1正方向与line2负方向之间 → quadrant=(1, -1)

以后有机会再重新计算,注意他和笛卡尔坐标系的象限规律是一致的,都是逆时针角度进行计算。