Bootstrap

manim中获取并定位不规则页面的中心位置

介绍中心点

找到中心点非常重要,因为它在多个领域中都有重要的应用和意义。中心点可以指一个几何形状的中心、数据集的平均值中心、或是特定情境下的关键焦点。以下是一些中心点重要性的具体解释:

  1. 数学与几何:在几何中,中心点(例如圆的中心)是形状的对称性和结构的关键。它决定了形状的性质和位置,帮助进行准确的测量与计算。

  2. 数据分析:在统计学中,数据集的中心点(例如平均值、中位数、众数)帮助我们理解数据的集中趋势。找到数据的中心点可以揭示出数据的分布特征,为决策提供依据。

  3. 心理学与社会学:在社会交往和心理学研究中,中心点可以代表群体中的领袖、焦点或者关键人物。他们的存在和决策往往影响整个群体的动态。

  4. 实用应用:在日常生活中,找到中心点有助于更好地组织和安排事务,比如在空间布局、时间管理和资源分配中,中心点的概念能够帮助我们优化流程,提高效率。

总之,找到中心点能够提供方向感、揭示趋势和促进决策,无论是在理论还是实际操作中都具有重要意义。

在页面中获取必要的参数

from manim import *  

class InfiniteLines042(Scene):  
    def construct(self):  
        # 设置背景颜色  
        self.camera.background_color = "#2F4F14"    
        
        # 获取场景的宽度和高度  
        width = config.frame_width  
        height = config.frame_height  

        print(width)  
        print(height)  
        print(UP)  

        # 计算中心线的位置  
        horizontal_center = 0  # 横线的 y 轴位置  
        vertical_center = 0  # 竖线的 x 轴位置  

        # 创建无限虚线横向线和竖向线  
        horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(2.8 * UP)  
        vertical_line = Line(start=DOWN * 8, end=UP * 8, color=WHITE)   
        
        # 添加横线和竖线  
        self.add(horizontal_line, vertical_line)  

        # 横线的 y 坐标  
        horizontal_y_coordinate = horizontal_line.get_start()[1]  # 取起始点的 y 坐标  
        print(f"Horizontal line Y coordinate: {horizontal_y_coordinate}")  
        
        # 竖线的 x 坐标  
        vertical_x_coordinate = vertical_line.get_start()[0]  # 取起始点的 x 坐标  
        print(f"Vertical line X coordinate: {vertical_x_coordinate}")  

        # 标记中心点  
        center_point = Dot(point=ORIGIN, color=YELLOW, radius=0.1)  # 中心点  
        self.add(center_point)  

        Cl1=DashedLine(start=LEFT * 8, end=RIGHT * 8, color=WHITE)
        Cl2=DashedLine(start=DOWN * 8, end=UP * 8, color=WHITE)
        self.add(Cl1,Cl2)
        

        # 创建表示宽度和高度的箭头  
        width_arrow1 = Arrow(start=ORIGIN, end=RIGHT * width / 2, color=BLUE,buff=0).shift(2*DOWN)
        width_arrow2 = Arrow(start=ORIGIN, end=-(RIGHT * width / 2), color=BLUE,buff=0).shift(2*DOWN)
        
        height_arrow1 = Arrow(start=ORIGIN, end=UP * height / 2, color=PINK,buff=0).shift(2*RIGHT)
        height_arrow2 = Arrow(start=ORIGIN, end=-(UP * height / 2), color=PINK,buff=0).shift(2*RIGHT)
        
        # 创建箭头旁边的文本  
        width_text = Tex(f"Width: {width:.2f}", color=BLUE).next_to([4,-2,0],2*DOWN)  
        height_text = Tex(f"Height: {height}", color=PINK).next_to([1,1.3,0], RIGHT).rotate(PI/2)

        # 创建表示横线 Y 坐标的箭头  
        y_coordinate_arrow = Arrow(start=ORIGIN, end=2.8 * UP, color=RED,buff=0).shift(2*LEFT)  
        y_coordinate_text = Tex(f"Yh: {horizontal_y_coordinate:.1f}", color=RED).next_to(y_coordinate_arrow, RIGHT).rotate(PI/2)  

        # 添加箭头和文本到场景  
        self.add(width_arrow1, height_arrow1,width_arrow2, height_arrow2, width_text, 
                 height_text, y_coordinate_arrow, y_coordinate_text)  

 

