用manim实现内燃机引擎的活塞,连杆和曲柄的模拟运动【上】-优快云博客通过上面的内容可以基本理解该做的运动模型。接下来进一步优化并接近实际的模型把。
这是实际运动
![]() |
![]() |
运动模拟图 |
接下来展示一下该代码
from manim import * # 导入Manim库中的所有内容,包括对象、动画等
import random # 导入随机数生成模块
class MechanismEngine06(Scene): # 定义一个名为MechanismEngine06的动画场景
def construct(self): # 定义构造方法,创建场景内的对象
self.camera.background_color = "#003311" # 设置场景背景色为深绿色
# 创建固定点 A
point_A = AnnotationDot(point=np.array([0, -2, 0]), color=RED, radius=0.1, stroke_width=15, stroke_color=WHITE, fill_color=RED)
# 创建一个注释点 A,位置为(0, -2, 0),颜色为红色,半径和边框宽度设置,在场景中添加这个点
self.add(point_A)
# 创建一个圆,圆心在 A,半径为 0.85
radius = 0.85 # 定义圆的半径为0.85
circle = Circle(radius=radius, color=WHITE) # 创建一个白色的圆
circle.move_to(point_A.get_center()) # 将圆心移动到点 A 的位置
circle01 = DashedVMobject(circle) # 创建一个虚线圆
self.add(circle01) # 在场景中添加该虚线圆
# 创建点 B,初始位置在圆的右侧
point_B = AnnotationDot(point=circle.point_at_angle(0), color=BLUE, radius=0.1, stroke_width=15, stroke_color=WHITE, fill_color=RED)
# 创建一个注释点 B,位置在圆的右边,颜色为蓝色,设置边框和填充属性,并将其添加到场景中
self.add(point_B)
# 创建点 C,初始位置在 (0, 3, 0)
point_C = AnnotationDot(point=np.array([0, 3, 0]), color=GREEN, radius=0.075, stroke_width=15, stroke_color=WHITE, fill_color=RED)
# 创建一个点 C,位置为(0, 3, 0),颜色为绿色,并添加到场景中
# self.add(point_C) # 此行被注释掉,意思是不显示该点
# 创建长度合适的有效杆 AB 和 BC
rod_AB = Line(start=point_A.get_center(), end=point_B.get_center(), color=YELLOW, stroke_width=12)
# 创建线段 AB
rod_BC = Line(start=point_B.get_center(), end=point_C.get_center(), color=PURPLE, stroke_width=12)
# 创建线段 BC
# self.add(rod_AB, rod_BC) # 将杆添加到场景中,此行被注释掉
# 动画设置
run_time = 8 # 动画总时长为8秒
total_frames = 100 # 总帧数设置为100帧
angle_step = 2 * PI / total_frames # 计算每一帧的角度变化,确保完整转动360度
# 创建一个随 C 点移动的长方形
rectangle = Rectangle(width=