立体モデルの平行移動と回転
< 前へ [ トップへ ] 次へ >


 晴れて立体モデルの配置ができたら、今度は立体モデルの移動です。移動の種類には平行移動と回転の2つが存在します。ここで一度3Dを勉強した経験のある方は、平行移動や回転と聞くと
変換を記述する4次元正方行列を用意して…もしくはクウォータニオンを設定して…
と気構えるかもしれません。しかしRINEARN-X 3Dではそのような心配は全く無用です。RINEARN 3Dは非常に強力かつ高度に抽象化されたジオメトリ演算機能を搭載しており、ユーザーは専門的な数学知識を一切必要とする事無く、かつ自由自在に立体モデルを操作する事ができるのです。


 平行移動

 立体モデルを平行移動するには、立体モデルの move メソッドを使用します。

move( double X変位, double Y変位, double Z変位 )

 例として3D仮想空間に箱型モデル BoxModel3DEG を配置し、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();

    /*箱型モデル*/
    BoxModel3DEG box
      = new BoxModel3DEG( 1.0, 1.0, 1.0, Color.blue );
    box.move( 1.0, 2.0, 3.0 ); // 平行移動


    /*配置*/
    frame.add( axis );
    frame.add( box );

  }
}

▼実行結果

なお、配置(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();

    /*箱型モデル*/
    BoxModel3DEG box
      = new BoxModel3DEG( 1.0, 1.0, 1.0, Color.blue );
    double angle = Math.PI*60.0/180.0; // 60度のラジアン角
    box.rotX( angle ); // X軸まわりの回転


    /*配置*/
    frame.add( axis );
    frame.add( box );

  }
}

▼実行結果

 このように初期配置から60度だけ回転されました。なお、配置(add)した後の回転操作も常に反映されます。
 平行移動操作と回転操作を併用することももちろん可能です。その場合の操作は記述した順番に従って逐次的に実行されます。一般には平行移動させた後に回転させる場合と、回転させた後に平行移動させる場合では結果が異なりますのでご注意ください。複数の回転操作を併用する場合も同様です。


・原点を通る任意の軸ベクトルまわりの回転
 続いて、原点を通る任意の方向ベクトルを軸とした回転操作を説明しましょう。これには rot メソッドを使用します。

rot( double 回転角度,
      double 軸ベクトルX成分,
      double 軸ベクトルY成分,
      double 軸ベクトルZ成分
)

 回転方向は、軸ベクトルの向きに右ねじをねじ込む回転方向を正とします。
 例として箱型モデルを配置し、方向ベクトル( 1, 2, 3 )のまわりに60度回転させてみましょう。先ほどの例のソースコードの内、rotX の部分を以下のように書き換えて実行してみてください。


/*60度のラジアン角*/
double angle = Math.PI*60.0/180.0;

/*ベクトルまわりの回転*/
box.rot( angle, 1.0, 2.0, 3.0 );

▼実行結果

 実行結果から、斜めのベクトルを軸として回転された事が見て取れます。


・任意の点を通り、任意の方向を向いた軸ベクトルまわりの回転
 最後に、任意の点を通り、任意の方向を向いたベクトルを軸とする回転操作について説明しましょう。これは最も高度な回転ですが、同時に最も使用頻度の高い回転操作となるでしょう。とても便利な操作です。

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;

/*回転*/
box.rot( angle, 1.0, 0.0, 0.0, 0.0, 0.0, 3.0 );

▼実行結果

 座標点( 0, 0, 3 )を通り、方向ベクトル( 1, 0, 0, )の軸のまわりに60度回転された様子が見て取れます。

< 前へ [ トップへ ] 次へ >


スポンサーリンク



スポンサーリンク

この階層の目次
新しいお知らせ

次回のVCSSL 3.4.10において、関数1個の挙動に非互換な修正が適用されます
2019年02月12日 - VCSSLの次回の正式リリース版3.4.10において、これまでドキュメントと実際の挙動が異なっていた描画系の関数1個に、非互換な修正が適用されます。その詳細と、使用コードでの対応方法について解説します。

RINEARNのソフトウェア向けにOpenJDKで生成したJava実行環境(JRE)の提供を開始
2019年02月06日 - Javaのリリースモデル変更への対応として、OpenJDKのjlinkツールを用いて、RINEARNのソフトウェア実行用に生成したJava実行環境(JRE)の提供を開始しました。その詳細と、今後の方針について解説します。

シンプル&コンパクトなプログラム関数電卓! 「 リニアンプロセッサー nano 」の概要
2019年01月26日 - RINEARNでは現在、プログラム関数電卓ソフト「 リニアンプロセッサー 」の派生版として、シンプル&コンパクトな方向性を目指した「 リニアンプロセッサー nano 」を開発中です。その概要をご紹介します。

コードアーカイブ新着
入力された数式を積分して値とグラフを表示するツール

画面上で数式を入力すると、それを数値的に積分し、値とグラフを表示してくれるGUIツールです。
2019年01月20日
z = f(x,y,t) の形の数式を3Dグラフとしてアニメーション描画するツール

入力欄に z = f(x,y,t) の形の数式を入力すると、それを3次元のグラフにアニメーション描画してくれる簡易ツールです。
2018年11月26日
y = f(x,t) の形の数式を2Dグラフとしてアニメーション描画するツール

入力欄に y = f(x,t) の形の数式を入力すると、それを2次元のグラフにアニメーション描画してくれる簡易ツールです。
2018年11月25日
t を媒介変数とする x(t), y(t), z(t) の数式を3Dグラフに描画し、アニメーションもできるツール

入力欄に x(t), y(t), z(t) の形の数式を入力すると、それを t を媒介変数として3次元のグラフに描画し、アニメーションもできる簡易ツールです。
2018年11月20日
t を媒介変数とする x(t), y(t) の数式を2Dグラフに描画し、アニメーションもできるツール

入力欄に x(t), y(t) の形の数式を入力すると、それを t を媒介変数として2次元のグラフに描画し、アニメーションもできる簡易ツールです。
2018年11月19日
公式Twitterアカウント

スポンサーリンク