代码核心逻辑和算法解析:

  1. 背景设置

    self.camera.background_color = "#2F4F14" 

    设置场景的背景颜色为深绿色,提供一个视觉上的对比环境。

  2. 获取场景尺寸

    width = config.frame_width height = config.frame_height 

    使用 config.frame_width 和 config.frame_height 获取场景的宽度和高度。这些值将用于箭头的大小和位置。

  3. 绘制中心线

    horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(2.8 * UP) 
    vertical_line = Line(start=DOWN * 8, end=UP * 8, color=WHITE) 

    代码创建了两条线段,分别表示水平线和垂直线,水平线的 y 坐标被设置为上移 2.8 个单位。

  4. 获取坐标信息

    horizontal_y_coordinate = horizontal_line.get_start()[1] vertical_x_coordinate = vertical_line.get_start()[0] 

    通过调用 .get_start() 来获取线段的起始点坐标,进而提取 x 和 y 坐标。这个信息可以用于后面的箭头文本标记。

  5. 标记中心点

    center_point = Dot(point=ORIGIN, color=YELLOW, radius=0.1) 

    使用 Dot 在原点位置显示一个中心点。

  6. 创建虚线

    Cl1 = DashedLine(start=LEFT * 8, end=RIGHT * 8, color=WHITE) 
    Cl2 = DashedLine(start=DOWN * 8, end=UP * 8, color=WHITE) 

    这里再次创建虚线用于表示坐标轴,虽然之前已经有了线段,但这更清晰。

  7. 创建箭头

    width_arrow1 = Arrow(start=ORIGIN, end=RIGHT * width / 2, color=BLUE, buff=0).shift(2 * DOWN) 

    这里创建了多个箭头,分别指示页面的宽度和高度。使用 buff=0 表

 对得到的中心点进行应用

#页面分四个,并找到中心位置

from manim import *  

class InfiniteLines089(Scene):  
    def construct(self):  
        # 设置背景颜色  
        self.camera.background_color = "#3B4B51"    
        
        # 获取场景的宽度和高度  
        width = config.frame_width  
        height = config.frame_height

        print(width)
        print(height)
        print(UP)

        

        # 计算中心线的位置  
        horizontal_center = 0  # 横线的 y 轴位置  
        vertical_center = 0  # 竖线的 x 轴位置  

        # 创建无限横向线和竖向线  
        # 创建无限横向线  
        horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(2.8 * UP)  
        vertical_line = Line(start=DOWN * 8, end=UP * 8, color=WHITE) 

        # 横线的 y 坐标  
        horizontal_y_coordinate = horizontal_line.get_start()[1]  # 取起始点的 y 坐标  
        print(f"Horizontal line Y coordinate: {horizontal_y_coordinate}")  
        
        # 竖线的 x 坐标  
        vertical_x_coordinate = vertical_line.get_start()[0]  # 取起始点的 x 坐标  
        print(f"Vertical line X coordinate: {vertical_x_coordinate}")

        # 添加线条到场景  
        self.play(Create(horizontal_line))  
        self.play(Create(vertical_line))  

        # 计算每个象限的中心点并绘制圆  
        centers = [(-width / 4,(height/2-horizontal_y_coordinate)/2+horizontal_y_coordinate ),  # 第一象限  
                   (width / 4, (height/2-horizontal_y_coordinate)/2+horizontal_y_coordinate ),  # 第二象限  
                   (-width / 4, (2*horizontal_y_coordinate-height)/4), # 第三象限  
                   (width / 4, (2*horizontal_y_coordinate-height)/4)]  # 第四象限 
        
        shapes = []
