一,介绍
内燃机引擎是现代机械设备中一种非常重要的动力装置,其核心部件包括活塞、连杆和曲柄。活塞在气缸内做往复运动,通过连杆与曲柄相连,将往复运动转化为旋转运动,驱动机械设备正常工作。
活塞是内燃机引擎的关键部件之一,它在气缸内作往复运动。当活塞向上运动时,气缸内形成真空,进气门打开,混合气体进入气缸内;当活塞向下运动时,气缸内形成压缩,进气门关闭,同时点火系统点燃混合气体,产生爆炸力推动活塞向上运动。这一过程不断重复,驱动曲柄旋转,输出动力。
连杆是活塞与曲柄间的连接部件,将活塞的往复运动转化为连续旋转运动。连杆一端连接活塞,另一端连接曲柄,当活塞运动时,连杆带动曲柄旋转,实现活塞能量的转换和传递。
曲柄是内燃机引擎中的重要传动部件,其主要作用是将连杆的往复运动转化为旋转运动,输出动力。曲柄由曲轴和连杆轴组成,当连杆带动曲柄旋转时,曲轴转动,驱动机械设备正常运转。
总的来说,活塞、连杆和曲柄之间的协同作用实现了内燃机引擎的正常运转,是内燃机引擎的核心动力传动装置,是现代机械工业发展的重要基础。
二,用manim实现简易动画
首先找到每个运动单元之间的关系。然后进一步进行动画
第一步:找到相关的点
from manim import * # 从manim库导入所有必需的类和函数
class MechanismEngine03(Scene): # 创建一个名为MechanismEngine03的类,继承自Scene类
def construct(self): # 定义构建场景的方法
# 创建固定点A,设置其位置和颜色
point_A = Dot(point=np.array([0, -2, 0]), color=RED) # 在 (0, -2, 0) 处创建一个红色点A
self.add(point_A) # 将点A添加到场景中
# 创建一个圆,圆心在A,半径为1
radius = 1 # 定义圆的半径
circle = Circle(radius=radius, color=BLACK) # 创建一个半径为1,颜色为黑色的圆
circle.move_to(point_A.get_center()) # 将圆心移动到点A的位置
self.add(circle) # 将圆添加到场景中
# 创建点B,初始位置在圆的右侧
point_B = Dot(point=circle.point_at_angle(0), color=BLUE) # 在圆的右侧 (1, 0, 0) 处创建一个蓝色点B
self.add(point_B) # 将点B添加到场景中
# 创建点C,初始位置为 (0, 2, 0)
point_C = Dot(point=np.array([0, 2, 0]), color=GREEN) # 创建一个绿色点C,其初始位置为 (0, 2, 0)
self.add(point_C) # 将点C添加到场景中
# 动画设置
run_time = 8 # 定义整个动画持续的时间为8秒
total_frames = 100 # 定义总帧数为100帧
angle_step = 2 * PI / total_frames # 每帧的角度增量,整个圆周是 2π,除以帧数得到每帧的角度变化
# 旋转点B沿着圆周移动
for frame in range(total_frames): # 遍历每一帧,执行总帧数的动画
angle_B = frame * angle_step # 计算当前帧对应的角度
point_B.move_to(circle.point_at_angle(angle_B)) # 更新点B的位置,沿着圆周的当前角度进行移动
# 根据点B的位置更新点C的位置
point_C.move_to(np.array([0, point_B.get_center()[1] + 2, 0])) # 使点C的位置更新为相对于点B的y坐标加2
# 更新动画
self.play( # 播放动画
point_B.animate.move_to(circle.point_at_angle(angle_B)), # 使点B移动到圆周上的新位置
point_C.animate.move_to(np.array([0, point_B.get_center()[1] + 2, 0])), # 使点C移动到更新后的位置
run_time=run_time / total_frames, # 每帧的动画持续时间为总时间除以帧数
rate_func=linear # 使用线性插值函数
)
self.wait(2) # 动画结束后等待2秒
代码解释
该代码使用Manim库创建一个动画场景,其中有以下几个关键部分:
-
创建点和圆:
- 点A:固定点,作为圆心。
- 圆:以点A为圆心,半径为1。
- 点B:初始位置在圆的右侧(与圆心正对)。
- 点C:初始位置在y=2的位置。
-
动画设置:
- 动画总时间为8秒,总共100帧。
- 根据总帧数计算每帧对应的角度变化。
-
动画循环:
- 每一帧中,计算点B的新位置,并根据点B的位置相对更新点C的位置。
- 使用
self.play
方法来更新点B和点C的位置,并播放动画。
-
动画结束的等待:
- 动画结束时,场景会保持2秒,便于观察最终结果。
这种方式展现了一个简单的机械运动,适合展示线性和周期性运动。
第二部,加连杆结构
该代码使用Manim库创建一个动画,展示一个点B沿着固定圆周旋转,同时更新与之相连的点C和线段AB、BC的运动。
from manim import * # 从manim库导入所有必需的类和函数
class MechanismEngine04(Scene): # 创建一个名为MechanismEngine04的类,继承自Scene类
def construct(self): # 定义构建场景的方法
# 创建固定点A,作为圆心
point_A = Dot(point=np.array([0, -2, 0]), color=RED) # 在 (0, -2, 0) 处创建一个红色点A
self.add(point_A) # 将点A添加到场景中
# 创建一个圆,圆心在A,半径为1
radius = 1 # 定义圆的半径
circle = Circle(radius=radius, color=BLACK) # 创建一个半径为1,颜色为黑色的圆
circle.move_to(point_A.get_center()) # 将圆心移动到点A的位置
self.add(circle) # 将圆添加到场景中
# 创建点B,初始位置在圆的右侧
point_B = Dot(point=circle.point_at_angle(0), color=BLUE) # 在圆的右侧 (1, 0, 0) 处创建一个蓝色点B
self.add(point_B) # 将点B添加到场景中
# 创建点C,初始位置为 (0, 2, 0)
point_C = Dot(point=np.array([0, 2, 0]), color=GREEN) # 创建一个绿色点C,其初始位置为 (0, 2, 0)
self.add(point_C) # 将点C添加到场景中
# 创建线段AB和BC
line_AB = Line(start=point_A.get_center(), end=point_B.get_center(), color=YELLOW) # 创建一条从点A到点B的黄色线段
line_BC = Line(start=point_B.get_center(), end=point_C.get_center(), color=PURPLE) # 创建一条从点B到点C的紫色线段
self.add(line_AB, line_BC) # 将线段AB和BC添加到场景中
# 动画设置
run_time = 8 # 定义整个动画持续的时间为8秒
total_frames = 100 # 定义总帧数为100帧
angle_step = 2 * PI / total_frames # 每帧的角度增量,整个圆周是 2π,除以帧数得到每帧的角度变化
# 旋转点B沿着圆周移动
for frame in range(total_frames): # 遍历每一帧,执行总帧数的动画
angle_B = frame * angle_step # 计算当前帧对应的角度
point_B.move_to(circle.point_at_angle(angle_B)) # 更新点B的位置,沿着圆周的当前角度进行移动
# 根据点B的位置更新点C的位置
point_C.move_to(np.array([0, point_B.get_center()[1] + 2, 0])) # 使点C的位置更新为相对于点B的y坐标加2
# 更新线段AB和BC
line_AB.put_start_and_end_on(point_A.get_center(), point_B.get_center()) # 更新线段AB的起点和终点
line_BC.put_start_and_end_on(point_B.get_center(), point_C.get_center()) # 更新线段BC的起点和终点
# 更新动画
self.play( # 播放动画
point_B.animate.move_to(circle.point_at_angle(angle_B)), # 使点B移动到圆周上的新位置
point_C.animate.move_to(np.array([0, point_B.get_center()[1] + 2, 0])), # 使点C移动到更新后的位置
line_AB.animate.put_start_and_end_on(point_A.get_center(), point_B.get_center()), # 更新线段AB的动画
line_BC.animate.put_start_and_end_on(point_B.get_center(), point_C.get_center()), # 更新线段BC的动画
run_time=run_time / total_frames, # 每帧的动画持续时间为总时间除以帧数
rate_func=linear # 使用线性插值函数
)
self.wait(2) # 动画结束后等待2秒,以便观察结果
代码解释
该代码使用Manim库创建了一个动态的机械运动场景,其中包含以下几个关键部分:
-
创建点和圆:
- 点A:作为圆心,固定在坐标(0, -2, 0)的位置。
- 圆:以点A为中心,半径为1,表示一个固定的圆周。
- 点B:初始位置在圆的右侧(坐标(1, 0, 0)),表示沿圆周移动的点。
- 点C:初始位置在(0, 2, 0),表示相对于点B的固定位置。
-
创建线段:
- 线段AB:连接点A和点B,颜色为黄色。
- 线段BC:连接点B和点C,颜色为紫色。
-
动画设置:
- 动画总时间为8秒,分为100帧。
- 计算每帧的角度增量,以便在动画中平滑地旋转点B。
-
动画循环:
- 在每一帧中,计算点B的新位置,并根据点B的位置更新点C的位置。
- 更新线段AB和BC的起止点,以确保它们始终连接相应的点。
- 使用
self.play
方法来更新点B、点C和线段AB、BC的位置,并播放动画。
-
动画结束的等待:
- 动画结束后,场景保持2秒,便于观察最终结果。
这个场景展示了一个简单的机械运动,点B沿着圆周旋转,点C根据点B的位置进行相对移动,同时线段AB和BC动态更新,形成了一个直观的运动演示。