< 前へ | [ トップへ ] | 次へ > |
---|
立体モデルと同様、ポリゴンにも並行移動や回転などの便利な機能が用意されています。ポリゴンの基本的な扱い方は立体モデルと全く同じです。
すでに述べたように、ポリゴンは多数組み合わせて独自の立体モデルを開発する際に使用します。その際、大量のポリゴンの座標値を一々計算で求めるのは大変面倒です。そこで回転や平行移動の機能をうまく活用する事で、様々な形状を楽に形作る事が可能となります。
ここでは、ポリゴンの扱い方に関して、順を追って確認していきましょう。
■ 平行移動
ポリゴンを平行移動するには、ポリゴンクラスの move メソッドを使用します。
move( double X変位, double Y変位, double Z変位 ) 例として3D仮想空間に四角形ポリゴン QuadrangleElement3DEG を配置し、X方向に 1 、Y方向に 2 、Z方向に 3 だけ平行移動してみましょう。
import rxvesapi.system3d.geometry.*;
import rxvesapi.system3d.renderer.*;
import rxvesapi.system3d.model.*;
import java.awt.Color;
public class Test{
public static void main(String[] args){
/*3D仮想空間*/
Realtime3DFrame frame = new Realtime3DFrame();
/*座標軸モデル*/
AxisModel3DEG axis = new AxisModel3DEG();
/*一辺の長さが1の正方形ポリゴン*/
QuadrangleElement3DEG quad
= new QuadrangleElement3DEG(
0.0, 0.0, 0.0,
1.0, 0.0, 0.0,
1.0, 1.0, 0.0,
0.0, 1.0, 0.0,
Color.blue
);
quad.move( 1.0, 2.0, 3.0 );/*ポリゴンの平行移動*/
/*配置*/
frame.add( axis );
frame.add( quad );
}
}
▼実行結果
なお、配置(add)した後の平行移動操作も常に反映されます。
■ 回転
続いて回転操作を説明しましょう。
・座標軸まわりの回転
もっとも基本的なのがX軸やZ軸などの座標軸まわりの回転です。概念的にはとてもシンプルで、詳しく説明する余地もありません。しかし実際にはあまり用いる事は無いでしょう。
X軸のまわりの回転は rotX メソッドを用います。同様にY軸まわりなら rotY 、Z軸まわりなら rotZ を用います。
rotX( double 回転角度 ) 回転方向はX軸の方向に右ねじをねじ込む方向を正とします。また回転角度はラジアン(rad)で指定します。ラジアンに関しても立体モデルの時に既に説明しましたが、念のためにおさらいしておきましょう。
ラジアンとは、180度をπ(≒3.141592653589793)とする角度の表記法です。180度でπラジアンなので、度をラジアンに変換するには π/180 をかければ良いだけです。例えば60度なら
60[°] = 60×(π/180) [rad] ( = π/3 [rad] ) となります。なお精密なπの値はJava言語のMathクラスに標準で用意されており、Math.PI として double 値が取得できます。
それでは、例として3D仮想空間に四角形ポリゴンを配置し、X軸まわりに60度だけ平行移動してみましょう。
import rxvesapi.system3d.geometry.*;
import rxvesapi.system3d.renderer.*;
import rxvesapi.system3d.model.*;
import java.awt.Color;
public class Test{
public static void main(String[] args){
/*3D仮想空間*/
Realtime3DFrame frame = new Realtime3DFrame();
/*座標軸モデル*/
AxisModel3DEG axis = new AxisModel3DEG();
/*一辺の長さが1の正方形ポリゴン*/
QuadrangleElement3DEG quad
= new QuadrangleElement3DEG(
0.0, 0.0, 0.0,
1.0, 0.0, 0.0,
1.0, 1.0, 0.0,
0.0, 1.0, 0.0,
Color.blue
);
double angle = Math.PI*60.0/180.0; /*60度のラジアン角*/
quad.rotX( angle ); /*X軸まわりの回転*/
/*配置*/
frame.add( axis );
frame.add( quad );
}
}
▼実行結果
このように初期配置から60度だけ回転されました。なお、配置(add)した後の回転操作も常に反映されます。
平行移動操作と回転操作を併用することももちろん可能です。その場合の操作は記述した順番に従って逐次的に実行されます。一般には平行移動させた後に回転させる場合と、回転させた後に平行移動させる場合では結果が異なりますのでご注意ください。複数の回転操作を併用する場合も同様です。
・原点を通る任意の軸ベクトルまわりの回転
続いて、原点を通る任意の方向ベクトルを軸とした回転操作を説明しましょう。これには rot メソッドを使用します。
rot( double 回転角度,
double 軸ベクトルX成分,
double 軸ベクトルY成分,
double 軸ベクトルZ成分
)回転方向は、軸ベクトルの向きに右ねじをねじ込む回転方向を正とします。
例として四角形ポリゴンを配置し、方向ベクトル( 0.5, 1.0, 0.2 )のまわりに60度回転させてみましょう。先ほどの例のソースコードの内、rotX の部分を以下のように書き換えて実行してみてください。
/*60度のラジアン角*/
double angle = Math.PI*60.0/180.0;
/*ベクトルまわりの回転*/
quad.rot( angle, 0.5, 1.0, 0.2 );
▼実行結果
実行結果から、斜めのベクトルを軸として回転された事が見て取れます。
・任意の点を通り、任意の方向を向いた軸ベクトルまわりの回転
最後に、任意の点を通り、任意の方向を向いたベクトルを軸とする回転操作について説明しましょう。これは最も高度な回転ですが、同時に最も使用頻度の高い回転操作となるでしょう。とても便利な操作です。
rot( double 回転角度,
double 軸ベクトル方向X成分,
double 軸ベクトル方向Y成分,
double 軸ベクトル方向Z成分,
double 軸ベクトル始点X座標,
double 軸ベクトル始点Y座標,
double 軸ベクトル始点Z座標
)回転方向は、軸ベクトルの向きに右ねじをねじ込む回転方向を正とします。
それでは例として箱型モデルを配置し、点( 3, 0, 0, )を通り、方向ベクトル( 0, 0, 1 )のまわりに60度回転させてみましょう。先ほどの例のソースコードの内、rotX の部分を以下のように書き換えて実行してみてください。
/*60度のラジアン角*/
double angle = Math.PI*60.0/180.0;
/*回転*/
quad.rot( angle, 1.0,0.0,0.0, 0.0,0.0,3.0 );
▼実行結果
座標点( 0, 0, 3 )を通り、方向ベクトル( 1, 0, 0, )の軸のまわりに60度回転された様子が見て取れます。
< 前へ | [ トップへ ] | 次へ > |
---|