2012/04/21

Examples - Basics - Arrays

しばらくは、Processing 1.5.1 の Examples でお勉強しましょう。
先ずは一番上から試してみましょう。
次の画像がサンプルを実行した出力結果です。左が Array 、右が Array2D の結果となります。
それではこの結果のもとになるソースコードを解析してみましょう。

[Array]
map() 関数が他の言語にはないと思いますので、本家の reference で調べてみます。 map(value, low1, high1, low2, high2) は、 low1 ~ high1 の間の value の値が、 low2 ~ high2 の中でどの位置にあるかを返す関数です。


amount に 0 ~ width までを 0 ~ π で置き換えて設定して、|cos(x)| を計算しておきます。
|cos(x)| は、π/2 で 0 になって、0, π の両端で 1 になる関数。

つぎに、for 文で i を横の座標として動かしていき、3つのパターンを生成します。
1つめのパターンは、「 stroke(coswave[i]*255); 」で色を決めて、
「 line(i, 0, i, height/3); 」で上から 1/3 のところまで、その指定色で縦の線を引いています。
真ん中が黒色で両端が白色の画像になります。
見ようによっては、2つの円柱をくっつけてその間を見ているように見えるかもしれません。

* ここで使われている stroke() 関数ですが、これはラインや図形の境界線の色を指定する関数です。指定される色のモードは、現在の colorMode() によってRGBかHSBになります。デフォルトのカラースペースはRGBであり,各色の範囲は0から255です。引数が1つの stroke(gray) はグレィスケールで明暗を指定します。

2つめのパターンは、「 stroke(coswave[i]*255 / 4); 」で色を決めて、
「 line(i, height/3, i, height/3*2); 」で上から 1/3 ~ 2/3 のところまで、その指定色で縦の線を引いています。
上段のパターンと比較すると、|cos(x)|/4 ですから、第1のパターンの真ん中の部分 1/4 のところだけを横に伸ばしたような色合いになっているはずです。

最後に3つめのパターンは、「 stroke(255 - coswave[i]*255); 」で色を決めて、
「 line(i, height/3*2, i, height); 」で上から 2/3 のところから画像の一番下まで、その指定色で縦の線を引いています。
第1のパターンの白黒反転した図になります。
なんとなく1つの円柱を正面から見ているように見えなくもないですが、円柱を正面から見たときには、単に sin(x) のように思います。
そんなときにも、 Processing の簡単さが威力を発揮します。少し書き換えて f(x) = 1 - |cos(x)| (図の上 1/3)と f(x) = sin(x) (図の下 1/3)が比較できるような図を描いてみました。

コードは以下ですが、なんとなく sin(x) の方は、立体感に欠けますね。ちなみに、真ん中の gray の帯のところの真ん中あたりが薄く黒っぽく見えると思いますが、これは恐らく目の錯覚です。
sin(x) に奥行を感じたいところですから、f(x) = {sin(x)}^2 と sin の2乗で試してみましょう。
前のコードに、次を追加して、真ん中の gray の帯だったところを、 sin の2乗の式に変更してみます。

を足してみました。私には真ん中が円柱を正面から眺めたように見えますが、皆さんはいかがでしょう。