class MobiusRingFixed(ThreeDScene): def construct(self): # 设置相机视角 self.set_camera_orientation(phi=60*DEGREES, theta=30*DEGREES) axes = ThreeDAxes() # 创建莫比乌斯环的网格点 u_values = np.linspace(0, 2*PI, 40) v_values = np.linspace(-0.5, 0.5, 15) # 创建莫比乌斯环的网格 mobius_mesh = VGroup() # 创建经线(u方向) for v in v_values: points = [] for u in u_values: r = 2 + v * np.cos(u/2) x = r * np.cos(u) y = r * np.sin(u) z = v * np.sin(u/2) points.append([x, y, z]) # 创建曲线 curve = VMobject() curve.set_points_smoothly(points) curve.set_color(interpolate_color(BLUE, PURPLE, (v + 0.5))) curve.set_stroke(width=2) mobius_mesh.add(curve) # 创建纬线(v方向) for u in u_values[::4]: # 每隔4个点取一个 points = [] for v in v_values: r = 2 + v * np.cos(u/2) x = r * np.cos(u) y = r * np.sin(u) z = v * np.sin(u/2) points.append([x, y, z]) # 创建曲线 curve = VMobject() curve.set_points_smoothly(points) curve.set_color(WHITE).set_stroke(width=1, opacity=0.5) mobius_mesh.add(curve) # 添加到场景 self.add(axes, mobius_mesh) # 旋转动画 self.begin_ambient_camera_rotation(rate=0.2) self.wait(6) # 添加标签 label = Text("莫比乌斯环", font_size=48, color=YELLOW) label.to_edge(DOWN) self.add_fixed_in_frame_mobjects(label) self.play(Write(label)) self.wait(4) self.stop_ambient_camera_rotation()