MATLAB芸人なら知っておきたい小ネタ関数ベスト5 [rogy Advent Calendar 2018]

MATLAB芸人なら知っておきたい小ネタ関数ベスト5 [rogy Advent Calendar 2018]

イースターエッグ

ソフトウェアにおけるイースターエッグとは, 開発者がプログラム内に仕込んだ隠し機能や隠しメッセージのことです. MATLABにも様々なイースターエッグが仕込まれていて, どれも遊び心を感じるものになっています.

この記事では, その一例を独断と偏見によるランキング形式で紹介しようと思います.

独断と偏見によるランキング

5位: fifteen, xpbombs

なんと15パズルとマインスイーパがFigureウィンドウ上で遊べます. 暇つぶしや休憩のおともにどうぞ(業務中に遊ばないでね).

コード:

fifteen

実行結果:

コード:

xpbombs

実行結果:

ちなみに, コマンドウィンドウで

>> edit xpbombs

と実行すると, ソースコードを見ることができます. GUIプログラミングをする上で参考になるので, 気になる人は読んでみると良いと思います.

4位: logo 関数

MATLAB芸人なら, 突然MATLABのロゴを出したくなったことが何度もあるはずです. そんなときに便利なのが, logo 関数です.

内部的には, membrane 関数を surf を使ってプロットし, 大きさやライトを調整しています. 詳細な手順が公式ドキュメントで示されています.

3位: spy 関数

spy 関数は本来行列のスパース性を可視化するための関数で, つぎのように使用します.

コード:

spy(bucky);

実行結果:

引数なしで実行すると, なぜか犬の顔が表示されます.

コード:

spy

実行結果:

この spy 関数は, 本来の使い方以外にも面白い使い方があります. 非ゼロの要素がある部分にドットが打たれるため, 簡単なドットマトリクスディスプレイとして使用することができます. これを応用すると, Conwayのライフゲームがこんな感じで実装・表示できます.

コード:

a = rand(128) > 0.7;
while 1
    spy(a,'r.',6); drawnow;
    a = ~fix(filter2(ones(3),a)-a/2-3);
end

実行結果:

上記のコードはここに書いてあったものをゴルフして作りました.

2位: image 関数

image 関数を引数なしで実行すると…

コード:

image

実行結果:

逆さまになった男の子の顔が表示されます. ちょっとしたホラーです.

実はこの画像にはさらに秘密があって, 各画素のdoubleの値のうち53ビットをbitrotateすると, 隠し画像が現れるらしいです. 説明が結構面倒なので, 詳細はこちらをご覧ください.

1位: why 関数

why 関数は上記に挙げた関数とは違い, 特にこれといった用途のない関数です. インパクトには欠けますが, これを知っている人は結構なMATLAB通だと思います.

why を実行すると, 予め用意された語句を組み合わせたへんちくりんな文が表示されます.

これを使った実用的なコードを何か考えられるでしょうか? 思いつく人がいたら教えてください.

まとめ

いかがでしたか? 皆さんはいくつ知っていましたか?

ほかにもバージョンごとにいろいろな隠し要素があるようなので, 探してみると面白いのではないかと思います. それでは, よいMATLAB芸人生活をお送りください.

参考

Share Comments