こんにちは。鈴木です。
今日も、サイエンスに関するWeb上のサービスやデータベースを紹介していきます。
今回のソフト/サービス
今回ご紹介するのは、
・R言語(通称:アール) です。
統計解析のフリーソフトで、統計解析機能はもちろん、パワフルな描画機能も備えています。
色んなことに使えるソフトなのですが、今回は
・錯覚、錯視
の絵を自分で書いてみる、ということに使いたいと思います。
↓こういうのです。
なるべく、簡単に説明します。難しいことを考えなくても、
書いてある通りにすれば自分で錯視の絵が描ける、というのを目標にしますので、
是非一度試してみてください。
使い方
さて使い方ですが、まずソフトをダウンロードしましょう。
下記のリンクをクリックして、それぞれダウンロードしたら、exeを実行します(ダブルクリックします)。
WindowsのVista以前のものや、Mac、Linuxをお使いの方は下記を参考に適宜インストールしてください。
下記のようなものが出てきますが、気にせず、実行、OK、次へ、次へ・・・と押していけば、
インストールが完了します。
インストールできたら、ソフトを立ち上げます。
デスクトップにアイコンがあるのでダブルクリックしましょう。あるいはスタートメニューから起動しても構いません。
操作方法
Rを立ち上げると下記のような画面になっているはずです。
これから、パッケージというものをインストールします。
錯視の絵を書くのに必要なものを入れていきます。
上のメニューの「パッケージ」をクリックし、「パッケージのインストール」を選択します。
どこのサイトからダウンロードするか聞かれますので、
ご自分の場所から近い場所を選んでください。
日本だと、兵庫、筑波、東京があります。
次に、インストールするパッケージを選びます。
「plyr」
というのを選んでOKをクリックしてください。
これで準備完了です。
後もう少しなので、頑張ってついてきて下さい!
次の2行をコピーして、R Consoleのところにペースト(貼り付け)してください。
library(grid)
library(plyr)
次に、この5行をコピーペーストしてください。その後、一度改行します(エンターキーを押します)。
rs 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 grid.polyline(ls$x, ls$y, id = gl(nrow(ls)/2, 2), gp = gpar(col = “grey50”, lwd = 1))
すると、「カフェウォール錯視」の絵が描画されます!
どうみても横の線が曲がっているように見えますよね。
実際には全て直線です。。。
他にも、
「きらめき格子錯視」
nx grid.newpage()
grid.rect(0.5, 0.5, 1, 1, gp = gpar(fill = “black”))
ls grid.polyline(ls$x, ls$y, id = gl(nrow(ls)/2, 2), gp = gpar(col = “grey”, lwd = lwd))
ls grid.polyline(ls$x, ls$y, id = gl(nrow(ls)/2, 2), gp = gpar(col = “grey”, lwd = lwd))
ls grid.circle(ls$x, ls$y, r= cr, gp = gpar(col = NA, fill = “white”))
「オオウチ錯視」
grid.newpage()
nx rs grid.rect(rs$x, rs$y, 1/nx/2, 1/ny/2, gp = gpar(col = NA, fill = c(“black”, “white”)))
rs grid.rect(rs$y, rs$x, 1/ny/2, 1/nx/2, gp = gpar(col = NA, fill = c(“black”, “white”)))
「明るさの対比」
grid.newpage()
grid.rect(c(1,3,1,3)/4, c(3,3,1,1)/4, 1/2, 1/2, gp = gpar(col = NA, fill = gray(1:4/5)))
grid.rect(c(1,3,1,3)/4, c(3,3,1,1)/4, 1/6, 1/6, gp = gpar(col = NA, fill = gray(0.5)))
「エッジの錯視」
grid.newpage()
nx an rs grid.rect(rs$x, rs$y, 1/nx/2, 1/ny/2, gp = gpar(col = NA, fill = c(“black”, “white”)))
rs rs$an l_ply(1:nrow(rs), function(i) {
pushViewport(viewport(rs$x[i], rs$y[i], 1/30, 1/30, angle = rs$an[i]*45))
grid.rect(c(1,3,1,3)/4, c(3,3,1,1)/4, 1/2, 1/2, gp = gpar(col = NA, fill = gray(c(0,1,1,0))))
popViewport()
})
「蛇の回転錯視」←オススメ!
nt <- 41; nr <- 15; br <- 0.8 col1 <- c("black", "white") col2 <- c("aquamarine4", "gold2") f <- function(x0, y0) { r <- embed(br^(0:nr), 2) t <- embed(seq(0, 2*pi, length=nt), 2) i <- as.matrix(expand.grid(1:nrow(r), 1:nrow(t))) ci <- 1 + (i[,2]%%2 + i[,1]%%2) %% 2 p <- t(apply(i, 1, function(x) c(r[x[1], ], t[x[2], ]))) x <- c(p[,1]*cos(p[,3]), p[,1]*cos(p[,4]), p[,2]*cos(p[,4]), p[,2]*cos(p[,3])) y <- c(p[,1]*sin(p[,3]), p[,1]*sin(p[,4]), p[,2]*sin(p[,4]), p[,2]*sin(p[,3])) grid.polygon(x0+x/2, y0+y/2, id = rep.int(1:nrow(p), 4), gp = gpar(fill = col1[ci], col=NA), default.units="native") p <- expand.grid(1:nrow(r), sign((abs(x0-y0)==1)-0.5)*seq(0, 2*pi, length=41)[-1]) p <- cbind(p[,2], rowMeans(r)[p[,1]], (r[,2]-r[,1])[p[,1]]/2) t <- seq(0, 2*pi, length=20)[-1] x <- c(apply(p, 1, function(a) a[2]*cos(a[1])+a[3]*(cos(a[1])*cos(t)-0.5*sin(a[1])*sin(t)))) y <- c(apply(p, 1, function(a) a[2]*sin(a[1])+a[3]*(sin(a[1])*cos(t)+0.5*cos(a[1])*sin(t)))) col <- if(abs(x0-y0)==1) {col2} else {rev(col2)} grid.polygon(x0+x/2, y0+y/2, id = rep(1:nrow(p), each=length(t)), gp = gpar(fill = col[ci], col=NA), default.units="native") } grid.newpage() pushViewport(viewport(xscale = c(0, 3), yscale = c(0, 3))) for (x0 in 0.5+0:2) for (y0 in 0.5+0:2) f(x0, y0) for (x0 in 1:2) for (y0 in 1:2) f(x0, y0)
などを作ることができます。
続けて描画するときは、描画されたウィンドウを閉じてから、次をコピペしてください。
なお上記のプログラムは全て、
・Rで錯視(第1版)
から引用させていただいております。
発展的な使い方
Rが使える方は、パラメータをいじれば絵をカスタマイズすることも可能です。
例えば、「black」と書いてある部分を「red」にすると、黒色だった箇所が赤色になったりします。
より錯視がキツクなる絵を探すのも楽しそうですね。
今回ご紹介した錯視プログラミングは、
先日たまたま明治大学を通りかかったときに、第5回錯覚ワークショップが開催されていて、楽しそうなので飛び入りで参加した際に知りました。
東京大学先端科学技術研究センターの高橋康介さん、楽しいお話をありがとうございました。
written by 鈴木孝一
鈴木 孝一
オキドキサイエンス代表。以前はデータマイニング会社に勤務してました。前職でのスキルを活かし、「Webときどきサイエンス」と題して、サイエンスに関するWeb上のサービスやデータベースを紹介しています。 最近の趣味は、実験キット開発と器械体操・アクロバットです。