144 lines
3.9 KiB
Python
144 lines
3.9 KiB
Python
from manim import *
|
||
|
||
run_time = 0.8
|
||
|
||
|
||
class CubePrismExample(ThreeDScene):
|
||
def construct(self):
|
||
self.attr_example01()
|
||
self.wait()
|
||
self.clear()
|
||
|
||
self.attr_example02()
|
||
self.wait()
|
||
self.clear()
|
||
|
||
self.attr_example03()
|
||
self.wait()
|
||
self.clear()
|
||
|
||
self.attr_example04()
|
||
self.wait()
|
||
|
||
def __add_title(self, title_str):
|
||
title = Text(
|
||
f"{title_str}:",
|
||
font="STLiti",
|
||
t2g={title_str: [RED, YELLOW, GREEN]},
|
||
font_size=25,
|
||
)
|
||
line = Line(LEFT * 3, RIGHT * 5, color=BLUE).next_to(title, DOWN, buff=0.1)
|
||
vg = VGroup(title, line)
|
||
self.add_fixed_in_frame_mobjects(vg)
|
||
vg.to_corner(UP)
|
||
|
||
def attr_example01(self):
|
||
"""默认显示"""
|
||
self.__add_title("东师理想数学AI助手")
|
||
|
||
self.set_camera_orientation(phi=2 * PI / 5, theta=PI / 5)
|
||
|
||
axes = ThreeDAxes(x_length=8, y_length=6, z_length=5)
|
||
self.add(axes)
|
||
|
||
# 创建一个立方体
|
||
cube = Cube()
|
||
self.play(Create(cube), run_time=run_time)
|
||
self.wait()
|
||
self.play(FadeOut(cube), run_time=0.5)
|
||
# 创建一个棱柱
|
||
prism = Prism()
|
||
# 显示立方体和棱柱
|
||
self.play(Create(prism), run_time=run_time)
|
||
|
||
def attr_example02(self):
|
||
"""变换颜色"""
|
||
self.__add_title("变换颜色")
|
||
|
||
self.set_camera_orientation(PI / 3, -PI / 4)
|
||
|
||
axes = ThreeDAxes(x_length=8, y_length=6, z_length=5)
|
||
self.add(axes)
|
||
|
||
# 创建一个立方体
|
||
cube = Cube()
|
||
self.play(Create(cube), run_time=run_time)
|
||
cube2 = Cube(fill_color=RED)
|
||
self.play(ReplacementTransform(cube, cube2), run_time=run_time)
|
||
self.play(FadeOut(cube2), run_time=0.5)
|
||
|
||
# 创建一个棱柱
|
||
prism = Prism()
|
||
self.play(Create(prism), run_time=run_time)
|
||
prism2 = Prism(fill_color=GREEN)
|
||
self.play(ReplacementTransform(prism, prism2), run_time=run_time)
|
||
|
||
def attr_example03(self):
|
||
"""移动和旋转"""
|
||
self.__add_title("移动和旋转")
|
||
|
||
self.set_camera_orientation(PI / 3, -PI / 4)
|
||
|
||
axes = ThreeDAxes(x_length=8, y_length=6, z_length=5)
|
||
self.add(axes)
|
||
# 创建一个立方体
|
||
cube = Cube(fill_color=RED)
|
||
# 创建一个棱柱
|
||
prism = Prism(fill_color=GREEN)
|
||
|
||
self.play(Create(cube), Create(prism)) # 显示立方体和棱柱
|
||
self.wait()
|
||
|
||
# 移动
|
||
self.play(
|
||
cube.animate.shift(RIGHT),
|
||
prism.animate.shift(LEFT),
|
||
run_time=run_time,
|
||
)
|
||
# 旋转
|
||
self.play(
|
||
cube.animate.rotate(PI / 4, axis=UP),
|
||
prism.animate.rotate(-PI / 4, axis=UP),
|
||
run_time=run_time,
|
||
)
|
||
|
||
def attr_example04(self):
|
||
"""组合使用"""
|
||
self.__add_title("组合使用")
|
||
|
||
self.set_camera_orientation(PI / 3, -PI / 4)
|
||
|
||
axes = ThreeDAxes(x_length=8, y_length=6, z_length=5)
|
||
self.add(axes)
|
||
|
||
# 创建一个立方体
|
||
cube = Cube(fill_color=RED).scale(0.8)
|
||
# 创建一个棱柱
|
||
prism = Prism(fill_color=GREEN).scale(0.8)
|
||
# 将立方体放在棱柱的右边
|
||
cube.next_to(prism, RIGHT, buff=0)
|
||
|
||
# 组合使用
|
||
vg = VGroup(cube, prism)
|
||
self.play(Create(vg), run_time=run_time)
|
||
self.wait()
|
||
|
||
# 整体移动组合
|
||
self.play(vg.animate.shift(UP), run_time=run_time)
|
||
# 整体旋转组合
|
||
self.play(vg.animate.rotate(PI / 2, axis=UP), run_time=run_time)
|
||
|
||
if __name__ == '__main__':
|
||
config = {
|
||
"quality": "high_quality",
|
||
"preview": True,
|
||
"media_dir": "./output",
|
||
"pixel_height": 1080,
|
||
"pixel_width": 1920,
|
||
"background_color": "#1E1E1E"
|
||
}
|
||
|
||
with tempconfig(config):
|
||
scene = CubePrismExample()
|
||
scene.render()
|