manimの作法 その25

#概要

manimの作法、調べてみた。
animation、全部使ってみた。

#サンプルコード

```
from manimlib.imports import *

def shift_up(mobject):
	return mobject.shift(2 * UP)

class CustomSquare(Square):
	def custom_method(self, color):
		self.set_color(color)
		self.shift(2 * UP)
		return self

class test(Scene):
	def construct(self):
		square = Square()
		anno = TextMobject("Show Creation")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.play(ShowCreation(square))
		self.remove(square)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Uncreate")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(Uncreate(square))
		self.remove(square)
		self.remove(anno)

		square = Square(fill_opacity = 1.0)
		anno = TextMobject("Draw border then fill")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(DrawBorderThenFill(square))
		self.remove(square)
		self.remove(anno)

		text = TextMobject("Hello World")
		anno = TextMobject("Write")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.play(Write(text))
		self.remove(text)
		self.remove(anno)

		points = []
		for x in range(-5, 6):
			points.append(Dot(point = np.array([x, 0.0, 0.0])))
		group = VGroup(*points)
		anno = TextMobject("Show submobjects")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.play(ShowIncreasingSubsets(group, run_time = 3.0))
		self.remove(group)
		self.remove(anno)

		points = []
		for x in range(-5, 6):
			points.append(Dot(point = np.array([x, 0.0, 0.0])))
		group = VGroup(*points)
		anno = TextMobject("Show submobjects one by one")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.play(ShowSubmobjectsOneByOne(group, run_time = 3.0))
		self.remove(group)
		self.remove(anno)

		square = Square()
		circle = Circle()
		anno = TextMobject("Transform")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(Transform(square, circle))
		square.generate_target()
		square.target.move_to(2 * UP)
		self.play(MoveToTarget(square))
		self.remove(square)
		self.remove(circle)
		self.remove(anno)

		square = Square()
		circle = Circle()
		anno = TextMobject("Replacement Transform")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ReplacementTransform(square, circle))
		circle.generate_target()
		circle.target.move_to(2 * UP)
		self.play(MoveToTarget(circle))
		self.remove(square)
		self.remove(circle)
		self.remove(anno)

		square = Square()
		circle = Circle()
		anno = TextMobject("Transform from copy")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(TransformFromCopy(square, circle))
		self.remove(circle)
		self.wait(2)
		self.remove(square)
		self.remove(circle)
		self.remove(anno)

		square = Square()
		circle = Circle()
		anno = TextMobject("Clockwise transform")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ClockwiseTransform(square, circle))
		self.remove(square)
		self.remove(circle)
		self.remove(anno)

		square = Square()
		circle = Circle()
		anno = TextMobject("Counterclockwise transform")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(CounterclockwiseTransform(square, circle))
		self.remove(square)
		self.remove(circle)
		self.remove(anno)

		square = Square()
		square.generate_target()
		square.target.shift(2 * UP)
		anno = TextMobject("Move to target")
		anno.shift(2 * DOWN)
		self.add(square)
		self.play(MoveToTarget(square))
		self.remove(square)
		self.remove(anno)

		square = CustomSquare()
		anno = TextMobject("Apply method")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ApplyMethod(square.custom_method, RED))
		self.remove(square)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Apply pointwise function")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ApplyPointwiseFunction(lambda x: 2 * x + UP, square))
		self.remove(square)
		self.remove(anno)

		square = Square(fill_opacity = 1)
		anno = TextMobject("Fade to color")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(FadeToColor(square, RED))
		self.remove(square)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Scale in place")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ScaleInPlace(square, 0.5))
		self.remove(square)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Shrink to center")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ShrinkToCenter(square))
		self.remove(square)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Restore")
		anno.shift(2 * DOWN)
		self.add(anno)
		square.save_state()
		circle = Circle()
		self.play(Transform(square, circle))
		square.generate_target()
		square.target.shift(2 * UP)
		self.play(MoveToTarget(square))
		self.play(Restore(square))
		self.remove(square)
		self.remove(circle)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Apply Function")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ApplyFunction(shift_up, square))
		self.remove(square)
		self.remove(anno)

		mat = [[1.0, 0.5], [1.0, 0.0]]
		square = Square()
		anno = TextMobject("Apply Matrix")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ApplyMatrix(mat, square))
		self.remove(square)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Apply Complex Function")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(ApplyComplexFunction(lambda complex_num: complex_num + 2 * np.complex(0, 1), square))
		self.remove(square)
		self.remove(anno)

		square = Square()
		circle = Circle()
		circle.shift(2 * UP + 2 * RIGHT)
		triangle = Triangle()
		triangle.shift(2 * UP + 2 * LEFT)
		anno = TextMobject("Cyclic Replace")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.add(circle)
		self.add(triangle)
		self.play(CyclicReplace(square, circle, triangle))
		self.remove(square)
		self.remove(circle)
		self.remove(triangle)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Fade In")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.play(FadeIn(square))
		self.remove(square)
		self.remove(anno)

		square = Square()
		anno = TextMobject("Fade Out")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.add(square)
		self.play(FadeOut(square))
		self.remove(square)
		self.remove(anno)

		square = Square()
		for label, edge in zip(["LEFT", "RIGHT", "UP", "DOWN"], [LEFT, RIGHT, UP, DOWN]):
			anno = TextMobject(f"Fade In from {label}")
			anno.shift(2 * DOWN)
			self.add(anno)
			self.play(FadeInFrom(square, edge))
			self.remove(anno, square)

		square = Square()
		for label, edge in zip(["LEFT", "RIGHT", "UP", "DOWN"], [LEFT, RIGHT, UP, DOWN]):
			anno = TextMobject(f"Fade Out and shift {label}")
			anno.shift(2 * DOWN)
			self.add(anno)
			self.play(FadeOutAndShift(square, edge))
			self.remove(anno, square)

		square = Square()
		for factor in [0.1, 0.5, 0.8, 1, 2, 5]:
			anno = TextMobject(f"Fade In from large scale\_factor={factor}")
			anno.shift(2 * DOWN)
			self.add(anno)
			self.play(FadeInFromLarge(square, scale_factor = factor))
			self.remove(anno, square)

		square = Square()
		for i in range(-6, 7, 2):
			anno = TextMobject(f"Fade In from point {i}")
			anno.shift(2 * DOWN)
			self.add(anno)
			self.play(FadeInFromPoint(square, point = i))
			self.remove(anno, square)

		for label, edge in zip(["LEFT", "RIGHT", "UP", "DOWN"], [LEFT, RIGHT, UP, DOWN]):
			anno = TextMobject(f"Grow from {label} edge")
			anno.shift(2 * DOWN)
			self.add(anno)
			square = Square()
			self.play(GrowFromEdge(square, edge))
			self.remove(anno, square)

		square = Square()
		anno = TextMobject("Grow from center")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.play(GrowFromCenter(square))
		self.remove(square)
		self.remove(anno)

		square = Square()
		for diag in [UP + LEFT, UP + RIGHT, DOWN + LEFT, DOWN + RIGHT]:
			self.play(FadeInFrom(square, diag))
		self.remove(square)

		text = TextMobject(r"Hello World !\\This should be written word by word.")
		anno = TextMobject("Add text word by word")
		anno.shift(2 * DOWN)
		self.add(anno)
		self.play(AddTextWordByWord(text, run_time = 5.0))
		self.remove(text)
		self.remove(anno)


```

#生成した動画

https://www.youtube.com/watch?v=dkqdqlS73dU


以上。