python动画:二维或三维空间中创建数据点的可视化

         及其相关类用于创建和管理各种维度的点云可视化表示。它们为定义、分组和可视化点集合提供了工具,无论是作为单独元素、线条、平面还是填充区域。这些类为在图形应用程序中处理复杂数据可视化提供了灵活性。

1.PGroup

  • 该类作为多个点对象的分组机制。它允许将几个点对象作为一个整体来处理,便于集体操控和动画化。
PGroup(*pmobs, **kwargs)

 PGroup(*pmobs, **kwargs) 是一个用于创建点对象组的函数,通常在图形或动画库中使用。以下是对该函数及其参数的详细解释:

函数解释

  • PGroup
    • 这个类的实例用于将多个点对象(通常是 PMobject 或其他派生对象)组合在一起。通过组合,您可以更方便地一起处理这些对象,例如同时移动、旋转或缩放它们。

参数

  • *pmobs
    • 这个参数表示一个可变数量的位置参数。您可以将多个点对象(PMobject 或相关对象)作为参数传递给 PGroup。在调用时,您可以通过逗号分隔的列表传递任意数量的点对象。例如:
      group = PGroup(point1, point2, point3) 
  • **kwargs
    • 这个参数表示可变数量的关键字参数。您可以使用关键字参数来传递其他可选的配置选项和属性,这些选项可能包括颜色、透明度、缩放比例等。在调用时,您可以使用关键字参数来更改新对象的默认属性。例如:
      group = PGroup(point1, point2, point3, color='red', opacity=0.5) 

 1.示例:

from manim import *

class PgroupExample(Scene):
    def construct(self):

        p1 = PointCloudDot(radius=1, density=20, color=BLUE)
        p1.move_to(4.5 * LEFT)
        p2 = PointCloudDot()
        p3 = PointCloudDot(radius=1.5, stroke_width=2.5, color=PINK)
        p3.move_to(4.5 * RIGHT)
        pList = PGroup(p1, p2, p3)

        self.add(pList)

 

 2.PMobject

  • 该类表示由点云构成的圆盘。它可能用于可视化点的密集区域,给人一种填充圆形或盘状的感觉,这在可视化数据点集群时非常实用。
PMobject(stroke_width=4, **kwargs)

 PMobject(stroke_width=4, **kwargs) 是一个用于定义点云对象的构造函数,通常在图形或动画库中使用。以下是对这个函数及其参数的详细解释:

函数解释

  • PMobject
    • 该类表示由点构成的对象,通常用于可视化数据点或样式化展示。PMobject 可能提供某些样式属性和方法,以便您能够对点云进行自定义和操作。

参数

  • stroke_width

    • 这是一个关键字参数,用于设置点对象的描边宽度。默认值为 4,这意味着如果在实例化时没有提供该参数,则描边宽度将为 4 个单位。该属性可以影响点的视觉表现,特别是在绘制时,较大的描边宽度可以使点更加显眼。
  • **kwargs

    • 此参数表示可变数量的关键字参数,可以传递给构造函数以设置其他属性。这些属性可能包括颜色、透明度、位置、缩放比例等方面的自定义设置。例如,您可以使用这个参数来设置 color='blue' 或 opacity=0.8 等。这样,您就可以在创建 PMobject 实例时细致地调整其各个方面。

示例

以下是一个使用 PMobject 的示例:

class PMobjectExample(Scene):  
    def construct(self):  
        # 创建一个 PGroup 实例,作为多个 PMobject 的集合  
        pG = PGroup()  # This is just a collection of PMobject's  

        # 循环遍历缩放因子,从 1 到 9  
        for sf in range(1, 9 + 1):  
            # 创建一个点云对象,设置密度为 20,半径为 1  
            p = PointCloudDot(density=20, radius=1).thin_out(sf)  
            # PointCloudDot 是一种 PMobject,因此可以被添加到 PGroup  
            # 通过 thin_out 方法根据 sf 参数稀疏点云  
            pG.add(p)  # 将生成的点云对象添加到 PGroup 中  

        # 将 PGroup 中的所有对象按网格排列  
        pG.arrange_in_grid()  # This organizes all the shapes in a grid.  

        # 将 PGroup 添加到当前场景中,以便在渲染时显示  
        self.add(pG)
 

 3.Point

  • 该类表示空间中的一个单独点。它可用于在绘图或图形上创建单个标记或高亮显示。
Point(location=array([0., 0., 0.]), color=ManimColor('#000000'), **kwargs)

 Point 是 Manim 中用于创建三维空间中点的一个类。下面是对 Point 函数及其参数的详细解释:

函数说明

Point(location=array([0., 0., 0.]), color=ManimColor('#000000'), **kwargs) 

此函数用于创建一个表示三维空间中特定位置的点对象。