#第三个空白位置,# 创建矩阵 A 和 B 的文本表示
        matrix_A = MathTex(r"A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}")
        matrix_B = MathTex(r"B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix}")
        ab=VGroup(matrix_A,matrix_B).arrange(RIGHT, buff=0.1)
        # 创建矩阵乘法的文本表示
        matrix_product = MathTex(r"A \times B = \begin{bmatrix} 1*5+2*7 & 1*6+2*8 \\ 3*5 + 4*7 & 3*6 + 4*8 \end{bmatrix}")
        ss=MathTex(r"= \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix}")
        matrix_product.scale(0.8)
        abn=VGroup(ab,matrix_product,ss).arrange(DOWN,buff=0.75)

# Add arrows# 添加向量和结果的箭头 
        vector_A = Vector([1, 3], color=BLUE)
        vector_B = Vector([2, 1], color=GREEN)
        vector_result = Vector([-3.5, -3.5], color=ORANGE)
        
        arrow_A = Arrow(ORIGIN, vector_A.get_end(), color=BLUE,buff=0)
        arrow_B = Arrow(ORIGIN, vector_B.get_end(), color=GREEN,buff=0)
        arrow_result = Arrow(ORIGIN, vector_result.get_end(), color=ORANGE,buff=0)
        AddAr=VGroup(arrow_A,arrow_B,arrow_result)

#第四个空白位置,坐标轴和响亮的添加
        number_plane = NumberPlane(x_range=(-1, 7, 1),y_range=(-1, 7, 1),x_length=6.6,y_length=6.6,
                            background_line_style={"stroke_color": TEAL,
                                                   "stroke_width": 4,
                                                   "stroke_opacity": 0.6
                                                  }
                                  )


        all4=VGroup(number_plane,AddAr)
        

        object_classes = [Text("数值运算",font_size=44,color=WHITE),    # 椭圆  
                          Text("几何直观",font_size=44,color=WHITE),                       # 星形  
                          abn, # 长方形  
                          all4]  # 六边形  
        
        for (x, y), shape in zip(centers, object_classes):  
            shape.move_to(RIGHT * x + UP * y)  # 移动到中心点  
            shapes.append(shape)  # 添加到形状列表  

        # 添加所有形状到场景  
        for shape in shapes:  
            self.play(Create(shape))  
                   
        

        self.wait(2)  # 保持场景2秒
%manim -qm -v WARNING InfiniteLines089

 运行结果;

        在manim中获取并定位不规则页面的中心位置可以通过一些数学计算和几何原理来实现。首先,需要确定页面的边界或轮廓,可以使用Polygon类或自定义的路径来表示页面的形状。然后,可以通过计算页面的重心或质心来确定页面的中心位置。重心是页面所有点的平均位置,可以通过计算所有点的坐标的平均值来得到。另外,还可以利用页面的边界框来确定中心位置,边界框是包围页面的最小矩形,中心位置即为边界框的中心点。通过这些方法,可以在manim中轻松获取并定位不则页面的中心位置,从而进行后续的动画或布局设计。

绝对中心点和相对中心点

        绝对中心点和相对中心点是描述中心位置的两种概念,通常用于不同的上下文中。以下是这两种中心点的定义和主要区别:

1. 绝对中心点

定义:绝对中心点是指在一个特定的空间或集合中,可以被明确地定义为中心的点。它通常与参考点无关,具有固定的坐标或数值,并且在某种意义上表示该空间或集合的"中心"。

例子

  • 在几何图形中,圆的中心是一个绝对中心点,所有点到圆心的距离都相等。
  • 在二维坐标系中,一个几何形状的重心(如三角形的质心)可以视为其绝对中心点。

2. 相对中心点

定义:相对中心点是基于某种参考框架或其他点的位置来定义的中心。它是相对的,可能会因为观察者的位置或比较对象的变化而改变。

例子

  • 在社会网络中,一个人的影响力可以被视为相对中心点,依赖于他与其他人的关系网络。
  • 在空间布局中,某个区域的中心可能相对于周围建筑或道路的位置而变化。

总结

  • 绝对中心点是固定的、独立于外部因素的中心位置,而相对中心点则是依赖于比较和参考框架的,受到周边环境影响。
  • 理解这两种中心点的概念可以帮助我们在不同的领域中更好地分析和描述数据、现象和空间关系。

;