Skip to content
鹤翔万里 edited this page Mar 19, 2020 · 3 revisions

utils文件夹中含有很多常用的函数

目录

  • bezier.py

    这个文件中主要处理了和贝塞尔曲线、插值有关的函数
    • bezier(points)
      返回由点集(锚点,控制点)确定的参数方程
      贝塞尔曲线的次数由points中点的个数确定
    • partial_bezier_points(points, a, b)
      给出贝塞尔曲线的点数组和两个01之间的数ab
      返回一个大小相同的数组,该数组描述原始贝塞尔曲线在间隔[a,b]上的部分
    • interpolate(start, end, alpha)
      线性插值
    • integer_interpolate(start, end, alpha)
      整数插值,返回两个数,第一个为插值结果(整数),第二个为和线性插值相差的小数部分
    • mid(start, end)
      返回(start+end)/2
    • inverse_interpolate(start, end, value)
      由插值的结果value,返回alpha
    • match_interpolate(new_start, new_end, old_start, old_end, old_value)
      匹配插值,给出原插值范围old_start,old_end和结果old_value
      返回以相同比例,插值范围为new_start,new_end的插值结果
    • get_smooth_handle_points(points)
      给出一系列锚点points,返回经过points的平滑贝塞尔曲线的一系列控制点
    • diag_to_matrix(l_and_u, diag)
      用矩阵以对角线形式填充矩阵
      l,u为非零下上对角线数,diag为将以对角线形式填充的矩阵
    • is_closed(points)
      检查曲线是否闭合(首尾锚点重合)

回到目录

  • color.py

    这个文件中主要处理了颜色
    • color_to_rgb(color)
      将颜色转换为RGB值,color可以为字符串(例"#66CCFF"),也可以为Color类
    • color_to_rgba(color, alpha=1)
      将颜色转换为RGB加上alpha透明度
    • rgb_to_color(rgb)
      将RGB颜色转换为Color类
    • rgba_to_color(rgba)
      将RGBA前三个数RGB转换为Color类
    • rgb_to_hex(rgb)
      将RGB转换为十六进制字符串表示
    • hex_to_rgb(hex_code)
      将十六进制字符串转换为RGB
    • invert_color(color)
      返回color的反色
    • color_to_int_rgb(color)
      将颜色转化为整数RGB
    • color_to_int_rgba(color, opacity=1.0)
      将颜色转化为整数RGBA
    • color_gradient(reference_colors, length_of_output)
      返回长度为length_of_output的颜色梯度数组
    • interpolate_color(color1, color2, alpha)
      在color1和color2之间插值,返回Color类表示的颜色
    • average_color(*colors)
      返回colors的平均颜色
    • random_bright_color()
      随机亮色
    • random_color()
      在COLOR_MAP中随机选取颜色
    • get_shaded_rgb(rgb, point, unit_normal_vect, light_source)
      获取从光源light_source到point着色的RGB

回到目录

  • config_ops.py

    这个文件中主要处理了CONFIG字典和类的属性
    • get_all_descendent_classes(Class)
      获取类Class的全部子类
    • filtered_locals(caller_locals)
      将caller_locals字典中去掉self, kwargs两个键值对
    • digest_config(obj, kwargs, caller_locals={})
      获取当前类和所有父类的CONFIG字典,转换为属性(优先级已经处理好)
      • 若要将当前所有局部变量也转化为属性,使用digest_config(self, kwargs, locals())
    • merge_dicts_recursively(*dicts)
      递归合并字典
      创建一个字典,其键集是所有输入字典的并集,每个键的值都基于列表中带有该键的第一个字典
      当值为字典时,将递归应用
    • soft_dict_update(d1, d2)
      合并字典,仅当d1没有该键时,才将d2的键值对添加到d1中
    • digest_locals(obj, keys=None)
      把当前局部变量设为属性

回到目录

  • file_ops.py

    这个文件中主要处理了文件的操作
    • add_extension_if_not_present(file_name, extension)
      如果file_name没有扩展名extension,则加上扩展名
    • guarantee_existence(path)
      返回path的绝对路径
      • 若path不存在,则创建
    • seek_full_path_from_defaults(file_name, default_dir, extensions)
      从默认值中查找完整路径,默认路径如下
      1. 当前目录下file_name文件
      2. default_dir下file_name文件和加上扩展名extensions的文件
    • get_sorted_integer_files(directory, min_index=0, max_index=np.inf, remove_non_integer_files=False, remove_indices_greater_than=None, extension=None)
      获取根据整数排序的文件(在partial_movie_files的合并中用到)

