跳转至

圆与弧

影片代码
import manimgx as m


class CirclesAndArcs(m.Scene):
    def construct(self) -> None:
        shapes = m.VGroup(
            m.Circle(color=m.BLUE),
            m.Dot(radius=0.3, color=m.YELLOW),
            m.Ellipse(width=2.6, height=1.4, color=m.GREEN),
            m.Arc(radius=1, start_angle=0, angle=3 * m.PI / 2, color=m.RED),
            m.Annulus(inner_radius=0.5, outer_radius=1, color=m.TEAL),
            m.Sector(radius=1.1, angle=2 * m.PI / 3, color=m.GOLD),
        )
        names = ["Circle", "Dot", "Ellipse", "Arc", "Annulus", "Sector"]
        cells = m.VGroup()
        for shape, name in zip(shapes, names, strict=True):
            label = m.Text(name, font="monospace", font_size=30)
            cells.add(m.VGroup(shape, label.next_to(shape, m.DOWN, buff=0.4)))
        cells.arrange_in_grid(rows=2, buff=(1.2, 0.8))
        self.play(m.LaggedStart(*[m.Create(cell[0]) for cell in cells], lag_ratio=0.15))
        self.play(m.FadeIn(m.VGroup(*[cell[1] for cell in cells])))
        self.wait()

圆是一段绕了一整圈的弧。弧是圆的一部分:从一个起始角开始,逆时针转过一定角度。点是一个小的实心圆,用于标记一个位置。圆环是两个圆之间的区域,而圆环或圆盘的一片是一个扇形。

弧的末端如同线一样可以带有箭头尖端:参见 线与箭头。

Circle

代码
import manimgx as m


class CircleExample(m.Scene):
    def construct(self) -> None:
        circles = m.VGroup(
            m.Circle(color=m.BLUE),
            m.Circle(radius=1.5, color=m.GREEN, fill_opacity=0.5),
            m.Circle(radius=2, color=m.YELLOW, stroke_width=12),
        ).arrange(buff=1)
        self.play(m.Create(circles))

圆:从其最右点起逆时针绘制,未加样式时为红色。

m.Circle(radius=None, color=None, *, num_components=9, arc_center=ORIGIN, **kwargs)
radius

半径,以场景单位计;None 表示 1。

color

颜色,可按位置给出(Circle(1, BLUE));None 表示红色。

num_components

经多少个锚点绘制:圆为比其少一的三次贝塞尔弧。

arc_center

圆心所在位置。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

还接受 箭头关键字。

源码

manimgx\mobjects\shapes.py

def __init__(
    self,
    radius: float | None = None,
    color: Colors | None = None,
    *,
    num_components: int = 9,
    arc_center: Point3DLike = ORIGIN,
    **kwargs: Unpack[TippedBase],
) -> None:
    style = Tipped(**kwargs) if color is None else Tipped(**kwargs, color=color)
    super().__init__(
        radius=radius,
        start_angle=0,
        angle=TAU,
        num_components=num_components,
        arc_center=arc_center,
        **style,
    )

surround

代码
import manimgx as m


class CircleSurroundExample(m.Scene):
    def construct(self) -> None:
        word = m.Text("manimgx", font_size=120)
        ring = m.Circle(color=m.YELLOW).surround(word)
        self.add(word)
        self.play(m.Create(ring))

将圆适配到某 mobject 周围:经过其包围盒的角,再放大 buffer_factor, 然后向外移 buff。

circle.surround(mobject, dim_to_match=0, stretch=False, buff=0, *, buffer_factor=1.2)
mobject

要包围的 mobject。

dim_to_match

mobject 的维度(0、1 或 2),圆首先适配到该维度, 然后再增长到各角。

stretch

第一次适配是否将圆拉伸为匹配包围盒的椭圆。

buff

圆向外再移多少,以场景单位计。

buffer_factor

圆比经过各角大多少。

源码

manimgx\mobjects\shapes.py

