翼度科技»论坛 编程开发 python 查看内容

manim边学边做--圆形类

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
在manim的丰富图形库中,圆形类是一个基础且强大的模块。
无论是简单的圆形绘制,还是复杂的圆形变换,它都能以简洁的代码实现。
manim中圆形类的相关模块主要有3个:

  • Circle:标准的圆形
  • Annulus:圆环形状
  • Ellipse:椭圆形状
其中,Annulus和Ellipse继承自Circle。

圆形系列处于manim中的Mobject之下。
1. 主要参数

圆Circle对象的属性不多,主要有:
参数名称类型说明radiusfloat半径colorstr颜色stroke_widthfloat边框厚度fill_opacityfloat透明度圆环Annulus对象的主要属性有:
参数名称类型说明inner_radiusfloat内圈半径outer_radiusfloat外圈半径colorstr颜色mark_paths_closedboolTODOAnnulus会渲染inner_radius和outer_radius之间的部分,也就是一个环。
椭圆Ellipse对象的主要属性有:
参数名称类型说明widthfloat椭圆宽度heightfloat椭圆高度椭圆的宽度和高度设置成一样的时候,就是标准的
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属性。
  1. # 圆形
  2. Circle(radius=0.1, color=RED)
  3. Circle(radius=0.3, color=BLUE)
  4. Circle(radius=0.5, color=YELLOW)
  5. # 圆环
  6. Annulus(
  7.     inner_radius=0.1,
  8.     outer_radius=0.2,
  9.     color=RED,
  10. )
  11. Annulus(
  12.     inner_radius=0.4,
  13.     outer_radius=0.5,
  14.     color=BLUE,
  15. )
  16. Annulus(
  17.     inner_radius=0.4,
  18.     outer_radius=0.8,
  19.     color=YELLOW,
  20. )
  21. # 椭圆
  22. Ellipse(
  23.     width=0.3,
  24.     height=0.1,
  25.     color=RED,
  26. )
  27. Ellipse(
  28.     width=0.8,
  29.     height=0.4,
  30.     color=BLUE,
  31. )
  32. Ellipse(
  33.     width=1.8,
  34.     height=1,
  35.     color=YELLOW,
  36. )
复制代码
效果如下:

3.2. 根据三个点画圆

除了通过上面设置半径radius的方式来画圆,还可以根据任意三个点来生成一个圆形。
使用from_three_points方法。
  1. d1 = Dot(RIGHT, color=RED)
  2. d2 = Dot(UL, color=BLUE)
  3. d3 = Dot(DR, color=GREEN)
  4. Circle.from_three_points(
  5.     d1.get_center(),
  6.     d2.get_center(),
  7.     d3.get_center(),
  8.     color=YELLOW,
  9. )
复制代码

3.3. 获取圆上某个点

通过方法point_at_angle,我们可以根据角度来获取圆上的某一个点。
manim将整个圆最右边的点(和圆心在同一高度上)作为角度为\(0^\circ\)的点,
然后逆时针方向逐渐增加角度。
  1. c = Circle(radius=2, color=YELLOW)
  2. # 60度的点
  3. p1 = c.point_at_angle(PI / 6)
  4. # 180度的点
  5. p2 = c.point_at_angle(PI)
  6. # 270度的点
  7. p3 = c.point_at_angle(3 * PI / 2)
复制代码

3.4. 用圆环绕其他图形

最后,还有一个surround方法,它的主要作用是将圆环绕在另一个图形上。
surround方法有个buffer_factor 参数,
当buffer_factor >= 1时,圆形环绕在图形外部;当buffer_factor < 1时,圆形在图形内部。
[code]# 星形图形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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具