-
Notifications
You must be signed in to change notification settings - Fork 82
utils 实用工具
鹤翔万里 edited this page Mar 19, 2020
·
3 revisions
utils文件夹中含有很多常用的函数
- bezier.py
- color.py
- config_ops.py
- file_ops.py
- images.py
- iterables.py
- paths.py
- rate_functions.py
- simple_functions.py
- sounds.py
- space_ops.py
- strings.py
- tex_file_writing.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_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字典和类的属性
-
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)
把当前局部变量设为属性
-
-
这个文件中主要处理了文件的操作
-
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)
从默认值中查找完整路径,默认路径如下- 当前目录下file_name文件
- 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的合并中用到)
-
-
这个文件中主要处理了图片文件的读取
-
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)
反转图像
-
-
这个文件中主要处理了和列表字典处理有关的函数
-
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
-
-
这个文件中处理了和路径有关的函数
-
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_func
rate_func是以[0,1]为定义域的函数,可看作定义物体变换/运动的速率
这个文件中的rate_functions图像如下
-
这个文件中包含了一些常用的简单函数
-
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)
二分查找
-
-
这个文件中主要处理了和音频有关的函数
-
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,填好环境变量就可以使用了
-
-
这个文件中主要处理了和空间坐标计算有关的函数
-
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)
返回卷绕数
-
-
这个文件中主要包含处理字符串的函数
-
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字符串使用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文件
-