如何用Manim绘制由正方形组成的直角三角形?
修改Manim代码实现正方形直角三角形
原代码存在几个关键问题:
- 循环内重复创建
group,导致之前的正方形被丢弃,且i=0时group为空,访问group[i]直接报错 - 未调用复制方法:
copy = group[i].copy应该改为copy = group[i].copy() - 索引越界:
group[i+1]不存在,当前group最多只有i个元素,索引最大为i-1 - 整体逻辑错误,没有正确累积元素并构建三角形布局
以下是修改后的代码(以直角在左下角的三角形为例):
from manim import * class SquareTriangle(Scene): def construct(self): total_blocks = VGroup() # 构建10行,第n行包含n个正方形 for row_num in range(1, 11): # 创建当前行的正方形组,横向紧密排列 row = VGroup(*[Square(side_length=1) for _ in range(row_num)]).arrange(RIGHT, buff=0) # 与上一行对齐并放置在下方 if row_num > 1: row.next_to(total_blocks[-1], DOWN, buff=0) row.align_to(total_blocks[-1], LEFT) total_blocks.add(row) # 将整体移至屏幕中心 total_blocks.move_to(ORIGIN) # 逐行淡入动画 for row in total_blocks: self.play(FadeIn(row), run_time=0.3) self.wait()
如果需要直角在右上角的三角形,只需将对齐方式改为右对齐:
# 替换原对齐代码 row.align_to(total_blocks[-1], RIGHT)
关键修改说明:
- 使用
total_blocks作为总容器,逐步添加每行的正方形组,避免数据丢失 - 用
arrange方法快速完成每行正方形的横向排列 - 通过
next_to和align_to实现行与行的对齐,构建直角三角形结构 - 采用逐行动画的方式,更清晰展示三角形的构建过程
内容的提问来源于stack exchange,提问作者Pulsar Plasma
相关产品推荐
相关产品推荐

