Geometry

TipableVMobject

class manimlib.mobject.geometry.TipableVMobject(**kwargs)

可以带箭头的物体(实现了和箭头 tip 有关的方法)

  • tip_config 字典中传入与箭头相关的参数,最终会将这个字典中的参数传入 ArrowTip 类来生成箭头。 这一部分将在 ArrowTip 中详细阐述。

初始化样式,VMobject 的样式有以下

  • fill 填充样式

    • 颜色: fill_colorcolor

    • 不透明度: fill_opacity

  • stroke 线条样式

    • 颜色: stroke_colorcolor

    • 宽度: stroke_width

    • 不透明度: stroke_opacity

  • gloss 光泽

  • shadow 阴影

  • reflectiveness 反光度

其中, color, opacity, width 属性均可以为一个列表,在渲染时会按照列表对其进行补间

add_tip(at_start: bool = False, **kwargs)

添加箭头

  • at_start : True 时在开头添加箭头,反之在结尾(默认为 False 在末尾)

  • **kwargs 中可以加入 tip_config 的参数

create_tip(at_start: bool = False, **kwargs)manimlib.mobject.geometry.ArrowTip

返回箭头,参数同 add_tip

get_end() → numpy.ndarray

获取物件结束点

get_length() → float

获取起止点之间的直线距离

get_start() → numpy.ndarray

获取物件起始点

get_tip()manimlib.mobject.geometry.ArrowTip

返回第一个 tip,如果没有则抛出异常

get_tips()manimlib.mobject.types.vectorized_mobject.VGroup

返回一个包含首尾 tips 的 VGroup,没有则为空

get_unpositioned_tip(**kwargs)manimlib.mobject.geometry.ArrowTip

返回没有定位的箭头,参数只有 tip_config

pop_tips()manimlib.mobject.types.vectorized_mobject.VGroup

删除并返回 tips

Arc

class manimlib.mobject.geometry.Arc(start_angle: float = 0, angle: float = 1.5707963267948966, **kwargs)

圆弧

传入 start_angle 表示起始的角度,angle 表示圆心角

  • radius : 圆弧半径

  • num_components : 数越大越精细

  • arc_center : 圆弧的中心

get_arc_center() → numpy.ndarray

获取圆弧圆心

get_start_angle() → float

获取起始角度

get_stop_angle() → float

获取终止角度

move_arc_center_to(point: numpy.ndarray)

将圆弧圆心移动到 point 的位置

ArcBetweenPoints

class manimlib.mobject.geometry.ArcBetweenPoints(start: numpy.ndarray, end: numpy.ndarray, angle: float = 1.5707963267948966, **kwargs)

两点之间的圆弧

传入 start, end 表示起点终点,angle 表示圆心角

其余关键字参数同 Arc

CurvedArrow

class manimlib.mobject.geometry.CurvedArrow(start_point: numpy.ndarray, end_point: numpy.ndarray, **kwargs)

弯曲的单向箭头

start_pointend_point 的弯曲箭头,圆心角为90°

其余关键字参数同 Arc

CurvedDoubleArrow

class manimlib.mobject.geometry.CurvedDoubleArrow(start_point: numpy.ndarray, end_point: numpy.ndarray, **kwargs)

弯曲的双向箭头

start_pointend_point 的弯曲双向箭头,圆心角为90°

其余关键字参数同 Arc

Circle

class manimlib.mobject.geometry.Circle(start_angle: float = 0, **kwargs)

参数同 Arc ,半径使用 radius (来自 Arc )

get_radius() → float

获取圆的半径

point_at_angle(angle: float) → numpy.ndarray

返回圆上距离起点(默认在x轴)角度为 angle 的点

surround(mobject: manimlib.mobject.mobject.Mobject, dim_to_match: int = 0, stretch: bool = False, buff: float = 0.25)

让圆环绕住物体(dim_to_match和stretch无效,始终为圆)

Dot

class manimlib.mobject.geometry.Dot(point: numpy.ndarray = array([0., 0., 0.]), **kwargs)

