line

class janim.items.geometry.line.Cmpt_VPoints_LineImpl(*args, **kwargs)

基类:Cmpt_VPoints, Generic

在线段中,对 Cmpt_VPoints 的进一步实现

put_start_and_end_on(start: Vect, end: Vect) Self

通过旋转和缩放,使得物件的起点和终点被置于 startend

property vector: ndarray
property unit_vector: ndarray
property angle: float
get_projection(point: Vect) ndarray

Return projection of a point onto the line

get_slope() float
set_angle(angle: float, about_point: Vect | None = None) Self
set_length(length: float, **kwargs)
property length: float
property arc_length: float
update_by_attrs(start=None, end=None, buff=None, path_arc=None) Self
update_points_by_attrs(start=None, end=None, buff=None, path_arc=None) Self
set_buff(buff: LineBuff) Self
set_path_arc(path_arc: float) Self
set_start_and_end(start: Points | Vect, end: Points | Vect) Self
static pointify_start_and_end(*args) tuple[ndarray, ndarray]
static pointify(input, direction=None) ndarray
class janim.items.geometry.line.Line(*args, **kwargs)

基类:GeometryShape

线段

参数:
  • start -- 线段起点,可为坐标向量或 Points 对象;默认为 LEFT

  • end -- 线段终点,可为坐标向量或 Points 对象;默认为 RIGHT

  • buff -- 线段两端的空余量,可为单个数值或者一个元组表示两端的空余量;可用负值表示向外延伸

  • path_arc -- 线段的弯曲弧度,默认为 00 表示直线,非零则是一段圆弧

  • **kwargs -- 其它参数

points
set_buff(buff: LineBuff) Self
set_path_arc(path_arc: float) Self
set_start_and_end(start: Points | Vect, end: Points | Vect) Self
reshape(start: Points | Vect | None = None, end: Points | Vect | None = None, *, buff: LineBuff | None = None, path_arc: float | None = None) Self

类似传递给 __init__ 的参数,重新设置几何物件的形状

可以缺省部分值,表示使用先前的;具体用法请参考 重设几何形状 文档教程

static build_points(start: ndarray, end: ndarray, buff: LineBuff, path_arc: float) ndarray

构建线段的点数据

基于起点、终点、两端空余量和弯曲弧度生成线段的点数组

参数:
  • start -- 线段的起点坐标

  • end -- 线段的终点坐标

  • buff -- 线段两端的空余量,可为单个数值或者一个元组表示两端的空余量;可用负值表示向外延伸

  • path_arc -- 线段的弯曲弧度;0 即为直线,非零则是一段圆弧

返回:

线段的点数据数组

static pointify_start_and_end(start: BoundingBox | Vect, end: BoundingBox | Vect) tuple[ndarray, ndarray]

将起点与终点输入解析为用于构造线段的三维坐标对

先基于两者的粗略位置计算方向向量,再在输入为边界框时沿该方向提取边界点,从而得到更符合连接方向的首尾点

参数:
  • start -- 起点,可为边界框对象或坐标

  • end -- 终点,可为边界框对象或坐标

返回:

解析后的 (start, end) 三维坐标

static pointify(input: BoundingBox | Vect, direction: Vect | None = None) ndarray

将输入解析为三维坐标点

若传入为边界框对象,未给定方向时返回中心点,给定方向时返回该方向上的边界点;若传入坐标序列,则补齐到 3 维后返回

