ter n i m al(注意拼写)是一个使用Unicode块符号在终端中绘制动画生命形式的程序。它在大多数终端仿真器和大多数单调字体中都起作用。

从实际的角度来看,该程序不是很有用。但是,它确实包含了很多很酷的技术和数学:
三位一体也是极简主义和克制的一种练习。它仅以1000行的生锈写,没有依赖性,并且消耗了很少的资源:磁盘上的400 kb,3 MB的RAM和带有默认参数的单个CPU核心的4%。它从头开始实现自己的线性代数操作,以及基本的命令行解析和简单的随机数生成器。
除了Rust Standard库外,Ternimal没有依赖关系,也不需要货物进行建筑物。只能安装rustc (> = 1.20),在这一点上可以使用以下方式构建:
git clone https://github.com/p-e-w/ternimal.git
cd ternimal
rustc -O ternimal.rs
从根本上讲,三位型只能在蜿蜒路径的一段距离距离范围内涂上颜色。控制此过程有许多参数,但是,几乎所有参数都可以通过命令行操作。
这使系统非常灵活。以下只是一些可能的例子:
./ternimal length=100 thickness=1,4,1,0,0 radius=6,12 gradient=0:#666600,0.5:#00ff00,1:#003300

正弦波可用于产生相当有机的形状。在这种情况下,单波形形成蛇的身体。
./ternimal length=200 thickness=0,4,19,0,0

三元仅呈现单个模型。但是,厚度变化可以使多个断开的实体的外观以协调的方式移动。
./ternimal length=20 thickness=70,15,0,1,0 padding=10 radius=5 gradient=0.03:#ffff00,0.15:#0000ff,0.3:#ff0000,0.5:#00ff00

厚度函数包括时间参数。这使得定义形状动画成为可能。任意指定许多傅里叶序列项,从而实现非常复杂的动画。
三元对性能高度优化,在许多情况下,生成其输出所需的CPU时间小于终端仿真器以显示相同的输出的时间。采用各种技巧来最大程度地减少计算负载和输出尺寸。在GNOME终端中,默认参数每秒呈现高达2500帧。
我已经在阳光下尝试了一切,以挤出更多的性能,结果好坏参半。一些失败/半成功的尝试包括:
f32代替f64 。这确实给出了5-10%的速度,但是几天后会遇到精确问题。可能会按常规间隔“重置”时间和位置值以避免这种情况,但是逻辑将非常复杂。stdout锁定和/或缓冲。尽管Ternimal撰写了大量输出,但这种优化仅导致令人失望的1%加速,因此被放弃了。format!为此目的很难击败宏,我尝试的每种替代方案都相等或较慢。target-cpu=native等编译器标志来播放。这也没有可衡量的改进。使用CallGrind和Oprofile进行分析表明,大多数CPU时间都花在构造和编写输出字符串上,并且渲染计算仅对非常大型模型起作用。考虑到试图更快地进行输出处理的成功缺乏成功,似乎是合理的说,三位特征的性能已经非常令人满意。
Ternimal已在Linux,MacOS和Windows上进行了测试。
在Linux上,几乎所有末端仿真器都完美地呈现三层。在MacOS上,建议使用ITERM2或ALACRITTY。在Windows上,Powershell和WSL似乎运行良好,Conemu也有效,但缺乏24位颜色。
很可能是因为您的终端不支持24位RGB颜色逃生序列。反过来,这可能意味着您正在使用MacOS的默认终端。App,这是唯一仍缺少该功能的主要终端模拟器。
您有两个选择:
true_color=false运行三元,以倒回256色的调色板,该调色板几乎受到每个终端模拟器的支持(但看起来不太好)。要么是因为字体的块字符不能完全填充字符单元,要么是因为您的终端的线间距大于零。
三拟南芥最适合其字体,其字体的纵横比尽可能接近2:1。屏幕截图中的字体是奇妙的iosevka。
Linux控制台不支持Unicode字体。但是,它确实识别了Unicode编码,并试图将某些Unicode代码点转换为其内部编码中的代码点,其中包括三元素所需的块符号。
但是,这种转换似乎有一个错误。上半块字符的翻译正确,但下半块没有,导致条纹图案。
像这样:

总是欢迎贡献者。但是,请提出一个问题,描述您打算在打开拉动请求之前要添加的内容,尤其是对于新功能!我对我想要(并且不想要)三分的东西有一个清晰的愿景,因此讨论潜在的添加可能会帮助您避免重复和浪费工作。
通过贡献,您同意在与项目其余部分相同的许可下发布更改(请参见下文)。
版权所有©2017 Philipp Emanuel Weidmann([email protected])
根据GNU通用公共许可证的条款发布,版本3