久しぶりのProcessingで、習作をつくってみることにする。
エラーとバージョンアップ
簡単なコードを書いて実行してみると、動くことは動くのだが、以下のようなエラー(Warning)がでた。2011-11-26 21:34:34.011 java[1413:1c0f] *** CPerformer: ignoring exception 'Invalid parameter not satisfying: [self canBecomeMainWindow]' raised during perform of selector 'requestFocus:' on target 'FocusManager' with args '<AWTComponentSetFocusData: 0x11d980>'
Java関連のエラーのようだが、調査しても今一。Javaのバージョンアップをしてみよ、とか Lionのせいじゃないかとか。いろいろ試して、結果 Processingを最新版にするとエラーがでなくなった。
今まで使っていたのが、1.0.1 最新は、1.5.1 なので、随分とヴァージョンアップせずにほったらかしだったのね。
折たたみ、あるいは本をめくるような動作
つくってみたのは、以下のリンクからアプレットを動かしてみてください。紙を折るような動作
結構不満。
* ワイヤー表示なので、重なりが透けてみえる。
* 面と裏の色をつけたい。
* 永遠におり続ける動作にしたい。
* 円軌道が、平面的で立体感がない。
プログラムの解説
Processingのプログラムの基礎として* 最初にsetup()関数が実行され、draw()関数がループ実行される。
* グローバル変数は、最初に宣言しておく。
円座標の計算は
円の中心座標 (x0, y0) 角度 th (Radian) 注) 0度は、Y軸方向。つまり、右向き矢印は、90度、上向きは 180度。 半径 R 座標 x = x0 + R * sin(th) 座標 y = y0 + R * cos(th)
float sx; float sy; // 紙の上辺、真ん中の位置。 int sh; // 折り紙の高さ。 int sr; // 折り紙の上辺の半分。折る場合の半径。 float rad; // 折り曲げ角度。単位:度。 // 初期化 void setup(){ size(200, 200); // 画面の大きさ color(RGB,256); // 色設定 processingは、数種類の色定義を使うことが出来る。 background(255); // 背景色 frameRate(30); // 描写速度 draw()の実行回数 / 秒 // 初期化 sx = 100; sy = 50; sh = 80; sr = 40; rad = 270; //円軌道は、左端から始まり、右回転へ。 } void draw(){ background(255); // 毎回画面を真っ白にする。そうしないと前の絵が残る。 // 折り曲げを繰り返し。 if(rad == 90) rad = 270; stroke(0); // 黒で線を描く page(90); // 90度の左半分 → つまり、折り紙の右半分。 page(rad); // 角度radの状態の左半分。 rad = rad - 1; // 右回り。 } // 折り曲げ角度 r の 折り紙の左半分をワイヤーで描く void page(float r){ // 左上の位置を計算 float x = sx + sr * sin(radians(r)); float y = sy + sr * cos(radians(r)); // ワイヤー line(x, y, sx, sy); // 上辺 line(x, y, x , y + sh); // 左辺 line(x, y + sh, sx, sy + sh); // 下辺 line(sx, sy + sh, sx, sy); // 右辺 }
ワイヤーでやってみたが、どうも平行四辺形を描く方法があるらしい。また、三次元で描いて視点を動かすことで、立体的に表現することもできそうだ。
また、最近のProccessing本では、画像描写以外に機器制御への利用も解説しているらしい。
Processing。侮れない言語になってきたのだなあ。
0 件のコメント:
コメントを投稿