6
5

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 5 years have passed since last update.

錯視Advent Calendar 2016

Day 4

錯視作成に使える開発環境・言語(1)R言語

Posted at

株式会社ホクソエムシリーズは昨日までで終了で、今日からは錯視と技術についてもうちょっと深くやっていきたいと思います。

今日から2、3日は、錯視の紹介はお休みして、錯視を作るのに適した開発環境・言語を紹介します。

錯視作成にプラスな点として、

  • ネイティブで描画・表示をサポートする開発環境
  • アニメーションのサポート(動画錯視の場合)
  • 色空間のサポート(RGBだけではなく、HSVも必要)
  • ベクトルデータ、ベクトル演算(錯視は繰り返しパターンが多いので、楽です)
  • 3DCGサポート
  • 簡単に使える画像・動画出力

などがあります。

R言語

R言語(あーるげんご)はオープンソース・フリーソフトウェアの錯視作成に特化したプログラミング言語及びその開発実行環境です。

というように、以下のような機能を備えています。

  • gridパッケージによる階層化されたグラフィックス生成
    • ビューポートのサポート
    • 各種ポリゴンの作成
    • ベクトルデータの描画 (これは本当に楽)
  • グラフィックス表示のネイティブサポート
  • animationパッケージによる動画作成
  • ベクトルデータ、ベクトル演算がとても簡単
  • 色空間サポート
  • rglパッケージによる3DCG
  • 作った錯視を公開するためのRPubsというサイト。
  • ダイナミックに錯視のパラメータを調整して試すためのshinyという環境。
  • Rmarkdownという錯視紹介記事作成用のパッケージ、ツール。

まさに、錯視作成のために作られた開発環境と言っても過言ではないでしょう。

なお、数年前に作ったR言語による錯視作成のデモがこちらです。

Rで錯視(第1版)

一つだけ紹介しておきましょう。

カフェウォール錯視の作成

ダウンロード.png

これはカフェウォール錯視というものです。多分エクセルでも描けます。

水平線が傾いて見えると思いますが、実際はすべて平行です。

Rでは、このパターンを

rs <- expand.grid(x = seq(0, 1, 1/10), y = seq(0, 1, 1/10))
grid.rect(rs$x, rs$y, 1/10/2, 1/10/2, gp = gpar(fill = "black", col = NA))
grid.rect(rs$x + 1/10/4, rs$y + 1/10/2, 1/10/2, 1/10/2, gp = gpar(fill = "black", col = NA))
ls <- expand.grid(x = 0:1, y = seq(0, 1, 1/20) - 1/20/2)
grid.polyline(ls$x, ls$y, id = gl(nrow(ls)/2, 2), gp = gpar(col = "grey50", lwd = 1))

と、たったこの5行で作成できるわけです。アンビリーバブル。

少し解説しておくと、

  1. 0, 0.1, 0.2, ..., 1 の総当り2x(11x11)次元行列を作っています。
> rs <- expand.grid(x = seq(0, 1, 1/10), y = seq(0, 1, 1/10))
> head(rs)
    x y
1 0.0 0
2 0.1 0
3 0.2 0
4 0.3 0
5 0.4 0
6 0.5 0
> tail(rs)
      x y
116 0.5 1
117 0.6 1
118 0.7 1
119 0.8 1
120 0.9 1
121 1.0 1
  1. 奇数(または偶数?)行の黒い四角を描画。中心座標がrs、幅と高さが1/10/2です。
grid.rect(rs$x, rs$y, 1/10/2, 1/10/2, gp = gpar(fill = "black", col = NA))
  1. 偶数(または奇数?)行の黒い四角を↑から1/4だけずらして描画。中心座標がrsから横に1/10/4、縦に1/10/2だけずらしてるということ。
grid.rect(rs$x + 1/10/4, rs$y + 1/10/2, 1/10/2, 1/10/2, gp = gpar(fill = "black", col = NA))
  1. 灰色線の座標を作成。
> ls <- expand.grid(x = 0:1, y = seq(0, 1, 1/20) - 1/20/2)
> head(ls)
  x      y
1 0 -0.025
2 1 -0.025
3 0  0.025
4 1  0.025
5 0  0.075
6 1  0.075
  1. 灰色線の描画。
grid.polyline(ls$x, ls$y, id = gl(nrow(ls)/2, 2), gp = gpar(col = "grey50", lwd = 1))

錯視をプログラムで作成することのメリット

こうしてみると、錯視を作成する効率的なプログラムを作成するには、錯視の構造を理解する必要があることがわかります。ここが実は一番の狙いです。

また、パラメータを簡単に変更できることもメリットですね。例えばカフェウォールの色を変えたり、横ずれ量を変えたり。もしエクセルで作ってたら、これは無理ゲーです。

明日は

明日はProcessingについて紹介します。

Enjoy!!

6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?