2016年3月20日日曜日

R で円の描画:誰もがプログラマーに

Rggplot2 で「正確な円」を描く方法。方法はいくつかあるが、"Draw a circle with ggplot2" で見つけた方法が最も楽しかった。

なお本書は「東大入試問題:数学は公式の暗記にあらず」の布石。

その描画方法の肝となる circleFun 関数の定義内容を理解するには、以下の三角関数の関係が重要。
蛇足だが一応解説すると、円の半径 r と角度 θ が決まれば、円周の座標 (x, y) = (r cosθ, r sinθ) が決まるということ。そのアルゴリズムを実装したのが関数 circleFun 。関数は、その (x, y) のポイントを生成するもの。

以下が描画方法(関数へのコメントは私によるもの)。

# The function returns a data frame of (x,y) values of a circle you make.
# [param]
# 1st: (x, y) of the center of a circle, default(0,0)
# 2nd: size of diameter of a circle, default 1
# 3rd: number of points to draw a circle, default 100
circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
    r = diameter / 2
    tt <- seq(0,2*pi,length.out = npoints) # radians, from 0 to 2π
    xx <- center[1] + r * cos(tt) # x values
    yy <- center[2] + r * sin(tt) # y values
    return(data.frame(x = xx, y = yy)) # return the result
}
dat <- circleFun(c(0,0),2,npoints = 100)
#geom_path will do open circles, geom_polygon will do filled circles
openGraph()
ggplot(dat,aes(x,y)) + geom_path()

誰もがプログラマーに

「たかが円で、関数定義なんて...」という声が聞こえる。確かに「お絵描きソフト」を使えば円なんて簡単に作成できる。ただ「ある座標に沿った正確なサイズの円」とかの制約を満たすには、このように「数学的実装」が必要。

去年、統計局(だったと思う)人のデータ分析のオンラインセミナーを受講した。「母数の誤った説明」にも呆れたが、何よりも MS Excel を多用した「汚い」チャートに辟易した。無料のセミナーで MS Excel 使うのも変だが、「汚い」チャートは最悪で問題外、「手書き」の方がまだマシだ。

三角関数をいつ習ったか不明だが、高校 1 年とかそこらへんだろう。三角関数なんて「誰でも理解できる」と思う、大袈裟ではなく。学生の頃「こんな数学て何の役に立つの?」は、多くの人が抱くことだろう。私も思ったことがある、特に当時苦手だった「確率・統計」に対して(今では大好き!)。

「将来役立つイメージを持たせられる授業」は簡単じゃない。でも、ここでやったように、プログラミングと並行して教えると、より具体的なイメージが抱けるのではないだろうか?

「全ての人がプログラミングができるべき」と、主張する人がいた。「全て」は無理だとしても、その主張の意図はよく分かる。コンピューターソフトウェアが行っているアルゴリズムを、多少なりとも想像できることは大切だ。「訳の分からない仕組みが動いている」という「無理解」から解放されるし、変な誤解をすることもない。

0 件のコメント:

コメントを投稿