%%manim -qm CircleToSquare
class CircleToSquare(Scene):
def construct(self):
p1 = RegularPolygram(9, density=1, color=BLUE)
txt1 = Text("density=1", font_size=20, color=BLUE)
vg1 = VGroup(p1, txt1).arrange(DOWN, buff=0.2)
p2 = RegularPolygram(9, density=2, color=GREEN)
txt2 = Text("density=2", font_size=20, color=GREEN)
vg2 = VGroup(p2, txt2).arrange(DOWN, buff=0.2)
p3 = RegularPolygram(9, density=3, color=RED)
p3.set_color(color_gradient([BLUE, RED], 10))
txt3 = Text("density=3", font_size=20, color=YELLOW)
vg3 = VGroup(p3, txt3).arrange(DOWN, buff=1.2)
vg = VGroup(vg1, vg2, vg3).arrange(RIGHT)
self.play(Create(vg))
left_square = Square(color=YELLOW).shift(2*LEFT)
left_square.set_color(color_gradient([BLUE, RED], 10))
right_square = Square(color=GREEN, fill_opacity=0.7).shift(2*RIGHT)
self.play(left_square.animate.rotate(PI), Rotate(right_square, angle=PI), run_time=2)
self.wait()
class GradientFillAnimation(Animation):
"""动态渐变填充动画类"""
def __init__(self, mobject, colors, run_time=5, **kwargs):
"""
初始化渐变填充动画
Parameters:
mobject: 要应用动画的物体
colors: 颜色列表,动画将在这些颜色之间进行渐变
run_time: 动画运行时间
"""
self.mobject = mobject
self.colors = colors
self.color_count = len(colors)
super().__init__(mobject, run_time=run_time, **kwargs)