You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
3.9 KiB

5 months ago
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()