# Camera and 3D Reference ## MovingCameraScene (2D Camera Control) ```python class ZoomExample(MovingCameraScene): def construct(self): circle = Circle(radius=2, color=BLUE) self.play(Create(circle)) # Zoom in self.play(self.camera.frame.animate.set(width=4).move_to(circle.get_top()), run_time=2) self.wait(2) # Zoom back out self.play(self.camera.frame.animate.set(width=14.222).move_to(ORIGIN), run_time=2) ``` ### Camera Operations ```python self.camera.frame.animate.set(width=6) # zoom in self.camera.frame.animate.set(width=20) # zoom out self.camera.frame.animate.move_to(target) # pan self.camera.frame.save_state() # save self.play(Restore(self.camera.frame)) # restore ``` ## ThreeDScene ```python class ThreeDExample(ThreeDScene): def construct(self): self.set_camera_orientation(phi=60*DEGREES, theta=-45*DEGREES) axes = ThreeDAxes() surface = Surface( lambda u, v: axes.c2p(u, v, np.sin(u) * np.cos(v)), u_range=[-PI, PI], v_range=[-PI, PI], resolution=(30, 30) ) surface.set_color_by_gradient(BLUE, GREEN, YELLOW) self.play(Create(axes), Create(surface)) self.begin_ambient_camera_rotation(rate=0.2) self.wait(5) self.stop_ambient_camera_rotation() ``` ### Camera Control in 3D ```python self.set_camera_orientation(phi=70*DEGREES, theta=-45*DEGREES) self.move_camera(phi=45*DEGREES, theta=30*DEGREES, run_time=2) self.begin_ambient_camera_rotation(rate=0.2) ``` ### 3D Mobjects ```python sphere = Sphere(radius=1).set_color(BLUE).set_opacity(0.7) cube = Cube(side_length=2, fill_color=GREEN, fill_opacity=0.5) arrow = Arrow3D(start=ORIGIN, end=[2, 1, 1], color=RED) # 2D text facing camera: label = Text("Label", font_size=30) self.add_fixed_in_frame_mobjects(label) ``` ### Parametric Curves ```python helix = ParametricFunction( lambda t: [np.cos(t), np.sin(t), t / (2*PI)], t_range=[0, 4*PI], color=YELLOW ) ``` ## When to Use 3D - Surfaces, vector fields, spatial geometry, 3D transforms ## When NOT to Use 3D - 2D concepts, text-heavy scenes, flat data (bar charts, time series)