回到目录

  • images.py

    这个文件中主要处理了图片文件的读取
    • get_full_raster_image_path(image_file_name)
      使用seek_full_path_from_defaults获取图片位置\
      • 默认文件夹assets/raster_images/
      • 扩展名:[.jpg, .png, .gif]
    • drag_pixels(frames)
      拖拽像素(无用)
    • invert_image(image)
      反转图像

回到目录

  • iterables.py

    这个文件中主要处理了和列表字典处理有关的函数
    • remove_list_redundancies(l)
      对列表l去重,保留重复元素最后一次出现
    • list_update(l1, l2)
      从l1中删除l2中重复项,再与l2合并
    • list_difference_update(l1, l2)
      返回两列表中不同的项的列表
    • all_elements_are_instances(iterable, Class)
      iterable列表中的所有元素是否都为Class类
    • adjacent_n_tuples(objects, n)
      objects的相邻n元组(返回zip)
    • adjacent_pairs(objects)
      objects相邻对
    • batch_by_property(items, property_func)
      输入一个列表,返回一个元组列表(batch,prop)
      这样一个批中的所有项在放入property_func时都具有相同的输出
      并且将所有这些批链接在一起将得到原始列表(即保留顺序)
    • tuplify(obj)
      根据obj返回元组
      • 若obj为str类型,返回(obj, )
      • 尝试返回tuple(obj)
      • 若报错,返回(obj, )
    • stretch_array_to_length(nparray, length)
      将nparray扩展至length长度
    • make_even(iterable_1, iterable_2)
      将iterable_1和iterable_2调成一样的长度,不足的伸缩调整
    • make_even_by_cycling(iterable_1, iterable_2)
      将iterable_1和iterable_2调成一样的长度,不足的循环使用
    • remove_nones(sequence)
      将sequence中的None去除掉,并返回
    • concatenate_lists(*list_of_lists)
      串联列表list_of_lists

回到目录

  • paths.py

    这个文件中处理了和路径有关的函数
    • straight_path(start_points, end_points, alpha)
      直线路径,和线性插值相同
    • path_along_arc(arc_angle, axis=OUT)
      以axis为轴,arc_angle为圆心角的圆弧路径
      返回含有三个参数(start_points, end_points, alpha)的函数
    • clockwise_path()
      顺时针圆路径
      返回含有三个参数(start_points, end_points, alpha)的函数
    • counterclockwise_path()
      逆时针圆路径
      返回含有三个参数(start_points, end_points, alpha)的函数

回到目录

  • rate_functions.py

    这个文件中包含了一些定义的rate_func
    rate_func是以[0,1]为定义域的函数,可看作定义物体变换/运动的速率
    这个文件中的rate_functions图像如下 rate_functions

回到目录

  • simple_functions.py

    这个文件中包含了一些常用的简单函数
    • sigmoid(x)
      sigmoid函数,1/(1+e^(-x))
    • choose_using_cache(n, r)
      计算,并使用缓存
    • choose(n, r, use_cache=True)
      计算, 若use_cache=True则使用缓存,否则直接计算
    • get_num_args(function)
      获取function的参数个数
    • get_parameters(function)
      获取function的参数
    • clip_in_place(array, min_val=None, max_val=None)
      将ndarray中小于min的值全设为min,大于max的值全设为max,并返回
    • fdiv(a, b, zero_over_zero_value=None)
      计算a/b,若0/0则返回zero_over_zero_value
    • binary_search(function, target, lower_bound, upper_bound, tolerance=1e-4)
      二分查找

回到目录

  • sounds.py

    这个文件中主要处理了和音频有关的函数
    • play_chord(*nums)
      play和弦
    • play_error_sound()
      播放编译失败声音
    • play_finish_sound()
      播放编译成功声音
    • get_full_sound_file_path(sound_file_name)
      使用seek_full_path_from_defaults获取音频位置\
      • 默认文件夹assets/sounds/
      • 扩展名:[.wav, .mp3]
    • 注意: 播放编译成功/失败音频的方法 在输入命令时加上--sound选项
      • Linux系统安装sox后直接可以使用
      • Windows系统需要下载sox-14-4-1安装包(新版可能会报错),并将其中的sox.exe复制,重命名为play.exe,填好环境变量就可以使用了

