在 Manim 中绘制点主要通过 Dot
、LabeledDot
和 AnnotationDot
三类对象实现,以下是详细操作方法及技巧:
一、基础点绘制
Dot
对象-
核心参数:
dot = Dot( point=[x, y, z], # 坐标(默认原点) radius=0.08, # 半径(默认值) color=WHITE, # 颜色 fill_opacity=1.0 # 透明度 )
支持直接设置坐标、大小和颜色。例如,红色小点:
Dot(color=RED, radius=0.04)
。 -
动态调整:
创建后可通过方法修改属性:dot.set_color(BLUE).scale(1.5) # 修改颜色并放大
-
二、带标签的点
LabeledDot
对象-
标签支持:
允许在点内显示文本或公式,需通过label
参数指定:# 中文标签(需用 Text 对象) labeled_dot = LabeledDot(label=Text("点", font_size=20)) # 数学公式标签(直接输入 LaTeX) labeled_dot = LabeledDot(label="a^2 + b^2")
中文需显式创建
Text
对象,而数学公式可直接输入 LaTeX 字符串。 -
样式控制:
标签位置和字体可通过附加参数调整:labeled_dot = LabeledDot(label="P", label_position=UP, font_size=24)
-
三、注释专用点
AnnotationDot
对象-
双层结构:
包含边框(stroke
)和填充(fill
),可分别设置颜色和粗细:ann_dot = AnnotationDot( stroke_color=RED, # 边框颜色 fill_color=YELLOW, # 填充颜色 stroke_width=5 # 边框粗细 )
此类点常用于高亮标注,例如函数图像上的极值点。
-
混合动画:
可结合颜色渐变与形变动画:self.play( ann_dot.animate.set_fill(BLUE, opacity=0.8), ann_dot.animate.scale(2) )
-
四、动态绘制与交互
- 动画效果
-
创建与消失:
使用Create
和Uncreate
实现点的出现与消失动画:self.play(Create(dot), run_time=2) # 2秒绘制动画 self.play(Uncreate(dot)) # 渐隐消失
-
轨迹追踪:
结合ValueTracker
实现动态移动:tracker = ValueTracker(0) dot.add_updater(lambda d: d.move_to(tracker.get_value() * RIGHT)) self.play(tracker.animate.set_value(3), run_time=3)
-
五、布局与高级技巧
- 多点布局
-
网格生成:
使用循环批量生成规则排列的点:for x in range(-2, 3): for y in range(-2, 3): self.add(Dot([x, y, 0]))
可生成 5x5 的均匀点阵。
-
随机分布:
结合np.random
生成随机坐标点:points = [np.random.uniform(-5, 5, 3) for _ in range(20)] dots = VGroup(*[Dot(point) for point in points])
-
注意事项
- 中文兼容性:
直接使用LabeledDot("中文")
会报错,必须通过Text
对象包装。 - 渲染效率:
点数超过 1000 时建议降低透明度或使用VGroup
优化性能。 - 坐标系统:
二维点需固定 z 坐标为 0(如[1, -2, 0]
),否则可能影响后续图形叠加。