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