
今天我们来学习一下 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.关键点
- get_projection():获取点在直线上的投影(垂足)
- DashedLine():创建虚线,适合表示辅助线
- 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
| 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:
line1正方向与line2正方向之间 → quadrant=(1, 1)
- 角2:
line1负方向与line2正方向之间 → quadrant=(-1, 1)
- 角3:
line1负方向与line2负方向之间 → quadrant=(-1, -1)
- 角4:
line1正方向与line2负方向之间 → quadrant=(1, -1)
以后有机会再重新计算,注意他和笛卡尔坐标系的象限规律是一致的,都是逆时针角度进行计算。