VOYAGE GROUP エンジニアブログ

voyagegroup_techのブログ
VOYAGE GROUPエンジニアブログです。

アンパンマン

MacのGrapherでアンパンマン

こんにちは、VOYAGE GROUPの水越(@Akiyah)です。

最近、会社で使うPCがMacBook Proになったので、Mac OS X v10.7 Lionに付属しているソフトを眺めていたら面白いものを見つけました。それはグラフ描画ソフトのGrapherです。

Grapherとは、Mac OS X付属のグラフ描画ソフトです。Grapherを使うと分数やn乗、絶対値、括弧などの数式を簡単にかっこよく書くことができて、その上その数式をグラフにしてくれます。数式を書いてグラフにする、という点に関してはここで何度か紹介しているRよりもお手軽にできます。

というわけで、アンパンマンを書いてみました。
14
アンパンマン方程式は前回Rで書いたものと同じです。Grapherを使って方程式の解を描画させました。こんな複雑な数式でもそのまま簡単に編集できて、とってもステキです。
 
Grapherは2次元だけでなく3次元のグラフも書くことができます。
z=アンパンマン方程式
と書き直してグラフにすると、簡単に3次元アンパンマングラフを書くことができます。
05
Grapherの中ではマウスで向きをぐりぐりかえることもできますよ。

こんなにすばらしいGrapherですが、検索してもあんまり情報が出てこなくて、世間ではあまり使われていないようです。これからも面白い使い方を見つけたらここで紹介していきますね。

参考
Grapher - Wikipedia
Grapherで遊ぼう
VOYAGE GROUP エンジニアブログ : Rを使ってお絵描き(アンパンマン方程式)

Rを使ってお絵描き(アンパンマン方程式)

こんにちは、ECナビの水越(@Akiyah)です。

Rでお絵描きの完結編です。アンパンマン方程式というものを作ってみました。
anpanman_equation
この方程式を解くと、こうなります。

anpanman_equation

アン、アン、アンパンマーン!
Rのコードはこんな感じです。
library(rgl)                           # パッケージの呼び出し
open3d()                               # デバイスの起動

rgl.bg(color="#808080")
rgl.light(theta = 5, phi = 5)
x <- seq(-110, 110, length = 880)
y <- x
anpanman <- function(x,y) {
    s(((x   )/85)^2+((y   )/85)^2-1) * # face
    s(((x-55)/24)^2+((y +5)/24)^2-1) * # cheek
    s(((x   )/28)^2+((y +5)/23)^2-1) * # nose
    s(((x-18)/ 9)^2+((y-40)/15)^2-1) * # eye
   s((((x-18)/12)^2+((y-45)/20)^2-2) * h(y-45) + 1) * # eyebrow
   s((((x   )/42)^2+((y+35)/18)^2-2) * h(-y-35) + 1)   # mouse
}
s <- function(z) { sin(z*pi/2) * ((z < 1) * (z > -1)) + (z >= 1)*1 + (z <= -1)*(-1) }
h <- function(z) { z>0 } # function(z) { (abs(z)/z + 1)/2 }
anpanman_view <- function(x,y) {
  -abs(anpanman(abs(x),y) * 30)
}
z <- outer(x, y, anpanman_view)

col_g <- gray(0:3/3)
col <- col_g[1 + 1-((z < 3) & (z > -3))]
terrain3d(x, y, z, color=col)
方程式の正体は、楕円の方程式の組み合わせです。
眉毛と口の式を工夫して、うまく楕円の半分になるようにしました。
前の二回のアンパンマンは眉毛がかけなくて悔しかったのですが、やっと完璧なアンパンマンにすることができましたよ。

Rを使ってお絵描き(アンパンマン3D)

こんにちは、ECナビの水越明哉(@Akiyah)です。

Rでお絵描きの続きです。今回は3Dに挑戦してみました。Rなら簡単でしたよ。

