[Processing]座標系の保存と復元をするpushMatrix()とpopMatrix()

Written by uechoco 2月 05
このエントリをはてなブックマークに追加[Processing]座標系の保存と復元をするpushMatrix()とpopMatrix()のはてなブックマーク被リンク数このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

 Processingでは、translaterotatescaleなどで座標系を変更することができますが、現在の座標系を保存したり、1前の座標系を復元したりできます。それがpushMatrix()popMatrix()です。

 pushMatrix()popMatrix()は、名前からわかるとおり、スタックで保存されます。スタックが空の状態(pushMatrix()を1度も呼ばないに等しい状態)でpopMatrix()を呼び出すと、

java.lang.RuntimeException: missing a popMatrix() to go with that push Matrix()

というエラーが発生します。また、popMatrix()をせずにpushMatrix()を呼びすぎるとスタックが足りなくなって、

java.lang.RuntimeException: pushMatrix() cannot use push more than 32 times

というエラーが発生します。エラーから読み取れるのは、スタックの上限(保持できる座標系の数)は32個のようです。33個目を登録しようとした時点で上記のエラーが発生します。

 似たような名前の命令で、resetMatrix()がありますが、これは座標系をリセットする命令です。スタックをリセットするわけではないようです。

Processing:
  1. size(200, 200);
  2. colorMode(HSB, 100);
  3.  
  4. int angle = 25;
  5. int x = 4;
  6. int r = 10;
  7.  
  8. // 座標系を移動して中心を基点にする
  9.  
  10. for (int i = 0; i <20; i++) {
  11.   int c = i * 10 % 100;
  12.   stroke(c, 100, 100, 80);
  13.   fill(c, 60, 100, 80);
  14.  
  15.   pushMatrix(); // 現在の座標系を保存
  16.  
  17.   rotate(radians(i * angle)); // 回転
  18.   translate(i * x, 0); // 移動
  19.     cos(radians(60))*r,
  20.     -sin(radians(60))*r,
  21.     cos(radians(180))*r,
  22.     -sin(radians(180))*r,
  23.     cos(radians(300))*r,
  24.     -sin(radians(300))*r
  25.   );
  26.  
  27.   popMatrix(); // 座標系を復元
  28. }

processing_MatrixSample.jpg

 

このエントリをはてなブックマークに追加[Processing]座標系の保存と復元をするpushMatrix()とpopMatrix()のはてなブックマーク被リンク数このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

No Responses to “[Processing]座標系の保存と復元をするpushMatrix()とpopMatrix()”

コメントはまだありません。

Comments RSS rss うえちょこ@ぼろぐ TrackBack Identifier URI rss うえちょこ@ぼろぐ

コメントをどうぞ