点(半径默认为0.08)

传入参数 point 表示点的位置,其余同 Arc

SmallDot

class manimlib.mobject.geometry.SmallDot(point: numpy.ndarray = array([0., 0., 0.]), **kwargs)

小点(半径默认为0.04)

传入参数 point 表示点的位置,其余同 Arc

Ellipse

class manimlib.mobject.geometry.Ellipse(**kwargs)

椭圆

宽度为 width,高度为 height

AnnularSector

class manimlib.mobject.geometry.AnnularSector(start_angle: float = 0, angle: float = 1.5707963267948966, **kwargs)

扇环

  • inner_radius : 内圆半径

  • outer_radius : 外圆半径

  • 其余同 Arc

传入 start_angle 表示起始的角度,angle 表示圆心角

  • radius : 圆弧半径

  • num_components : 数越大越精细

  • arc_center : 圆弧的中心

Sector

class manimlib.mobject.geometry.Sector(start_angle: float = 0, angle: float = 1.5707963267948966, **kwargs)

扇形

即内圆半径为 0 的扇环

传入 start_angle 表示起始的角度,angle 表示圆心角

  • radius : 圆弧半径

  • num_components : 数越大越精细

  • arc_center : 圆弧的中心

Annulus

class manimlib.mobject.geometry.Annulus(start_angle: float = 0, **kwargs)

圆环

  • inner_radius : 内圆半径

  • outer_radius : 外圆半径

  • 其余同 CircleArc

参数同 Arc ,半径使用 radius (来自 Arc )

Line

class manimlib.mobject.geometry.Line(start: numpy.ndarray = array([- 1., 0., 0.]), end: numpy.ndarray = array([1., 0., 0.]), **kwargs)

直线

传入 start, end 为线段起点终点

  • buff : 为两端距离 start,end 的距离(默认为0)

  • path_arc : 如果有此关键字参数,则使用 ArcBetweemPointspath_arc 表示角度

get_angle() → float

获取直线倾斜角

get_projection(point: numpy.ndarray) → numpy.ndarray

返回点在直线上的投影

get_slope() → float

获取直线斜率

get_unit_vector() → numpy.ndarray

获取直线方向上的单位向量

get_vector() → numpy.ndarray

获取直线的方向向量

pointify(mob_or_point: manimlib.mobject.mobject.Mobject | numpy.ndarray, direction: Optional[numpy.ndarray, None] = None) → numpy.ndarray

将一个参数传递给 Line (或子类) 并将其转换为一个 3D 点。

put_start_and_end_on(start: numpy.ndarray, end: numpy.ndarray)

把直线的首尾放在 start, end

set_angle(angle: float, about_point: Optional[numpy.ndarray, None] = None)

设置直线倾斜角为 angle

set_length(length: float, **kwargs)

缩放到 length 长度

set_path_arc(new_value: float) → None

设置 path_arc

DashedLine

class manimlib.mobject.geometry.DashedLine(*args, **kwargs)

虚线

使用 DashedVMobject

  • dash_length : 每段虚线的长度,默认为0.05

get_end() → numpy.ndarray

获取物件结束点

get_start() → numpy.ndarray

获取物件起始点

TangentLine

class manimlib.mobject.geometry.TangentLine(vmob: manimlib.mobject.types.vectorized_mobject.VMobject, alpha: float, **kwargs)

切线

传入 vmob 表示需要做切线的物体,alpha 表示切点在 vmob 上的比例

  • length : 切线长度

  • d_alpha : 精细程度,越小越精细(默认1e-6)

Elbow

class manimlib.mobject.geometry.Elbow(**kwargs)

折线(一般用作直角符号)

width 表示宽度,angle 表示角度

Arrow

class manimlib.mobject.geometry.Arrow(start: numpy.ndarray = array([- 1., 0., 0.]), end: numpy.ndarray = array([1., 0., 0.]), **kwargs)

