Space_ops

manimlib/utils/space_ops.py 这个文件中主要实现了和空间坐标计算有关的函数


manimlib.utils.space_ops.get_norm(vect)

模长

返回向量vect的模长


manimlib.utils.space_ops.quaternion_mult(q1, q2)

四元数相乘

返回两个 四元数 q1,q2相乘的乘积


manimlib.utils.space_ops.quaternion_from_angle_axis(angle, axis)

根据轴-角确定的用于旋转的四元数 [cos(θ/2), sin(θ/2)u]

根据 轴-角 确定用于旋转的 四元数 返回[cos(angle/2), sin(abgle/2)*axis]


manimlib.utils.space_ops.angle_axis_from_quaternion(quaternion)

从四元数确定旋转轴-角

返回从四元数确定旋转的轴和角


manimlib.utils.space_ops.quaternion_conjugate(quaternion)

共轭四元数

返回quaternion的共轭四元数


manimlib.utils.space_ops.rotate_vector(vector, angle, axis=array([0.0, 0.0, 1.0]))

旋转向量 2D-复数运算 3D-四元数qvq_inv

返回将vector以axis为轴,旋转angle角度后的向量

  • 若vector是二维ndarray,则使用复数运算

  • 若vector是三维ndarray,则使用四元数运算


manimlib.utils.space_ops.thick_diagonal(dim, thickness=2)

对角线为1 其余为0,对角线宽度由thickness决定

>>> thick_diagonal(3, 1)
[[1, 0, 0],
 [0, 1, 0],
 [0, 0, 1]]
>>> thick_diagonal(3, 2)
[[1, 1, 0],
 [1, 1, 1],
 [0, 1, 1]]

返回一个dim*dim大小,对角线宽度为thickness的方阵


manimlib.utils.space_ops.rotation_matrix(angle, axis)

通过轴-角确定旋转矩阵

返回通过角angle轴axis确定的旋转矩阵


manimlib.utils.space_ops.rotation_about_z(angle)

沿z轴旋转angle角(右手螺旋)

返回沿z轴旋转angle的旋转矩阵


manimlib.utils.space_ops.z_to_vector(vector)

返回能使z轴变换到vector的矩阵

返回可以使z轴方向旋转到vector方向的变换矩阵


manimlib.utils.space_ops.angle_between(v1, v2)

返回两向量夹角

返回两向量v1,v2的夹角


manimlib.utils.space_ops.angle_of_vector(vector)

在xy平面上投影的极坐标θ

返回vector在xy平面投影的极坐标系下的theta


manimlib.utils.space_ops.angle_between_vectors(v1, v2)

返回两向量夹角

返回两向量v1,v2的夹角


manimlib.utils.space_ops.normalize(vect, fall_back=None)

返回vect的单位向量

  • 若vect为零向量,且fall_back=None,返回零向量

  • 若vect为零向量,且fall_back不为None,返回fall_back


manimlib.utils.space_ops.cross(v1, v2)

两向量叉积

返回两向量v1,v2的叉积


manimlib.utils.space_ops.get_unit_normal(v1, v2)

法向量

返回向量v1,v2确定的平面的法向量


manimlib.utils.space_ops.compass_directions(n=4, start_vect=array([1.0, 0.0, 0.0]))

将TAU分成n份,从start_vect开始返回沿每个方向的单位向量

将TAU分成n份,从start_vect开始返回沿每个方向的单位向量


manimlib.utils.space_ops.complex_to_R3(complex_num)

复数转化为坐标(z轴为0)

复数转化为坐标(z轴为0)


manimlib.utils.space_ops.R3_to_complex(point)

取坐标前两轴为复数

取坐标前两轴为复数


manimlib.utils.space_ops.complex_func_to_R3_func(complex_func)

将复函数转化为针对坐标的函数

将针对复数的函数转化为针对坐标的函数


manimlib.utils.space_ops.center_of_mass(points)

获取点集的重心

返回点集points的重心


manimlib.utils.space_ops.midpoint(point1, point2)

两点的中点

返回point1,point2的中点


manimlib.utils.space_ops.line_intersection(line1, line2)

求两直线交点:

point=line_intersection(line1.get_start_and_end(), line2.get_start_and_end())

返回两直线交点

  • 注意: 需要使用get_start_and_end()


manimlib.utils.space_ops.get_winding_number(points)

获取卷绕数(所有点一共绕过的角度)

返回卷绕数