在manim
的丰富图形库中,圆形类是一个基础且强大的模块。
无论是简单的圆形绘制,还是复杂的圆形变换,它都能以简洁的代码实现。
manim
中圆形类的相关模块主要有3个:
Circle
:标准的圆形Annulus
:圆环形状Ellipse
:椭圆形状
其中,Annulus
和Ellipse
继承自Circle
。
圆形系列处于manim
中的Mobject
之下。
1. 主要参数
圆Circle
对象的属性不多,主要有:
参数名称 | 类型 | 说明 |
---|---|---|
radius | float | 半径 |
color | str | 颜色 |
stroke_width | float | 边框厚度 |
fill_opacity | float | 透明度 |
圆环Annulus
对象的主要属性有:
参数名称 | 类型 | 说明 |
---|---|---|
inner_radius | float | 内圈半径 |
outer_radius | float | 外圈半径 |
color | str | 颜色 |
mark_paths_closed | bool | TODO |
Annulus
会渲染inner_radius
和outer_radius
之间的部分,也就是一个环。
椭圆Ellipse
对象的主要属性有:
参数名称 | 类型 | 说明 |
---|---|---|
width | float | 椭圆宽度 |
height | float | 椭圆高度 |
椭圆的宽度和高度设置成一样的时候,就是标准的圆。
2. 主要方法
圆Circle
对象有3个常用的方法:
名称 | 说明 |
---|---|
from_three_points | 根据3个点画圆 |
point_at_angle | 返回某个点在圆上的位置 |
surround | 修改一个圆,使其围绕给定的对象 |
上面方法的使用方法参见下面的使用示例章节。
圆环Annulus
和椭圆Ellipse
没有常用的方法。
3. 使用示例
3.1. 大小和颜色
对于圆Circle
来说,通过半径radius
来调节大小;
对于圆环Annulus
来说,通过内半径inner_radius
和外半径outer_radius
来调节环的大小和粗细;
对于椭圆Ellipse
来说,通过width
和height
来调节椭圆的大小和扁平程度。
三种形状的颜色都是color
属性。
# 圆形
Circle(radius=0.1, color=RED)
Circle(radius=0.3, color=BLUE)
Circle(radius=0.5, color=YELLOW)
# 圆环
Annulus(
inner_radius=0.1,
outer_radius=0.2,
color=RED,
)
Annulus(
inner_radius=0.4,
outer_radius=0.5,
color=BLUE,
)
Annulus(
inner_radius=0.4,
outer_radius=0.8,
color=YELLOW,
)
# 椭圆
Ellipse(
width=0.3,
height=0.1,
color=RED,
)
Ellipse(
width=0.8,
height=0.4,
color=BLUE,
)
Ellipse(
width=1.8,
height=1,
color=YELLOW,
)
效果如下:
3.2. 根据三个点画圆
除了通过上面设置半径radius
的方式来画圆,还可以根据任意三个点来生成一个圆形。
使用from_three_points
方法。
d1 = Dot(RIGHT, color=RED)
d2 = Dot(UL, color=BLUE)
d3 = Dot(DR, color=GREEN)
Circle.from_three_points(
d1.get_center(),
d2.get_center(),
d3.get_center(),
color=YELLOW,
)
3.3. 获取圆上某个点
通过方法point_at_angle
,我们可以根据角度来获取圆上的某一个点。manim
将整个圆最右边的点(和圆心在同一高度上)作为角度为\(0^\circ\)的点,
然后逆时针方向逐渐增加角度。
c = Circle(radius=2, color=YELLOW)
# 60度的点
p1 = c.point_at_angle(PI / 6)
# 180度的点
p2 = c.point_at_angle(PI)
# 270度的点
p3 = c.point_at_angle(3 * PI / 2)
3.4. 用圆环绕其他图形
最后,还有一个surround
方法,它的主要作用是将圆环绕在另一个图形上。surround
方法有个buffer_factor
参数,
当buffer_factor >= 1
时,圆形环绕在图形外部;当buffer_factor < 1
时,圆形在图形内部。
# 星形图形
star = Star()
# buffer_factor=1
# 所以环绕在星形外部
Circle().surround(star, buffer_factor=1)
# 十字线图形
vg = VGroup(
Line(UP / 2, DOWN / 2),
Line(LEFT / 2, RIGHT / 2),
)
# 默认 buffer_factor=1.2
# 所以环绕在十字线外部
Circle().surround(vg)
# 三角图形
t = Triangle()
# buffer_factor<1
# 所以圆形在三角形内部
Circle().surround(t, buffer_factor=0.3)
4. 附件
文中完整的代码放在网盘中了(circle.py
),
下载地址: 完整代码 (访问密码: 6872)
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容