Files
dsProject/dsLightRag/Manim/TiShiCi.txt

191 lines
6.6 KiB
Plaintext
Raw Normal View History

2025-08-14 15:45:08 +08:00
====== 提示词 ======
你是一位资深 Manim 动画工程师,专注于教育场景。请遵循以下规范:
1. 仅输出 Python 代码,不解释思路。
2. 使用 Manim 社区版 v0.18.0 语法。
3. 严格按提示的步骤进行编码,不要发挥、扩展。
4. 所有公式用 MathTex文字用 Text更好地支持中文颜色统一用 Manim 内置调色板。
5. 关键坐标用常量定义在类顶部,例如 LEFT_MARGIN = 3.2。
6. 每行不超过 88 字符,函数名用 snake_case。
7. 动画时长 3-5 秒 / 步,默认 ease-in-out。
8. 请严格按照以下模板:坐标轴范围、颜色、字体统一使用 Manim 社区版默认主题。
9. 代码的最后,参考下面的代码添加相应内容:
if __name__ == "__main__":
# 导入必要的模块
import sys
import os
# 设置 UTF-8 编码
os.environ['PYTHONIOENCODING'] = 'utf-8'
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
# 全局指定 ctex 模板(一次性)
config.tex_template = TexTemplateLibrary.ctex
# 使用临时配置渲染场景配置只在with块内有效
with tempconfig({
"quality": "high_quality",
"background_color": WHITE,
"preview": True
}):
# 实例化场景类
scene = ParabolaUp()
# 执行渲染流程(包含文件生成和预览)
scene.render()
10. 【输出要求】
(1). 完整可运行 Python 脚本,文件名 ParabolaUp.py。
(2). 场景类名 ParabolaUp。
(3). 包含 `if __name__ == "__main__":` 可直接 `manim -pql ParabolaUp.py ParabolaUp`。
(4). 代码内只出现中文注释,方便二次修改。
本成的具体需求如下:
{XuQiu}
====== 生成结果 ======
```python
from manim import *
class ParabolaUp(Scene):
# 定义常量坐标
X_MIN, X_MAX = -4, 4
Y_MIN, Y_MAX = -3, 5
LEGEND_X = 3.5
LEGEND_Y_START = 3
LABEL_X = 2.0
def construct(self):
# 创建坐标轴系统
axes = Axes(
x_range=[self.X_MIN, self.X_MAX, 1],
y_range=[self.Y_MIN, self.Y_MAX, 1],
axis_config={"color": BLACK}
)
axes_labels = axes.get_axis_labels(x_label="x", y_label="y")
title = Text("二次函数图像", font_size=24, color=BLACK).to_edge(UP)
# 创建三个二次函数图像
graph1 = axes.plot(
lambda x: 0.5 * x**2,
color=BLUE,
x_range=[self.X_MIN, self.X_MAX]
)
graph2 = axes.plot(
lambda x: -0.5 * x**2,
color=RED,
x_range=[self.X_MIN, self.X_MAX]
)
graph3 = DashedVMobject(
axes.plot(lambda x: 0, color=GREEN, x_range=[self.X_MIN, self.X_MAX]),
num_dashes=50
)
# 创建函数表达式标签
label1 = MathTex(r"y = 0.5x^2", font_size=24, color=BLUE)
label1.move_to(axes.c2p(self.LABEL_X, 0.5 * self.LABEL_X**2 + 0.5))
label2 = MathTex(r"y = -0.5x^2", font_size=24, color=RED)
label2.move_to(axes.c2p(self.LABEL_X, -0.5 * self.LABEL_X**2 - 0.5))
label3 = MathTex(r"y = 0", font_size=24, color=GREEN)
label3.move_to(axes.c2p(self.LABEL_X, 0.5))
# 创建顶点标记
vertex_dot = Dot(axes.c2p(0, 0), color=BLACK, radius=0.08)
vertex_label = Text("顶点(0,0)", font_size=20, color=BLACK)
vertex_label.next_to(vertex_dot, DOWN, buff=0.1)
# 创建图例
legend_group = VGroup()
colors = [BLUE, RED, GREEN]
labels = ["a>0", "a<0", "a=0"]
styles = [None, None, DashedLine]
for i, (color, text, style) in enumerate(zip(colors, labels, styles)):
y_pos = self.LEGEND_Y_START - i * 0.8
pos = axes.c2p(self.LEGEND_X, y_pos)
if style is DashedLine:
line = DashedLine(
start=pos + LEFT*0.5,
end=pos + RIGHT*0.5,
color=color,
dash_length=0.1
)
else:
line = Line(
start=pos + LEFT*0.5,
end=pos + RIGHT*0.5,
color=color
)
text_item = Text(text, font_size=20, color=BLACK)
text_item.next_to(line, RIGHT, buff=0.2)
legend_item = VGroup(line, text_item)
legend_group.add(legend_item)
# 动画序列
self.play(
Create(axes),
Write(axes_labels),
Write(title),
run_time=2
)
self.wait(0.5)
# 绘制第一条抛物线
self.play(
Create(graph1),
Write(label1),
run_time=1.5
)
self.play(
Create(vertex_dot),
Write(vertex_label),
run_time=1
)
self.wait(0.5)
# 绘制第二条抛物线
self.play(
Create(graph2),
Write(label2),
run_time=1.5
)
self.wait(0.5)
# 绘制第三条抛物线
self.play(
Create(graph3),
Write(label3),
run_time=1.5
)
self.wait(0.5)
# 添加图例
self.play(
LaggedStart(*[FadeIn(item) for item in legend_group], lag_ratio=0.3),
run_time=2
)
self.wait(2)
if __name__ == "__main__":
# 导入必要的模块
import sys
import os
# 设置 UTF-8 编码
os.environ['PYTHONIOENCODING'] = 'utf-8'
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
# 全局指定 ctex 模板(一次性)
config.tex_template = TexTemplateLibrary.ctex
# 使用临时配置渲染场景配置只在with块内有效
with tempconfig({
"quality": "high_quality",
"background_color": WHITE,
"preview": True
}):
# 实例化场景类
scene = ParabolaUp()
# 执行渲染流程(包含文件生成和预览)
scene.render()
```