#author("2019-05-22T00:20:03+09:00","default:qua","qua")
#author("2019-05-22T14:20:09+09:00","default:qua","qua")
#navi(Processing/2.ちょっと発展)
* 2-7 3Dの座標変換 [#pe4527ad]
3次元画像での座標変換も2次元と似ている。 
translate(x,y,z)は、原点を(x,y,z)に移動する。 
座標の回転はどの軸を中心に回転するかで3つの方法が用意されている。 
rotateX(th)はX軸を中心に、rotateY(th)はY軸を中心に、rotateZ(th)はZ軸を中心にそれぞれ座標をthラジアンだけ回転させる。 

次のスケッチでは立方体が回転する。ここで、frameCountはスケッチの実行開始以来、drawが実行された回数である。 

 void setup(){ 
   size(300,300,P3D); 
 } 
 void draw(){ 
   clear(); 
   lights(); 
   translate(150,150,0); 
   rotateX(frameCount * 0.1); 
   box(100); 
 } 

次のように、2軸の周りの回転を組み合わせることもできる。 
 
 void setup(){ 
   size(300,300,P3D); 
 } 
 void draw(){ 
   clear(); 
   lights(); 
   translate(150,150,0); 
   rotateX(frameCount * 0.1); 
   rotateZ(frameCount * 0.2); 
   box(100); 
 } 
 
2次元の時と同様に、2つ以上の図形を回転させる場合には、pushMatrix(), popMatrix()で座標変換の記憶と呼び出しを行う。 
 

【課題】 
マウスの座標によって立方体を回転させるようなスケッチを作れ。 
マウスのx座標, y座標の値でx軸、y軸の周りの回転角度を決めよ。 
ウィンドウの両端がそれぞれ0, 2πラジアンに対応するようにせよ。 
 
Processingには、定数PI, TWO_PIが用意されているので、x軸の周りの角度は 
 
   mouseX / width * TWO_PI 
 
で与えられる。 
なお、一般に c+(x-a)*(d-c)/(b-a) の値を計算する関数map(x,a,b,c,d)が用意されているので、同じことが、map関数を用いて 
 
   map(mouseX, 0, width, 0, TWO_PI) 
 
のように実現される。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS