Short introduction to Manim: Difference between revisions

From wikiluntti
Line 114: Line 114:


== Camera ==
== Camera ==
Animate camera movement while animating sine wave (plane wave).


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Line 141: Line 143:
</syntaxhighlight >
</syntaxhighlight >


phi Vertical angle (elevation)
The camera parameters
theta Horizontal angle (azimuth/orbit angle)
*phi Vertical angle (elevation)
focal_distance Perspective strength
*theta Horizontal angle (azimuth/orbit angle)
gamma Roll (rotation around viewing axis)
*focal_distance Perspective strength
zoom Zoom factor
*gamma Roll (rotation around viewing axis)
*zoom Zoom factor

Revision as of 19:14, 6 June 2026

Introduction

Manim or manimgl.

Virtual engine

python -m venv .
source bin/activate

For faster rendering use smaller resolution resolution=(15,15) and smaller fps rate

manim -pql --fps 10 ma_animatedplanewave.py PlaneWave3D

Some short manim scrips to generate easy visualizations.

manim -pql bez2.py
manim -pqh bez2.py BezierSplineExample

   --format=png
   f: open the directory/ folder
   i: generate gif file
   p: play
  qm, qh, qk: quality (low, high, 4k)
  qh: high quality
   s: save last frame
   t: transparent background
config.background_color = WHITE

Add a background image

bg_image = ImageMobject("bg_P5.png")
self.add( bg_image )

Add the background plane

plane = NumberPlane( background_line_style={
                "stroke_color": BLACK,
                "stroke_width": 4,
                "stroke_opacity": 1
            },
            x_range=[-10, 10, 1],
            y_range=[-10, 10, 1],
                            )
self.add( plane )

Install Manim on Arch Linux

Pip is not working on a virtual environment. However use uv to install it. That works (on Sep 2024):

uv pip install manim

It is now installed on virtual environment, but the global system is not affected (not working outside virtual environment).

BG plane

       number_plane = NumberPlane(
            background_line_style={
                "stroke_color": TEAL,
                "stroke_width": 1,
                "stroke_opacity": 0.2
            }
        )
        self.add(number_plane)

Bezier curve

Animated bezier curve with two points:

https://github.com/markkuleino/manim/blob/main/FLL_CC0_bezier.py

See tutorial on Bezier Curves https://pomax.github.io/bezierinfo/ and the interactive tutorial https://www.jasondavies.com/animated-bezier/

Heat engine


Paths

https://github.com/Elteoremadebeethoven/AnimationsWithManim/blob/master/English/extra/faqs/paths.md

  • Show Points
  • Path as corners
  • Path smoothly
  • Bezier points of a path
  • Change path style


Lines

https://github.com/markkuleino/manim/blob/main/FLL_CC2_m13b.py

Camera

Animate camera movement while animating sine wave (plane wave).

surface = always_redraw(
     lambda: Surface(
         lambda u, v: np.array([ u, v, np.sin(u - phase.get_value()) ]),
         u_range=[-50, 50],
         v_range=[-5, 5],
         resolution=(15, 15),
         fill_opacity=0.8,
         #checkerboard_colors=[ BLUE_D, BLUE_E, ],
     ).set_fill_by_value(
         axes=axes,
         colors=[ (BLUE_E, -1), (BLUE, 0), (YELLOW, 1), ]
    )
)

phi, theta, focal_distance, gamma, zoom = self.camera.get_value_trackers()

#1. Zoom away
self.play(
   zoom.animate.set_value(0.5),
   phase.animate.set_value(8 * np.pi),
   run_time=10,
   rate_func=linear,
)

The camera parameters

  • phi Vertical angle (elevation)
  • theta Horizontal angle (azimuth/orbit angle)
  • focal_distance Perspective strength
  • gamma Roll (rotation around viewing axis)
  • zoom Zoom factor