def surround(
    self,
    mobject: Mobject,
    dim_to_match: int = 0,
    stretch: bool = False,
    buff: float = 0,
    *,
    buffer_factor: float = 1.2,
) -> Self:
    """将圆适配到某 mobject 周围:经过其包围盒的角,再放大 `buffer_factor`,
    然后向外移 `buff`。

    Args:
        mobject: 要包围的 mobject。
        dim_to_match: `mobject` 的维度(0、1 或 2),圆首先适配到该维度,
            然后再增长到各角。
        stretch: 第一次适配是否将圆拉伸为匹配包围盒的椭圆。
        buff: 圆向外再移多少,以场景单位计。
        buffer_factor: 圆比经过各角大多少。

    Examples:
        ```python
        import manimgx as m


        class CircleSurroundExample(m.Scene):
            def construct(self) -> None:
                word = m.Text("manimgx", font_size=120)
                ring = m.Circle(color=m.YELLOW).surround(word)
                self.add(word)
                self.play(m.Create(ring))
        ```
    """
    self.replace(mobject, dim_to_match, stretch)
    self.width = np.sqrt(mobject.width**2 + mobject.height**2)
    self.scale(buffer_factor)
    return self.scale((self.width / 2 + buff) / (self.width / 2)) if buff else self

point_at_angle

圆上从其起点(最右点)起某角度处的点。

circle.point_at_angle(angle)
angle

角度,以弧度计,逆时针;任意角度会回绕。

返回 该点,以场景坐标表示。

源码

manimgx\mobjects\shapes.py

def point_at_angle(self, angle: float) -> Point3D:
    """圆上从其起点(最右点)起某角度处的点。

    Args:
        angle: 角度,以弧度计,逆时针;任意角度会回绕。

    Returns:
        该点,以场景坐标表示。
    """
    proportion = angle / TAU
    proportion -= np.floor(proportion)
    return self.point_from_proportion(proportion)

from_three_points

经过三点的圆。

Circle.from_three_points(p1, p2, p3, **kwargs)
p1

圆上一点。

p2

圆上第二点。

p3

圆上第三点,不在过另两点的直线上。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

还接受 箭头关键字。

返回 一个新圆。

源码

manimgx\mobjects\shapes.py

@staticmethod
def from_three_points(
    p1: Point3DLike, p2: Point3DLike, p3: Point3DLike, **kwargs: Unpack[Tipped]
) -> Circle:
    """经过三点的圆。

    Args:
        p1: 圆上一点。
        p2: 圆上第二点。
        p3: 圆上第三点,不在过另两点的直线上。
        **kwargs: [样式关键字][manimgx.drawing.paint.Style]。

    Returns:
        一个新圆。
    """
    center = line_intersection(
        perpendicular_bisector([np.asarray(p1), np.asarray(p2)]),
        perpendicular_bisector([np.asarray(p2), np.asarray(p3)]),
    )
    radius = float(np.linalg.norm(np.asarray(p1, dtype=float) - center))
    return Circle(radius=radius, **kwargs).shift(center)

Dot

DotExample
代码
import manimgx as m


class DotExample(m.Scene):
    def construct(self) -> None:
        self.add(
            m.Dot([-5, 0, 0]),
            m.Dot([-3.5, 0, 0], radius=0.2, color=m.BLUE),
            m.Dot([-1, 0, 0], radius=0.6, color=m.YELLOW),
            m.Dot([3, 0, 0], radius=1.5, color=m.GREEN, fill_opacity=0.5),
        )

点:一个小填充圆盘,未加样式时为白色且无轮廓。

m.Dot(point=ORIGIN, radius=DEFAULT_DOT_RADIUS, **kwargs)
point

其圆心所在位置。

radius

其半径,以场景单位计(默认 0.08)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

还接受 箭头关键字。

源码

manimgx\mobjects\shapes.py

