如何在Manim及ManimCE中绘制圆上的等距点?是否有内置简便方法替代手动坐标输入?
Manim/ManimCE 绘制圆上等距点的简便方法
嘿,很高兴你问到这个!手动计算坐标确实能实现,但Manim(包括Community Edition)其实有更优雅的内置方式来搞定圆上的等距点,不用自己手动算三角函数,效率高多了。下面给你介绍两种常用的方法:
方法一:利用Circle的point_from_proportion方法
Circle类自带的point_from_proportion方法可以直接根据比例值返回圆上的对应点,完美适配等距点的需求。比例值范围是0到1,0对应圆的右顶点(默认起始角度为0,即x轴正方向),1则回到起点。
示例代码:
from manim import * class CircleWithEquidistantPoints(Scene): def construct(self): # 创建一个半径为2的圆 circle = Circle(radius=2) self.add(circle) # 设置需要的等距点数量 num_points = 8 # 遍历生成每个点 for i in range(num_points): # 计算当前点的比例:i/num_points point = circle.point_from_proportion(i / num_points) # 用红点标记该点 dot = Dot(point, color=RED, radius=0.08) self.add(dot) # 可选:给每个点添加序号标签 label = Text(str(i+1), font_size=20).next_to(dot, RIGHT + UP, buff=0.1) self.add(label)
如果需要调整起始角度(比如从y轴正方向开始),可以直接旋转圆或者调整比例值:
- 旋转圆:
circle.rotate(PI/2),这样point_from_proportion(0)就会指向y轴正方向 - 调整比例:把
i/num_points改成(i/num_points) + 0.25(0.25对应四分之一圆周,即90度)
方法二:借助RegularPolygon获取顶点
正多边形的顶点本身就是其外接圆上的等距点,所以用RegularPolygon类可以直接拿到这些点,甚至可以同时显示多边形(不需要的话隐藏即可)。
示例代码:
from manim import * class PolygonVerticesOnCircle(Scene): def construct(self): # 正六边形,对应6个等距点;radius参数设置外接圆半径 num_sides = 6 polygon = RegularPolygon(n=num_sides, radius=2, color=GREY) # 如果不需要显示多边形,注释掉下面这行 self.add(polygon) # 获取所有顶点,这些点都在圆上且等距分布 points = polygon.get_vertices() # 绘制每个点 for idx, point in enumerate(points): dot = Dot(point, color=BLUE, radius=0.08) self.add(dot) # 可选:添加标签 label = Text(str(idx+1), font_size=20).next_to(dot, DOWN + LEFT, buff=0.1) self.add(label)
同样,调整起始角度可以用start_angle参数,比如RegularPolygon(n=num_sides, radius=2, start_angle=PI/2),这样第一个顶点会从y轴正方向开始。
两种方法的适用场景
- 如果你只需要圆上的点,两种方法都可以,看个人习惯;
- 如果需要同时显示圆和点,用
Circle的方法更直接; - 如果需要正多边形的边或者整体形状,
RegularPolygon会更省心。
这样是不是比手动计算坐标方便太多了?试试这两种方法,根据你的需求选择就行~
内容的提问来源于stack exchange,提问作者Sophile
相关产品推荐
相关产品推荐