带箭头的直线,箭头大小自动

  • buff : 默认为0.25

  • max_tip_length_to_length_ratio : 箭头长度和直线长度最大比例(默认0.25)

  • max_stroke_width_to_length_ratio : 线条粗细和直线长度最大比例(默认5)

该类在 manimgl 版本中进行了重构,使用 add_tip 可能会导致箭头大小不统一

(grant又把箭头重写了一遍)

传入 start, end 为线段起点终点

  • buff : 为两端距离 start,end 的距离(默认为0)

  • path_arc : 如果有此关键字参数,则使用 ArcBetweemPointspath_arc 表示角度

reset_tip()

重置箭头

set_stroke(color: ManimColor | Iterable[ManimColor] | None = None, width: float | Iterable[float] | None = None, *args, **kwargs)

设置轮廓线(轮廓线浮于填充色上方)

FillArrow

class manimlib.mobject.geometry.FillArrow(start: numpy.ndarray = array([- 1., 0., 0.]), end: numpy.ndarray = array([1., 0., 0.]), **kwargs)

箭头,其本质是一个七边形

传入 start, end 为线段起点终点

  • buff : 为两端距离 start,end 的距离(默认为0)

  • path_arc : 如果有此关键字参数,则使用 ArcBetweemPointspath_arc 表示角度

get_end() → numpy.ndarray

获取物件结束点

get_start() → numpy.ndarray

获取物件起始点

put_start_and_end_on(start: numpy.ndarray, end: numpy.ndarray)

把直线的首尾放在 start, end

scale(*args, **kwargs)

缩放箭头,自动调节箭头大小和线条宽度

set_path_arc(path_arc: float)

设置 path_arc

Vector

class manimlib.mobject.geometry.Vector(direction: numpy.ndarray = array([1., 0., 0.]), **kwargs)

向量

即起点为ORIGIN的箭头,终点为 direction

  • buff 默认设为了 0

DoubleArrow

class manimlib.mobject.geometry.DoubleArrow(*args, **kwargs)

双向直箭头

参数和 Arrow 一致

CubicBezier

class manimlib.mobject.geometry.CubicBezier(a0: numpy.ndarray, h0: numpy.ndarray, h1: numpy.ndarray, a1: numpy.ndarray, **kwargs)

三阶贝塞尔曲线

测试中发现这个三阶贝塞尔曲线不准

传入 points 表示构成贝塞尔曲线的点集

Polygon

class manimlib.mobject.geometry.Polygon(*vertices: numpy.ndarray, **kwargs)

多边形

传入多个 vertices (点坐标)表示顶点

get_vertices() → list

获取所有顶点

round_corners(radius: Optional[float, None] = None)

形成圆角(圆角半径为 radius

RegularPolygon

class manimlib.mobject.geometry.RegularPolygon(n: int = 6, **kwargs)

正多边形

传入数字 n 表示边数

Triangle

class manimlib.mobject.geometry.Triangle(**kwargs)

正三角形

使用 RegularPolygon

ArrowTip

class manimlib.mobject.geometry.ArrowTip(**kwargs)

箭头标志

箭头大小不自动,需要手动设置

  • width : 箭头的宽度

  • length : 箭头的长度

  • tip_style自定义箭头的样式
    • tip_style=0 : 三角形

    • tip_style=1 : 箭头内部带有弧线

    • tip_style=2 : 圆形

get_base() → numpy.ndarray

获取箭头尾部的点

get_tip_point() → numpy.ndarray

获取箭头首部的点

Rectangle

class manimlib.mobject.geometry.Rectangle(width: Optional[float, None] = None, height: Optional[float, None] = None, **kwargs)

矩形

使用 Polygon

  • height : 矩形高度

  • width : 矩形宽度

Square

class manimlib.mobject.geometry.Square(side_length: float = 2.0, **kwargs)

正方形

side_length 是正方形边长

RoundedRectangle

class manimlib.mobject.geometry.RoundedRectangle(**kwargs)

圆角矩形

调用了 round_cornersRectangle

  • corner_radius 为圆角半径