まずは、R-Tips57. パッケージ RGLを参考にしてRGLをインストールしておきます。私の環境はWindowsXPとUbuntu11.04なのですが、Ubuntuのほうは「rgl」パッケージをインストール - ryamadaの弟子日記をみてsynapticでインストールしました。

まずパッケージの呼び出しをします。
 library(rgl)                           # パッケージの呼び出し
そのあと、rglをつかって描画します。
 open3d()                               # デバイスの起動

 rgl.clear(type="lights")               # 光源の設定の消去
 rgl.light(theta = 15, phi = 25)
 rgl.viewpoint(0,0)

 spheres3d(  0,  0,  0, 85, color=heat.colors(24)[23])
 spheres3d(-55, -5, sqrt(85**2-55**2-5**2),  24, color=heat.colors(12)[5]) # ほっぺ
 spheres3d( 55, -5, sqrt(85**2-55**2-5**2),  24, color=heat.colors(12)[5]) # ほっぺ
 spheres3d(  0, -5, sqrt(85**2-5**2),        28, color=heat.colors(12)[4]) # 鼻
 spheres3d(-18, 40, sqrt(85**2-18**2-40**2), 15, color="black") # 目
 spheres3d( 18, 40, sqrt(85**2-18**2-40**2), 15, color="black") # 目
これでR上でアンパンマンができました!かんたん!
マウスで向きを変えることもできます。
ただこの素敵な動きをそのままブログに貼ることができないので、ぐりぐり写真に変換してみました。

Rで少しずつ角度を変えた画像をファイルに出力して
 for(i in -10:20) {rgl.viewpoint(i*3,i/4); rgl.postscript(paste(i+10,".eps",sep=""), fmt="eps")} 
そのあとGIMPでまとめて、ぐりぐり写真に加工しました。
{"src":"http://art48.photozou.jp/pub/876/237876/photo/96064293_org.png", "width":"480", "height":"360"}

R上では左右だけでなく上下にも動かせるのですが、雰囲気は伝わりますよね。
ハナやほっぺのテカリがうまく表現できていて、さすがRです。

参考:

Rを使ってお絵描き(アンパンマン)

こんにちは、6月からECナビで働いている水越明哉(@Akiyah)ともうします。

最近、Rを使いはじめました。Rとはオープンソースの統計解析ソフトで、解析したデータをグラフにするのも得意です。まだ手探り中ですが、なかなか良いツールだなぁと思っています。そこでRと仲良くなるためにRでお絵描きをしてみることにしました。

まずは、R -- 図形描画関数群を参考にして図形描画関数をインストールします。
source("http://aoki2.si.gunma-u.ac.jp/R/src/plot.R", encoding="euc-jp")
この図形描画関数を使ってアンパンマンを書いてみます。アンパンマンのソースはJavaScriptでアンパンマンを描くコードを参考にしました。
plot.start(asp=1)
plot.circlef( 200,    200,    85,        col=heat.colors(24)[23]) # 輪郭
plot.circlef( 200-55, 200-5,  24,        col=heat.colors(12)[5]) # 左ほっぺ
plot.circlef( 200+55, 200-5,  24,        col=heat.colors(12)[5]) # 右ほっぺ
plot.ellipsef(200,    200-5,  28, 23, 0, col=heat.colors(12)[4]) # 鼻
plot.ellipsef(200-18, 200+40,  9, 15, 0, col="black") # 左目
plot.ellipsef(200+18, 200+40,  9, 15, 0, col="black") # 右目
plot.ellipse( 200,    200-30, 42, 18, 0, 180, 360, lwd=3) # 口
げんき100ばい!アンパンマンがかけましたね。



あとは画像ファイルとして出力して、
dev.print(file="rpanman1.eps", width=10, height=10, horizontal=FALSE)
GIMPでまとめてgifアニメにしましたよ。
またRでお絵描きしたら投稿します。

参考:
記事検索
QRコード
QRコード