Source code for manim_pymunk.utils.tools_func

"""物理工具函数模块。

该模块提供计算各种形状转动惯量的便利函数,用于配置Pymunk刚体的物理属性。
"""

from pymunk import (
    moment_for_box,
    moment_for_circle,
    moment_for_poly,
    moment_for_segment,
)


[docs] def get_moment_for_box(mass: float, width: float, height: float) -> float: """计算矩形形状的转动惯量。 基于矩形的质量、宽度和高度计算绕中心的转动惯量。 Args: mass (float): 矩形的质量。 width (float): 矩形的宽度。 height (float): 矩形的高度。 Returns: float: 转动惯量值。 """ return moment_for_box(mass=mass, size=(width, height))
[docs] def get_moment_for_circle( mass: float, inner_radius: float, outer_radius: float, x_offset: float = 0, y_offset: float = 0, ) -> float: """计算圆环/圆形的转动惯量。 基于圆环的质量、内外半径和偏移量计算转动惯量。 当内半径为0时,计算实心圆的转动惯量。 Args: mass (float): 圆环的质量。 inner_radius (float): 内半径。 outer_radius (float): 外半径。 x_offset (float, optional): 中心X偏移,默认为0。 y_offset (float, optional): 中心Y偏移,默认为0。 Returns: float: 转动惯量值。 """ return moment_for_circle( mass=mass, inner_radius=inner_radius, outer_radius=outer_radius, offset=(x_offset, y_offset), )
[docs] def get_moment_for_poly( mass: float, vertices: list[tuple[float, float]], x_offset: float = 0, y_offset: float = 0, stroke_width: float = 0, ) -> float: """计算多边形的转动惯量。 基于多边形的质量、顶点坐标和偏移量计算转动惯量。 Args: mass (float): 多边形的质量。 vertices (list[tuple[float, float]]): 多边形顶点列表,每个顶点为(x, y)坐标。 x_offset (float, optional): 中心X偏移,默认为0。 y_offset (float, optional): 中心Y偏移,默认为0。 stroke_width (float, optional): 形状的半径(用于线宽),默认为0。 Returns: float: 转动惯量值。 """ return moment_for_poly( mass=mass, vertices=vertices, offset=(x_offset, y_offset), radius=stroke_width )
[docs] def get_moment_for_line( mass: float, start: tuple[float, float], end: tuple[float, float], stroke_width: float, ) -> float: """计算线段的转动惯量。 基于线段的质量、端点和宽度计算转动惯量。 Args: mass (float): 线段的质量。 start (tuple[float, float]): 线段起点坐标(x, y)。 end (tuple[float, float]): 线段终点坐标(x, y)。 stroke_width (float): 线段的宽度(半径)。 Returns: float: 转动惯量值。 """ return moment_for_segment(mass=mass, a=start, b=end, radius=stroke_width)