用Manim实现【多边形】类的实现——[下]
Polygram内容是关于不同几何图形的分类,特别是涉及多边形(Polygon)及其扩展形式,比如多图形(Polygram)。在manim中有10中特征,接下来介绍剩余的5种类及其特征的解释:
6.RegularPolygram
具有规则间距顶点的多图形。它的边均匀分布,形成对称的形状。它的构造函数如下:
RegularPolygram(num_vertices, *, density=2, radius=1, start_angle=None, **kwargs)
RegularPolygram
是一个用于创建正多边形图形的函数,通常在图形处理或计算几何相关的库中使用。以下是对该函数及其参数的详细解释:
函数:RegularPolygram(num_vertices, *, density=2, radius=1, start_angle=None, **kwargs)
参数说明:
-
num_vertices:
- 类型: 整数
- 描述: 指定多边形的顶点数量,即正多边形的边数。这个参数是必需的。
-
density:
- 类型: 整数,默认值为 2
- 描述: 指定绘制多边形的密度。通常用于绘制星形多边形(例如,五角星),表示每隔多少个顶点连接一个线段。
density=2
表示连接每隔一个顶点,density=3
表示连接每隔两个顶点,依此类推。
-
radius:
- 类型: 浮点数,默认值为 1
- 描述: 多边形的半径,决定了多边形的大小。如果你想要更大的多边形,可以增加这个参数的值。
-
start_angle:
- 类型: 浮点数或 None,默认值为 None
- 描述: 多边形的起始角度。通常用于旋转多边形的起始位置。如果设置为 None,通常意味着默认从某个标准位置开始(如正右方)。
-
kwargs:
- 描述: 其他关键字参数,可以用于传递额外的自定义选项,这些选项可能与图形的绘制样式、颜色、线条宽度等相关。
示例1:
from manim import *
class RegularPolygramExample01(Scene):
def construct(self):
pentagram = RegularPolygram(5,density=2, radius=2.8)
pentagram.set_fill(RED,opacity=1) # 填充颜色为黄色,透明度为0.5
pentagram2 = RegularPolygram(7, radius=1.8)
pentagram2.set_fill(PINK,opacity=0.8) # 填充颜色为黄色,透明度为0.5
pentagram3 = RegularPolygram(3, radius=1)
pentagram3.set_fill(GOLD,opacity=1) # 填充颜色为黄色,透明度为0.5
gv=VGroup(pentagram,pentagram2,pentagram3).arrange(buff=1)
self.add(gv)
运行结果:
7.RoundedRectangle
带有圆角的矩形。角部不是尖锐的,而是圆滑的。
RoundedRectangle
是一个用于创建带圆角的矩形的函数,通常用于图形处理、用户界面设计或绘图相关的库中。以下是对该函数及其参数的详细解释:
函数:RoundedRectangle(corner_radius=0.5, **kwargs)
参数说明:
- corner_radius:
- 类型: 浮点数,默认值为 0.5
- 描述: 指定矩形角落的圆角半径。这个值决定了矩形的角落是多么圆润。如果设置为 0,则形成普通的矩形;设置为更大的值,落会变得更加圆滑。通常,圆角半径的值应小于或等于矩形的一半宽度和高度,以避免不形状- kwargs:
描述: 其他关键参数,可以传递额外的自定义选项,这些项可能与形的绘制样式、颜色、框、填充相关。具体的可用参数取决于使用的图形库。
示例1.
class RoundedRectangleExample(Scene):
def construct(self):
rect_0 = RoundedRectangle(corner_radius=0,color=GOLD_E).shift(2*UP,LEFT*2)
rect_1 = RoundedRectangle(corner_radius=0.5,color=GOLD_B)
rect_2 = RoundedRectangle(corner_radius=1.5, height=4.0, width=4.0,color=RED)
rect_1.set_fill(GOLD,opacity=1) # 填充颜色为黄色,透明度为0.5
rect_group = Group(rect_1, rect_2).arrange(buff=1).shift(DOWN)
self.add(rect_group,rect_0)
运行结果:
8.Square
一种矩形,具有相等的边长。每个角都是90度,所有边都相等。
Square
是一个用于创建正方形的函数,通常在图形处理、用户界面设计或绘图库中使用。以下是对函数及其参数的详细解释:
函数:Square(side_length=2.0, **kwargs)
参数说明:
-
side_length:
- 类型: 浮点数,默认值为 2.0
- 描述: 指定正方形的边长。这个参数是必需的,决定了正方形的大小。如果设置为更大的值,正方形的尺寸会相应增大。
-
kwargs:
- 描述: 其他关键字参数,用于传递额外的自定义选项。这些选项可能与正方形的绘制样式、颜色、边框、填充等属性相关。具体的可用参数取决于所使用的图形库或框架。
示例1:
from manim import *
class SquareExample(Scene):
def construct(self):
square_1 = Square(side_length=2.0).shift(DOWN)
square_2 = Square(side_length=1.0).next_to(square_1, direction=UP)
square_3 = Square(side_length=0.5).next_to(square_2, direction=UP)
self.add(square_1, square_2, square_3)
运行结果:
9.Star
一个规则的多图形,但没有相互交叉的线条。也就是说,星形的尖角和凹角均匀分布,但不会形成交错的线。
Star
是一个用于创建星形图形的函数,通常用于图形处理、计算几何或者绘制相关的库中。以下是对该函数及其参数的详细解释:
函数:Star(n=5, *, outer_radius=1, inner_radius=None, density=2, start_angle=1.5707963267948966, **kwargs)
参数说明:
-
n:
- 类型: 整数,默认值为 5
- 描述: 指定星形的顶点数量。这个参数决定了星的“点”的数量,通常是奇数(如 5、7、9 等)以形成对称的星形。
-
outer_radius:
- 类型: 浮点数,默认值为 1
- 描述: 星形的外半径,决定了星形每个尖角的距离中心的距离。这个值越大,星形越大。
-
inner_radius:
- 类型: 浮点数或 None,默认值为 None
- 描述: 星形的内半径,决定了星形的凹陷部分的深度。这是从星形中心到每个凹陷部分的距离。如果设置为 None,通常意味着使用一个默认值,通常是
outer_radius
的一部分(如outer_radius / 2
)。
-
density:
- 类型: 整数,默认值为 2
- 描述: 指定绘制星形的密度。在星形的顶点之间,有多少个点被连接。
density=2
表示每隔一个顶点连接一个点,形成一个星形;density=3
表示每隔两个顶点连接一个点,形成更复杂的图案。
-
**start_angle:
- 类型: 浮点数,默认值为 1.5707963267948966(约等于 π/2)
-描述**: 星形的起始角度,通常以弧度表示。这个参数决定了星形的旋转位置。例如,start_angle=0
表示从右侧开始绘制,start_angle=π/2
表示从顶部开始绘制。
- 类型: 浮点数,默认值为 1.5707963267948966(约等于 π/2)
-
kwargs:
- 描述: 其他关键字参数,可以用于传递额外的自定义选项,这些选项可能与星形的绘制样式、颜色、边框、填充等相关。具体的可用参数取决于所使用的图形库。
示例1:
from manim import *
class StarExample(Scene):
def construct(self):
pentagram = RegularPolygram(5, radius=2)
star = Star(outer_radius=2, color=RED)
self.add(pentagram)
self.play(Create(star), run_time=3)
self.play(FadeOut(star), run_time=2)
运行结果:
示例2:
from manim import *
class DifferentDensitiesExample(Scene):
def construct(self):
density_2 = Star(7, outer_radius=2, density=2, color=RED)
density_3 = Star(7, outer_radius=2, density=3, color=PURPLE)
self.add(VGroup(density_2, density_3).arrange(RIGHT))
运行结果:
10. Triangle
一种等边三角形,所有的边长和角度都是相等的。
Triangle
是一个用于创建三角形的函数,通常用于图形处理、计算几何或绘图库中。以下是对该函数及其参数的详细解释:
函数:Triangle(**kwargs)
参数说明:
Triangle
函数通常会采用关键字参数(**kwargs
),这意味着可以传递多个自定义选项来定义三角形的属性。具体的可用参数可能因所使用的图形库而异,但常见的参数包括:
-
vertices:
- 类型: 列表或元组
- 描述: 定义三角形的三个顶点。通常以
(x1, y1), (x2, y2), (x3, y3)
的形式传递,表示三角形的三个角的坐标。
-
fill_color:
- 类型: 字符串(颜色名称或十六进制颜色代码)
- 描述: 指定三角形的填充颜色。例如,可以使用
'red'
、'blue'
或'#FF5733'
等。
-
border_color:
- 类型: 字符串(颜色名称或十六进制颜色代码)
- 描述: 指定三角形边框的颜色。
-
border_width:
- 类型: 浮点数或整数
- 描述: 设置三角形边框的宽度,以像素为单位。
-
opacity:
- 类型: 浮点数,通常在 0 到 1 之间
- 描述: 设置三角形的透明度,0 表示完全透明,1 表示完全不透明。
-
position:
- 类型: 列表或元组
- 描述: 指定三角形的绘制位置,可能以
(x, y)
的形式传递,表示三角形的起始点。
-
rotation:
- 类型: 浮点数
- 描述: 指定三角形的旋转角度,以弧度或度为单位。
使用示例:
下面是一个创建三角形的示例,结合了多种 kwargs
的用法:
from manim import *
class TriangleExample(Scene):
def construct(self):
triangle_1 = Triangle()
triangle_2 = Triangle().scale(2).rotate(60*DEGREES)
tri_group = Group(triangle_1, triangle_2).arrange(buff=1)
self.add(tri_group)
解释代码:
1. 导入 Manim
from manim import *
- 这一行导入了 Manim 库的所有功能,使你可以使用 Manim 中的各种类和函数。
2. 定义场景
class TriangleExample(Scene):
TriangleExample
是一个继承自Scene
的类,表示一个新的动画场景。Manim 中的每个动画场景都应该在一个类中定义,并且必须继承自Scene
。
3. 构建方法
def construct(self):
construct
是 Manim 中的一个特殊方法,当场景被渲染时会自动调用。在这个方法中,你可以定义要在场景中绘制的对象。
4. 创建三角形
triangle_1 = Triangle()
- 这一行创建了第一个三角形
triangle_1
。在 Manim 中,Triangle
函数默认创建一个边长为 1 的三角形。
triangle_2 = Triangle().scale(2).rotate(60 * DEGREES)
- 这一行创建了第二个三角
triangle_2
。它首先创建一个默认的三角形,然后通过scale2 方法其大小放大到原来的两倍,再通过
rotate(60 * DEGREES)方法将其旋转 60 度。注意,
DEGREES` 是 Manim 提供的常量,用于将角度转换为弧度。
5. 组合三角形
tri_group = Group(triangle_1, triangle_2).arrange(buff=1)
- 这一行创建了一个包含
triangle_1
和triangle_2
的组合对象tri_group``Group
是 Manim用于将多个组合在一起的类。arrange(buff1)
方法会将组合中的对象排列在一起,buff=1
指了对象之间的间隔为 个单位。
6. 添加到场景
self.add(tr_group)
- 这一行将组合三角形
tri_group
添加到当前场景中,以便在渲染显示出来。
运行结果:
总结
这个代码片段的目的是在 Manim 中一个包含两个三角形的场景。第一个三角形是默认大小,第二个三角形是放大后的版本,并旋转了 60 度。两个三角形被组合在一起并在一起展示。
运行结果: