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

たのしい3次元回転の世界 (1)3次元回転の特徴 [rogy Advent Calendar 2018]

たのしい3次元回転の世界 (1)3次元回転の特徴 [rogy Advent Calendar 2018]

概要

これは rogy Advent Calendar 2018 3日目の記事です. 投稿時点で12/3の25時ですが許して.

3次元回転は, 航空機, 人工衛星, マルチコプターなどの姿勢制御や, 3DCG, VR/AR, コンピュータビジョンなど, 3次元の物体が関わるあらゆる技術に密接に関係しています. この強力なツールを習得すればできることがぐっと増えるのですが, 回転の順序を入れ替えられないことや, 回転の基準とする座標系の取り方によって結果が変わること, 数学的な表現が初学者には分かりづらいことなどを理由に, 敬遠されがちなのが実情です. 実際, わたしも特に座標系にはさんざん苦しめられながら学習してきた経緯があり, 研究で取り扱っている今でもたまに混乱することがあるほどです.

これから書いていくシリーズ「たのしい3次元回転の世界」では, 3次元の回転に関わる事実や諸注意をなるべく図的に解説し, 扱う際の混乱や誤解をなくすことを目標にしています. 特にクォータニオンに関しては, 「なぜこれで回転が表現できるのかわからない」「イメージがしづらい」という意見をよく目にしますので, そのあたりに関する解釈も書いていければと思います. 筆者は数学的な深い知識には乏しい人間ですので, あまり数学的に立ち入った内容にはせず, 読み物としてためになるものが書ければと考えています. したがって, 数学的にプロパーな解説は, ほかの方の記事や論文等を参照していただくのが良いと思います.

今回は 3次元回転の特徴 について記します. 3次元空間内の回転は, 2次元平面上での回転にない特徴を多くもっています. まずはその特徴に触れることで, 3次元の回転へのイメージを養うことからこのシリーズをはじめたいと思います.

Read More

Share Comments

Oculus GoでスタンドアロンVR作業環境を作った

Oculus GoでスタンドアロンVR作業環境を作った

概要

まずはこちらをご覧いただきたい.

…… おわかりいただけただろうか.

わからないと思うので説明すると, この様子はOculus Go上のDebianに映るターミナルを眺めながらテキストエディタで作業をしているところです. 写真の人はわたしの後輩で, Oculus Goの上でDebianを走らせて, VR対応なVNCクライアントを自作して接続することで, バーチャルな空間上での作業を可能にしたパイオニアです. 見た目はさながらlainの中盤に出てきて川に突っ込んで死んだやばい人(うろ覚え)のようです.

この取り組みのおもしろいポイントは, Oculus Go(とキーボード)だけですべてが完結するということです. ふつう, こういったヘッドマウントディスプレイはPCへの接続が前提ですが, Oculus Goは単体でゲームに必要な演算やコンテンツの再生ができます. 要は実質レンズ付きAndroid端末みたいなものなので, アプリの開発さえできれば何でもありなのです.

これにめちゃくちゃ感銘を受けたので, 完全にアイディア丸パクりなのですが[1], なるべくセットアップが簡単になるようにわたしもチャレンジしてみました. 最終的にはこんな感じになりました:

構成としては, 以下のようなものを使用しています.

  • Oculus Go
    • UserLAnd
    • ovrvnc
  • Bluetoothキーボード

Oculus Goは通常のHMDとは異なりケーブルがいらず, 中で処理もできるため, いつでもどこでも作業できることがとても良いポイントですね. もちろん, PC上のVNCサーバに接続すれば, より重い処理をさせたり, 動画を見ながらの作業なんかもできたりします.

セットアップ方法等の詳細な記事については, 以下をご覧ください(準備中です).

  1. Bluetoothキーボードの接続とUserLAndのセットアップ(執筆中)
  2. VNCサーバのセットアップとovrvncでの接続(執筆中)
  3. キーボード入力に対応する(執筆中)

やったまま放置してしまっていたので, 今回はひとまず紹介だけ…


  1. 記事を書くことは了承してもらってます

Share Comments

Dual Quaternionで剛体運動を表現する

Dual Quaternionで剛体運動を表現する

概要

クォータニオンを拡張した概念として, Dual Quaternionというものがあります. これを使うと, クォータニオンで考えられる3次元の回転に加えて, 3次元の並進まで1つの枠組みで考えることができるというすぐれもので, ロボティクスやCGの分野でほそぼそと使われています.

今回はDual Quaternionの基礎と, 3次元の位置・姿勢のDual Quaternion表現, そして剛体の運動をDual Quaternionで記述する方法について書きます.

若干偏った事前知識が必要かもしれません. 誤り等があればまさかりを投げてください.

Read More

Share Comments

SPRESENSE SDKのセットアップでPermission denied (publickey)が出る場合の対処法

SPRESENSE SDKのセットアップでPermission denied (publickey)が出る場合の対処法

概要

(この記事は2018/8/17時点での内容です)

これは公式ドキュメンテーションが悪いです.以下のように書き換えて対処してください.

解決法

SPRESENSE SDKチュートリアルの手順の中で

$ git clone --recursive git@github.com:sonydevworld/spresense.git

と書かれている項目を,

$ git clone --recursive https://github.com/sonydevworld/spresense.git

に置き換えて実行しますす.

問題なくクローンできるはずです.

なぜこのようなことが起こるか

OS側に鍵を用意していない/自分のGitHubアカウントに公開鍵を置いていない場合にこうなります.

SONYさん,結構たくさんのお客さんが困っているみたいなので,修正してください.

Share Comments