参数:
  • input -- 边界框对象或坐标

  • direction -- 用于提取物件坐标,默认为 None 提取其中心点,或是指定一个方向提取其边界框上指定方向的点(使用 get_continuous()

返回:

解析得到的三维坐标

class janim.items.geometry.line.Cmpt_VPoints_DashedLineImpl(*args, **kwargs)

基类:Cmpt_VPoints_LineImpl, Generic

在虚线中,对 Cmpt_VPoints 的进一步实现

主要是对虚线根物件没有点数据导致部分方法不可用的 patch

get_start() ndarray

得到 points 的第一个点

get_end() ndarray

得到 points 的最后一个点

class janim.items.geometry.line.DashedLine(*args, **kwargs)

基类:Line, Group[VItem]

虚线

参数:
  • dash_length -- 每段虚线的长度

  • dashed_ratio -- 虚线段的占比,默认为 0.5,即虚线段与空白段长度相等,但可能因为虚线段描边存在粗细而导致视觉上空白长度略小

  • strict_by_length --

    虚线段长度是否严格遵从 dash_length,默认为 False

    • 当为 False 时,可能会微调以确保首尾都是完整的虚线段

    • 当为 True 时,不再微调,但是尾部虚线段可能不完整

    在静态使用的情境下,使用 False 会更美观;在动态创建的情境下,使用 True 可以避免频繁抖动

  • **kwargs -- 其它参数,另见 Line

警告

由于一些因素,DashedLine 并不完全具有 Line 的功能

这是由于 DashedLine 实际上将每段虚线作为子物件来实现,而去除了自己本身的 points 数据, 这会导致包括 .points.get() .anim.reshape(...) 等一些方法无法得到预期的效果或不可用

小技巧

虽然 .reshape(...) 可用,但是 .anim.reshape(...) 不可用, 因此如果你要对 DashedLine 作用动态动画,建议使用 ItemUpdater

points
reshape(start: Points | Vect | None = None, end: Points | Vect | None = None, *, buff: LineBuff | None = None, path_arc: float | None = None) Self

类似传递给 __init__ 的参数,重新设置几何物件的形状

可以缺省部分值,表示使用先前的;具体用法请参考 重设几何形状 文档教程

class janim.items.geometry.line.TangentLine(*args, **kwargs)

基类:Line

切线

  • 传入 vitem 表示需要做切线的物件,alpha 表示切点在 vitem 上的比例

  • length: 切线长度

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

class janim.items.geometry.line.Elbow(width: float = 0.2, angle: float = 0, **kwargs)

基类:MarkedItem, VItem

折线(一般用作直角符号),关于直接基于两条线创建的直角符号,另请参见 RightAngle

参数:
  • width -- 直角标记的边长

  • angle -- 起始角度

class janim.items.geometry.line.Angle(line1: Line, line2: Line, radius: float | None = None, quadrant: AngleQuadrant = (1, 1), other_angle: bool = False, dot: bool = False, dot_radius: float | None = None, dot_distance: float = 0.55, dot_color: JAnimColor = '#FFFFFF', elbow: bool = False, **kwargs)

基类:MarkedItem, VItem

一个圆弧或直角标记对象,用于表示两条线之间的夹角

  • radius: 圆弧的半径

  • quadrant:
    由两个整数构成的序列,用于确定应使用哪一个象限为基准;
    第一个值表示在第一条线上以终点(1)或起点(-1)为基准,第二个值同理作用于第二条线;
    可选值包括: (1, 1), (1, -1), (-1, 1), (-1, -1)
  • other_angle:
    在两个可能的夹角之间切换。默认 False,则弧线从 line1line2 按逆时针绘制;
    如果为 True,则按顺时针方向绘制
  • dot: 是否在弧线上添加一个点,通常用于指示直角

  • dot_radius: 点的半径,默认为弧半径的 1/10

  • dot_distance: 点到圆心的相对距离,其中 0 表示在圆心处,1 表示在圆弧上,默认为 0.55

  • dot_color: 点的颜色

  • elbow: 是否使用直角标记的形式,参考 RightAngle

get_lines() Group

返回一个包含构成该角的两个 LineGroup 对象

get_value(degrees: bool = False) float

获取该角的数值

  • degrees: 是否以角度的形式返回,默认为 False,即弧度制

static from_three_points(A: Vect, B: Vect, C: Vect, **kwargs) Angle

由三点构造一个角,表示 ∠ABC,点 B 为角的顶点

class janim.items.geometry.line.RightAngle(line1: Line, line2: Line, length: float | None = None, **kwargs)

基类:Angle

一个用于表示直角的 Elbow 样式的对象(L 形折角)

  • length: 直角标记的边长