参数解释

  1. location:

    • 类型:numpy 数组
    • 默认值:array([0., 0., 0.])
    • 说明:指定点在三维空间中的坐标位置。它是一个包含三个元素的数组,分别表示 x、y 和 z 坐标。默认为原点 (0, 0, 0)。
  2. color:

    • 类型:ManimColor(这通常是 Manim 中自定义颜色的类)
    • 默认值:ManimColor('#000000')(黑色)
    • 说明:指定点的颜色。ManimColor 允许使用十六进制颜色码或其他颜色格式来定义颜色。
  3. kwargs:

    • 类型:dict
    • 说明:允许用户传递额外的关键字参数,这些参数会被传递给 PMobject 的构造函数(Point 是一个 PMobject 的子类)。这些关键字参数可以用于定制其他属性,比如点的大小、透明度等。

用法示例

# 创建一个红色的点,位置在 (1, 2, 3) 
my_point = Point(location=array([1., 2., 3.]), color=ManimColor('#FF0000')) 

在这个示例中,my_point 代表了一个在三维空间中位于 (1, 2, 3) 的红色点。通过调整 location 和 color 参数,可以创建不同位置和颜色的点对

示例1:

class ExamplePoint(Scene):
    def construct(self):
        colorList = [RED, GREEN, BLUE, YELLOW]
        for i in range(200):
            point = Point(location=[0.63 * np.random.randint(-4, 4), 
                                    0.37 * np.random.randint(-4, 4), 0],
                          color=np.random.choice(colorList))
            self.add(point)
        for i in range(200):
            point = Point(location=[0.37 * np.random.randint(-4, 4),
                                    0.63 * np.random.randint(-4, 4), 0],
                          color=np.random.choice(colorList))
            self.add(point)
            
        self.add(point)

 

4.PointCloudDot

  • 类似于 PMobject,该类表示由点组成的圆盘,但可能具有特定的属性,以允许更复杂的点云可视化表示。
PointCloudDot(center=array([0., 0., 0.]), radius=2.0, stroke_width=2,
 density=10, color=ManimColor('#FFFF00'), **kwargs)

 

PointCloudDot 是 Manim 中用于创建点云的类,表示在三维空间中由多个点组成的集合。以下是对 PointCloudDot 函数及其参数的详细解释:

函数说明

PointCloudDot(center=array([0., 0., 0.]), 
radius=2.0, stroke_width=2, density=10,
 color=ManimColor('#FFFF00'), **kwargs) 

此函数用于创建一个点云对象,该对象的中心位置和其他属性可以根据传入的参数进行调整。

参数解释

  1. center:

    • 类型:numpy 数组
    • 默认值:array([0., 0., 0.])
    • 说明:指定点云的中心位置。它是一个包含三个元素的数组,分别表示 x、y 和 z 坐标。默认为原点 (0, 0, 0)。
  2. radius:

    • 类型:float
    • 默认值:2.0
    • 说明:指定每个点的半径。每个点被表示为一个圆形,半径会影响其在场景中的可见大小。
  3. stroke_width:

    • 类型:int
    • 默认值:2
    • 说明:指定点的边框宽度。此参数适用于有边框的视觉效果,值越大,边框越粗。
  4. density:

    • 类型:int
    • 默认值:10
    • 说明:控制点云中的点的数量或稠密度。值越大,生成的点越多,点云看起来越密集。
  5. color:

    • 类型:ManimColor
    • 默认值:ManimColor('#FFFF00') (黄色)
    • 说明:指定点的颜色。可以使用十六进制颜色码或 Manim 支持的其他颜色格式。
  6. kwargs:

    • 类型:dict
    • 说明:允许用户传递额外的关键字参数,这些参数将传递给 PMobject 的构造函数(PointCloudDot 是一个 PMobject 的子类)。这些关键字参数可以用于定制其他属性,比如透明度或其他外观特征。

用法示例

# 创建一个中心在 (1, 2, 3) 的点云,半径为 1.0,边框宽度为 1,密度为 20,颜色为蓝色 
my_point_cloud = PointCloudDot(center=array([1., 2., 3.]),
 radius=1.0, stroke_width=1, density=20, color=ManimColor('#0000FF')) 

在这个示例中,my_point_cloud 代表了一个在三维空间中中心位于 (1, 2, 3) 的蓝色点云。通过调整以下参数,可以灵活地创建具有不同外观和特征的点云。

 示例1:

from manim import *

class PointCloudDotExample(Scene):
    def construct(self):
        cloud_1 = PointCloudDot(color=RED)
        cloud_2 = PointCloudDot(stroke_width=4, radius=1)
        cloud_3 = PointCloudDot(density=15)

        group = Group(cloud_1, cloud_2, cloud_3).arrange()
        self.add(group)

 示例3:

class PointCloudDotExample2(Scene):
    def construct(self):
        self.camera.background_color = WHITE
        #plane = ComplexPlane()
        cloud = PointCloudDot(color=GOLD,density=55)
        self.add(cloud)
        self.wait()
        self.play(cloud.animate.apply_complex_function(lambda z: np.exp(z)))

 

总结

及其相关类用于创建和管理各种维度的点云可视化表示。它们为定义、分组和可视化点集合提供了工具,无论是作为单独元素、线条、平面还是填充区域。这些类为在图形应用程序中处理复杂数据可视化提供了灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值