def __init__(
    self,
    point: Point3DLike = ORIGIN,
    radius: float = DEFAULT_DOT_RADIUS,
    **kwargs: Unpack[Tipped],
) -> None:
    super().__init__(radius=radius, arc_center=point, **kwargs)

Ellipse

EllipseExample
代码
import manimgx as m


class EllipseExample(m.Scene):
    def construct(self) -> None:
        ellipses = m.VGroup(
            m.Ellipse(),
            m.Ellipse(width=2, height=4, color=m.BLUE),
            m.Ellipse(width=5, height=2, color=m.YELLOW, fill_opacity=0.5),
        ).arrange(buff=1)
        self.add(ellipses)

椭圆:拉伸到某宽度和高度的圆,未加样式时为红色。

与圆一样,从其最右点起逆时针绘制。

m.Ellipse(width=2, height=1, **kwargs)
width

其宽度,以场景单位计:沿 x 方向的跨度。

height

其高度,以场景单位计:沿 y 方向的跨度。

num_components

弧线所经过的锚点数:它比三次贝塞尔曲线数少一(默认 9)。

arc_center

弧线圆心所在位置,以场景坐标表示(默认 ORIGIN)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

源码

manimgx\mobjects\shapes.py

def __init__(
    self, width: float = 2, height: float = 1, **kwargs: Unpack[ArcOptions]
) -> None:
    super().__init__(**kwargs)
    self.stretch_to_fit_width(width)
    self.stretch_to_fit_height(height)

Arc

代码
import manimgx as m


class ArcExample(m.Scene):
    def construct(self) -> None:
        arcs = m.VGroup(
            m.Arc(radius=1.5, angle=m.PI, color=m.BLUE),
            m.Arc(radius=1.5, start_angle=m.PI / 2, angle=3 * m.PI / 2),
            m.Arc(radius=1.5, angle=-m.PI / 2, color=m.YELLOW),
        ).arrange(buff=1.5)
        labels = ("angle=PI", "start_angle=PI/2\nangle=3*PI/2", "angle=-PI/2")
        for arc, label in zip(arcs, labels):
            self.add(m.Text(label, font_size=28).next_to(arc, m.DOWN))
        self.play(m.Create(arcs, run_time=3))

圆的一段弧:从角度 start_angle 起转过 angle,angle 为正时逆时针; 未加样式时为白色。

角度以弧度计,绕弧的圆心,从正 x 轴起逆时针。弧线经过 num_components 个 沿其均匀分布的点,由三次贝塞尔曲线连接。

m.Arc(radius=1.0, start_angle=0, angle=TAU / 4, num_components=9, arc_center=ORIGIN, **kwargs)
radius

半径,以场景单位计;None 表示 1。

start_angle

弧线第一个点的角度。

angle

弧线行进多远:为正时逆时针,为负时顺时针;TAU 表示整圆。

num_components

经多少个锚点绘制:弧线为比其少一的三次贝塞尔曲线。

arc_center

其圆心所在位置。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

还接受 箭头关键字。

源码

manimgx\mobjects\shapes.py

def __init__(
    self,
    radius: float | None = 1.0,
    start_angle: float = 0,
    angle: float = TAU / 4,
    num_components: int = 9,
    arc_center: Point3DLike = ORIGIN,
    **kwargs: Unpack[Tipped],
):
    if radius is None:
        radius = 1.0
    self.radius = radius
    self.num_components = num_components
    self.arc_center: Point3D = np.asarray(arc_center)
    self.start_angle = start_angle
    self.angle = angle
    self._failed_to_get_center: bool = False
    super().__init__(**kwargs)

get_arc_center

弧的圆心,即其当前位置,位于其所在的任一平面内:经过其第一条曲线 两端和中点的圆的圆心。

若不存在(直线路径),则为原点,并发出警告。

arc.get_arc_center(warning=True)
warning

当圆心无法找到时是否发出警告。

返回 该点,以场景坐标表示。

源码

