movement¶
- class janim.anims.movement.Homotopy(item: Item, homotopy: Callable[[float, float, float, float], Vect], *, duration: float = 3.0, root_only: bool = False, **kwargs)¶
Bases:
DataUpdaterA function from
(x, y, z, t)to(x', y', z')The range of
tis[0, 1], representing animation progressHomotopyExample ¶
from janim.imports import * class HomotopyExample(Timeline): def construct(self): def homotopy_func(x, y, z, t): return [x * t, y * t, z] square = Square() self.play(Homotopy(square, homotopy_func)) self.forward(0.3)
- class janim.anims.movement.ComplexHomotopy(item: Item, complex_homotopy: Callable[[complex, float], complex], **kwargs)¶
Bases:
HomotopySimilar to
Homotopy, but uses complex numbers to describe coordinatesComplexHomotopyExample ¶
from janim.imports import * class ComplexHomotopyExample(Timeline): def construct(self): def complex_func(z: complex, t: float) -> complex: return interpolate(z, z**3, t) group = Group( Text('Text'), Square(side_length=1), ) group.points.arrange(RIGHT, buff=2) self.play( *[ComplexHomotopy( item, complex_func ) for item in group] ) self.forward(0.3)
- class janim.anims.movement.MoveAlongPath(item: Item, path: VItem, *, root_only: bool = False, **kwargs)¶
Bases:
DataUpdaterMoveAlongPathExample ¶
from janim.imports import * class MoveAlongPathExample(Timeline): def construct(self): line = Line(ORIGIN, RIGHT * Config.get.frame_width, buff=1) dot1 = Dot(color=YELLOW) curve = ParametricCurve( lambda t: [math.cos(t) * t * 0.2, math.sin(t) * t * 0.2, 0], (0, 10, 0.1) ) dot2 = Dot(color=YELLOW) group = Group(line, curve).show() group.points.arrange(DOWN) self.play( MoveAlongPath(dot1, line), MoveAlongPath(dot2, curve), duration=2 ) self.forward(0.3)
- class janim.anims.movement.Follow(item: Points, other: Item, direction: Vect = array([1., 0., 0.]), buff: float = 0.25, aligned_edge: Vect = array([0., 0., 0.]), coor_mask: Iterable = (1, 1, 1), item_root_only: bool = False, **kwargs)¶
Bases:
GroupUpdater[Points]FollowExample ¶
from janim.imports import * class FollowExample(Timeline): def construct(self): dot = Dot(RIGHT * 2).show() txt = Text('dot').show() txt.points.next_to(dot, DOWN) self.forward() self.play( Succession( Rotate(dot, PI * 3 / 2, about_point=ORIGIN), dot.anim.points.shift(UP * 4), duration=3 ), Follow(txt, dot, DOWN, duration=3), ) self.forward()