14
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

シェル芸Advent Calendar 2019

Day 21

ボディビルダーが泳ぐシェル芸

Last updated at Posted at 2019-12-21

ボディビルダーが泳ぐシェル芸とは?

t.gif
こういうアニメーションを作るシェル芸です。
ボディビルダーがなんか叫んでますね。ちょっとゆっくりにしてみましょう。
t.gif
正弦波泳法という泳ぎ方のようです。
作っていきましょう。
前提条件は、textimgmuscularがインストールされていることです。

コマンドができるまで

STEP1. ボディビルダーを出す

ボディビルダーを出します。
コマンドと実行結果

$ muscular shout フロントリラックス -p front-relax
        .-~-.          
        /   \          
        |   /          
     ,_-/ ,.*`--.,     
   .r ;       ``  \    
  .`,`   ,:  ,.`A`,\   
 /,`/\`''  ''  ? \` \  _人人_
/  /  \ ; , ; /   )  } > フ <
| /    \:':': |   | 7  > ロ <
| |    ) ':'  |  ,` /  > ン <
( \    `-,_,-~}  | l   > ト <
 `~   / `,  /' \ '"'   > リ <
     ,7   \/   |.      > ラ <
     {  ; |, ,  )      > ッ <
     |,`: |`,`: |      > ク <
     \` , /\`.; /      > ス <
      |`;/  \ , |       ̄Y^Y^ ̄
      \``\   |` (      
      \ . )  {  /      
       \ `/  (  }      
        \ |  | /       
        ) \  | |       
     c~^_~d  V _`,     
                       

qiitaのシンタクスハイライトでちょっとカラフルになっちゃってますが、
muscular shout-pオプションでポーズを指定しています。

STEP2. スクロールしてアニメートする

1行ずつスクロールしてアニメーションにしましょう。
コマンド

$ muscular shout 上がれ! -p front-relax|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)|textimg -asl25

出力アニメ
t.gif
前ステップで出したボディビルダーは身長が24行あるので、
25人に分裂させて、25行ごとに区切ってやると
25行24フレームの、1行ずつずれたボディビルダーが得られます。
25人に分裂させるために、前ステップのコマンドのうしろに
|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)
としていますね。ここが今回ちょっと苦しいところなんですけど、
5回リピートを2回かけて25回リピートしています。
続けてtextimg -asl25とすることで、25行ごとに区切ってアニメートしています。

STEP3. 正弦波のスペースを入れる

ボディビルダーの左側に正弦波のスペースを入れてやると、
正弦波泳法になります。
コマンド

$ muscular shout 正弦波泳法 -p front-relax|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)|awk '{PI=4*atan2(1,1);for(i=0;i<(sin(NR/25*PI*2)+1)*5;i++){printf " "}{print $0}}'|textimg -asl25

出力アニメ
t.gif
前ステップのあと、awkのfor文で繰り返しスペースを入れています。
繰り返し回数を決めている部分は(sin(NR/25*PI*2)+1)*5となっています。
25行ごとに位相が2πだけ進んで正弦波が一周します。
円周率PIはatanで得ています。
1を加えて5をかけることで、0から10までの幅の正弦波になります。
スピードアップしましょう。
コマンド

$ muscular shout 正弦波泳法 -p front-relax|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)|awk '{PI=4*atan2(1,1);for(i=0;i<(sin(NR/25*PI*2)+1)*5;i++){printf " "}{print $0}}'|textimg -asl25 -d5

出力アニメ
t.gif
完成です。

まとめ

musculartextimgを使って、正弦波泳法で泳ぐボディビルダーのアニメを作ることができました。
いや正弦波泳法って何…?こわ…

14
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?