manimgx\mobjects\shapes.py

def get_arc_center(self, warning: bool = True) -> Point3D:
    """弧的圆心,即其当前位置,位于其所在的任一平面内:经过其第一条曲线
    两端和中点的圆的圆心。

    若不存在(直线路径),则为原点,并发出警告。

    Args:
        warning: 当圆心无法找到时是否发出警告。

    Returns:
        该点,以场景坐标表示。
    """
    a1, h1, h2, a2 = self.points[:4]
    if np.all(a1 == a2):
        return np.copy(a1)
    middle = (a1 + 3 * (h1 + h2) + a2) / 8  # on the circle, as an arc's curve is
    u, v = a1 - middle, a2 - middle
    normal = np.cross(u, v)
    if np.linalg.norm(normal) <= 1e-12 * max(u @ u, v @ v):
        if warning:
            warnings.warn(
                "Can't find Arc center, using ORIGIN instead", stacklevel=1
            )
        self._failed_to_get_center = True
        return np.array(ORIGIN)
    return middle + np.cross((u @ u) * v - (v @ v) * u, normal) / (
        2 * normal @ normal
    )

move_arc_center_to

移动弧线使其圆心位于某点。

arc.move_arc_center_to(point)
point

圆心目标位置,以场景坐标表示。

源码

manimgx\mobjects\shapes.py

def move_arc_center_to(self, point: Point3DLike) -> Self:
    """移动弧线使其圆心位于某点。

    Args:
        point: 圆心目标位置,以场景坐标表示。
    """
    self.shift(point - self.get_arc_center())
    return self

stop_angle

弧线结束的角度:其最后一个点关于其 圆心 的角度。

arc.stop_angle()

返回 角度,以弧度计,从正 x 轴起逆时针,范围从 0 到 TAU。

源码

manimgx\mobjects\shapes.py

def stop_angle(self) -> float:
    """弧线结束的角度:其最后一个点关于其 [圆心][manimgx.Arc.get_arc_center]
    的角度。

    Returns:
        角度,以弧度计,从正 x 轴起逆时针,范围从 0 到 TAU。
    """
    return angle_of_vector(self.points[-1] - self.get_arc_center()) % TAU

ArcBetweenPoints

代码
import manimgx as m


class ArcBetweenPointsExample(m.Scene):
    def construct(self) -> None:
        start, end = 3 * m.LEFT + m.DOWN, 3 * m.RIGHT + m.DOWN
        arcs = m.VGroup(
            m.ArcBetweenPoints(start, end, color=m.BLUE),
            m.ArcBetweenPoints(start, end, radius=-4, color=m.GREEN),
            m.ArcBetweenPoints(start, end, angle=-m.PI, color=m.YELLOW),
        )
        self.add(m.Dot(start, radius=0.12), m.Dot(end, radius=0.12))
        self.play(m.Create(arcs, run_time=3))

从一点到另一点的弧,经过某角度或具有某半径;未加样式时为白色。

从 start 到 end,正角度逆时针旋转,使弧向直线路径右侧弯曲; 负角度向左弯曲,0 使其为直线段。

m.ArcBetweenPoints(start, end, angle=TAU / 4, radius=None, **kwargs)
start

弧的起点。

end

弧的终点。

angle

弧在行进中所转过的角度,以弧度计。

radius

其圆的半径,以场景单位计,代替 angle:该半径的较短弧, 向右弯曲,或为负时向左。必须至少为两端距离的一半。None 表示使用 angle。

num_components

弧线所经过的锚点数:它比三次贝塞尔曲线数少一(默认 9)。

arc_center

弧线圆心所在位置,以场景坐标表示(默认 ORIGIN)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

源码

manimgx\mobjects\shapes.py

