音波のアニメーション

うまくいかないので放置。

library(animation)
x = runif(1000, 0, 8)  # 0〜8の一様乱数1000個
y = runif(1000, 0, 1)  # 0〜1の一様乱数1000個
ani.options(ani.width=700, ani.height=100, interval=0.1)
saveGIF({
    par(mar=c(0,0,0,0)+0.1)      # マージンはできるだけ切り詰める
    for (i in 0:9) {
        plot(x + 0.1 * sin(2*pi*(i-2*x)/10) + rnorm(1000,0,0.02),  # x座標
             y + rnorm(1000,0,0.02),                               # y座標
             xlim=c(0.5,7.5), ylim=c(0,1), xlab="", ylab="", xaxt="n", yaxt="n", xaxs="i", yaxs="i")
    }
})

カレントディレクトリに animation.gif というファイル名で生成されます。

うーん,わかりにくいかな。ちょっと極端だけど,sin(...) の係数を 0.1 から 0.4 にしたバージョンも置いておく:

要は,音の波は疎密波だけれど,空気が動いていくわけではなく,個々の空気分子は同じところで往復運動をしているだけで,その位相が場所によってずれているので,疎密のパターンが移動していくということが表したかったのである。

@kohske 先生が改良してくださった:

普通に見ると多分運動検出が平均輝度に応答しちゃって個々の往復運動は認識しづらいので、ちょっと改変(無許可すいません)。
RT https://t.co/jvADko3Yb1 pic.twitter.com/1j25F3QPH3

— kohske (@kohske) 2018年2月7日

もうちょっと物理的な説明をこちらに書き始めたのだが,中途半端な状態で止まっている。