movement¶
- class janim.anims.movement.Homotopy(item: Item, homotopy: Callable[[float, float, float, float], Vect], *, duration: float = 3.0, root_only: bool = False, **kwargs)¶
基类:
DataUpdater一个从 (x, y, z, t) 到 (x’, y’, z’) 的函数
t 的取值范围是 [0, 1],表示动画进度
HomotopyExample ¶
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)¶
基类:
Homotopy与 Homotopy 类似,区别是用复数描述坐标
ComplexHomotopyExample ¶
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)¶
基类:
DataUpdater
MoveAlongPathExample ¶
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)¶
基类:
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()