def __init__(
    self,
    start: Point3DLike,
    end: Point3DLike,
    angle: float = TAU / 4,
    radius: float | None = None,
    **kwargs: Unpack[ArcOptions],
) -> None:
    if radius is not None:
        self.radius = radius
        if radius < 0:
            sign = -2
            radius *= -1
        else:
            sign = 2
        halfdist = np.linalg.norm(np.array(start) - np.array(end)) / 2
        if radius < halfdist:
            raise ValueError(
                "ArcBetweenPoints called with a radius that is\n                   "
                "         smaller than half the distance between the points."
            )
        arc_height = radius - np.sqrt(radius**2 - halfdist**2)
        angle = np.arccos((radius - arc_height) / radius) * sign
    super().__init__(radius=radius, angle=angle, **kwargs)
    if angle == 0:
        self.set_points_as_corners(np.array([LEFT, RIGHT]))
    self.put_start_and_end_on(start, end)
    if radius is None:
        center = self.get_arc_center(warning=False)
        if not self._failed_to_get_center:
            self.radius = cast(
                float, np.linalg.norm(np.array(start) - np.array(center))
            )
        else:
            self.radius = np.inf

Annulus

AnnulusExample
代码
import manimgx as m


class AnnulusExample(m.Scene):
    def construct(self) -> None:
        rings = m.VGroup(
            m.Annulus(),
            m.Annulus(inner_radius=1.5, outer_radius=2, color=m.BLUE),
            m.Annulus(inner_radius=0.5, outer_radius=1.5, color=m.YELLOW),
        ).arrange(buff=1)
        self.add(rings)

环:两个同心圆之间的区域;未加样式时为白色、填充且无轮廓。

内圆顺时针运行,与外圆方向相反,因此是填充中的洞。

m.Annulus(inner_radius=1, outer_radius=2, mark_paths_closed=False, **kwargs)
inner_radius

内圆的半径,以场景单位计。

outer_radius

外圆的半径,以场景单位计。

mark_paths_closed

为兼容 Manim 而接受;被忽略。

num_components

弧线所经过的锚点数:它比三次贝塞尔曲线数少一(默认 9)。

arc_center

弧线圆心所在位置,以场景坐标表示(默认 ORIGIN)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

源码

manimgx\mobjects\shapes.py

def __init__(
    self,
    inner_radius: float = 1,
    outer_radius: float = 2,
    mark_paths_closed: bool = False,
    **kwargs: Unpack[ArcOptions],
) -> None:
    self.mark_paths_closed = mark_paths_closed
    self.inner_radius = inner_radius
    self.outer_radius = outer_radius
    super().__init__(**kwargs)

AnnularSector

AnnularSectorExample
代码
import manimgx as m


class AnnularSectorExample(m.Scene):
    def construct(self) -> None:
        sectors = m.VGroup(
            m.AnnularSector(),
            m.AnnularSector(1.5, 2, angle=m.PI, color=m.BLUE),
            m.AnnularSector(
                0.5, 2, angle=-3 * m.PI / 2, start_angle=m.PI, color=m.YELLOW
            ),
        ).arrange(buff=1)
        self.add(sectors)

环形扇区:两个同心弧之间、跨一个角度的区域;未加样式时为白色、 填充且无轮廓。

m.AnnularSector(inner_radius=1, outer_radius=2, angle=TAU / 4, start_angle=0, **kwargs)
inner_radius

内弧的半径,以场景单位计。

outer_radius

外弧的半径,以场景单位计。

angle

所跨的角度,以弧度计:从 start_angle 起逆时针,或为负时顺时针。

start_angle

其首条边的角度,以弧度计,从正 x 轴起逆时针。

num_components

弧线所经过的锚点数:它比三次贝塞尔曲线数少一(默认 9)。

arc_center

弧线圆心所在位置,以场景坐标表示(默认 ORIGIN)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

源码

manimgx\mobjects\shapes.py

def __init__(
    self,
    inner_radius: float = 1,
    outer_radius: float = 2,
    angle: float = TAU / 4,
    start_angle: float = 0,
    **kwargs: Unpack[ArcOptions],
) -> None:
    self.inner_radius = inner_radius
    self.outer_radius = outer_radius
    super().__init__(start_angle=start_angle, angle=angle, **kwargs)