回到目录

  • space_ops.py

    这个文件中主要处理了和空间坐标计算有关的函数
    • get_norm(vect)
      返回向量vect的模长
    • quaternion_mult(q1, q2)
      返回两个 四元数 q1,q2相乘的乘积
    • quaternion_from_angle_axis(angle, axis)
      根据 轴-角 确定用于旋转的 四元数
      返回[cos(angle/2), sin(abgle/2)*axis]
    • angle_axis_from_quaternion(quaternion)
      返回从四元数确定旋转的轴和角
    • quaternion_conjugate(quaternion)
      返回quaternion的共轭四元数
    • rotate_vector(vector, angle, axis=OUT)
      返回将vector以axis为轴,旋转angle角度后的向量\
      • 若vector是二维ndarray,则使用复数运算
      • 若vector是三维ndarray,则使用四元数运算
    • thick_diagonal(dim, thickness=2)
      返回一个dim*dim大小,对角线宽度为thickness的方阵
    • rotation_matrix(angle, axis)
      返回通过角angle轴axis确定的旋转矩阵
    • rotation_about_z(angle)
      返回沿z轴旋转angle的旋转矩阵
    • z_to_vector(vector)
      返回可以使z轴方向旋转到vector方向的变换矩阵
    • angle_between(v1, v2)
      返回两向量v1,v2的夹角
    • angle_of_vector(vector)
      返回vector在xy平面投影的极坐标系下的theta
    • angle_between_vectors(v1, v2)
      返回两向量v1,v2的夹角
    • normalize(vect, fall_back=None)
      返回vect的单位向量
      • 若vect为零向量,且fall_back=None,返回零向量
      • 若vect为零向量,且fall_back不为None,返回fall_back
    • cross(v1, v2)
      返回两向量v1,v2的叉积
    • get_unit_normal(v1, v2)
      返回向量v1,v2确定的平面的法向量
    • compass_directions(n=4, start_vect=RIGHT)
      将TAU分成n份,从start_vect开始返回沿每个方向的单位向量
    • complex_to_R3(complex_num)
      复数转化为坐标(z轴为0)
    • R3_to_complex(point)
      取坐标前两轴为复数
    • complex_func_to_R3_func(complex_func)
      将针对复数的函数转化为针对坐标的函数
    • center_of_mass(points)
      返回点集points的重心
    • midpoint(point1, point2)
      返回point1,point2的中点
    • line_intersection(line1, line2)
      返回两直线交点
      • 注意: 需要使用get_start_and_end()
    • get_winding_number(points)
      返回卷绕数

回到目录

  • strings.py

    这个文件中主要包含处理字符串的函数
    • to_camel_case(name)
      将name转化为驼峰命名(应该会报错)
    • initials(name, sep_values=[" ", "_"])
      获取name中每个单词的首字母
    • camel_case_initials(name)
      获取name中的大写字母
    • complex_string(complex_num)
      获取complex_num的每一个字符,括号除外
    • split_string_to_isolate_substrings(full_string, *substrings_to_isolate)
      给出一个完整字符串,和一系列可能包含的字符串
      将完整字符串分割,若出现可能包含的字符串,则将其分离\
      • 例:split_string_to_isolate_substrings("to be or not to be", "to", "be")会返回["to", " ", "be", " or not ", "to", " ", "be"]
    • split_string_list_to_isolate_substrings(string_list, *substrings_to_isolate)
      对string_list中每个字符串都执行split_string_to_isolate_substrings(full_string, *substrings_to_isolate)

回到目录

  • tex_file_writing.py

    这个文件中主要包含了将tex字符串使用LaTeX编译成svg的函数
    • tex_hash(expression, template_tex_file_body)
      返回将expression和template_tex_file_body合并后sha256后的哈希值
    • tex_to_svg_file(expression, template_tex_file_body)
      将tex表达式转换为svg文件
      (先写入.tex文件,再编译为.dvi/.xdv文件,后转换为.svg文件)
    • generate_tex_file(expression, template_tex_file_body)
      将expression写入tex文件,并返回tex文件
      使用expression替换掉template_tex_file_body文件中的TEX_TEXT_TO_REPLACE
      tex文件名为hash值
    • tex_to_dvi(tex_file)
      将tex文件编译为dvi/xdv文件,并返回dvi/xdv文件
      • 若TEX_USE_CTEX=False,则使用latex将tex编译为dvi
      • 若TEX_USE_CTEX=True,则使用xelatex将tex编译为xdv
    • dvi_to_svg(dvi_file, regen_if_exists=False)
      使用dvisvgm将dvi/xdv文件转换为svg文件,并返回svg文件

回到目录