Sector

SectorExample
代码
import manimgx as m


class SectorExample(m.Scene):
    def construct(self) -> None:
        sectors = m.VGroup(
            m.Sector(radius=2),
            m.Sector(radius=2, angle=m.PI / 3, start_angle=m.PI, color=m.BLUE),
            m.Sector(radius=2, angle=-5 * m.PI / 3, color=m.YELLOW),
        ).arrange(buff=1)
        self.add(sectors)

圆盘的扇形,即饼形切片:两条半径及其间弧线之间的区域;未加样式时为白色、 填充且无轮廓。

m.Sector(radius=1, **kwargs)
radius

其半径,以场景单位计。

angle

扇形所跨的角度,以弧度计:从 start_angle 起逆时针,或为负时顺时针 (默认 TAU / 4:四分之一圈)。

start_angle

其首条边的角度,以弧度计,从正 x 轴起逆时针(默认 0)。

num_components

弧线所经过的锚点数:它比三次贝塞尔曲线数少一(默认 9)。

arc_center

弧线圆心所在位置,以场景坐标表示(默认 ORIGIN)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

源码

manimgx\mobjects\shapes.py

def __init__(self, radius: float = 1, **kwargs: Unpack[SectorOptions]) -> None:
    super().__init__(inner_radius=0, outer_radius=radius, **kwargs)

ArcOptions

弧线的关键字,供构造弧线并传递它们的类使用:其绘制精度与位置, 以及样式和尖端关键字。

num_components

弧线所经过的锚点数:它比三次贝塞尔曲线数少一(默认 9)。

arc_center

弧线圆心所在位置,以场景坐标表示(默认 ORIGIN)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

SectorOptions

Sector 除半径外的关键字:其角度,以及弧线关键字。

angle

扇形所跨的角度,以弧度计:从 start_angle 起逆时针,或为负时顺时针 (默认 TAU / 4:四分之一圈)。

start_angle

其首条边的角度,以弧度计,从正 x 轴起逆时针(默认 0)。

num_components

弧线所经过的锚点数:它比三次贝塞尔曲线数少一(默认 9)。

arc_center

弧线圆心所在位置,以场景坐标表示(默认 ORIGIN)。

color

填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。

tip_length

add_tip 所生成尖端的长度,以场景单位计 (默认 0.35;Arrow 的可能更短)。

normal_vector

路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。

tip_style

路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的 fill_color 和 stroke_color 取路径的颜色。

fill_color

填充的颜色;未给出时为 color。多个颜色沿 sheen_direction 构成渐变。

fill_opacity

填充的不透明度,取值从 0 到 1(默认 0:无填充)。

stroke_color

描边的颜色;未给出时为 color。多个颜色构成渐变。

stroke_opacity

描边的不透明度,取值从 0 到 1(默认 1)。

stroke_width

描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。

background_stroke_color

绘制于填充之后的轮廓颜色(默认黑色)。

background_stroke_opacity

轮廓的不透明度,取值从 0 到 1(默认 1)。

background_stroke_width

轮廓的宽度,以场景单位的百分之一计(默认 0:无)。

sheen_factor

颜色朝 sheen_direction 变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。

sheen_direction

颜色变亮的方向(默认 UL)。

joint_type

描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。

cap_style

描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。

shade_in_3d

三维场景的光是否对该 mobject 着色。

material

其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。

name

mobject 的名称;未给出时为其类名。

z_index

其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。

target

MoveToTarget 将 mobject 移动至的状态。

angle

扇形所跨的角度,以弧度计:从 start_angle 起逆时针,或为负时顺时针 (默认 TAU / 4:四分之一圈)。

start_angle

其首条边的角度,以弧度计,从正 x 轴起逆时针(默认 0)。