座標系
< 前へ [ トップへ ] 次へ >

 ここでは、動きのある3D表現を扱う上で欠かせない概念である、「座標系」について解説します。
 「座標系」と言うと難しく感じるかもしれませんが、RINEARN-X 3Dでは座標系を非常に簡単に扱えるように工夫されています。具体的な利用方法は後に解説するとして、ここでは座標系そのものの意味、また利点などについて解説します。


 座標系とは

・座標系と位置ベクトル
 座標系は、空間中の位置を指定する際に、基準とされる存在です。例えば右図のように、部屋の中にボールが置かれていたとしましょう。
 このボールの位置を伝えるには、あなたを基準として、右に1m、前に2m、上に3m、といったように表現することができるでしょう。これを数字で ( 1, 2, 3 ) と書く事にします。このように位置を表す3つの数字の組のことを、一般に位置ベクトルと呼びます。
 さて座標系とは、ここで言えばあなたの事です。つまり上の例では、あなたという座標系から見たボールの位置が、( 1, 2, 3 )である、と言う事になります。

・位置ベクトルは座標系によって異なる
 ここで注意すべきなのは、ただ単に ( 1, 2, 3 ) という数字だけでは、位置を伝えるには不十分だ、と言う事です。なぜなら、( 1, 2, 3 ) が指し示す位置は、それが誰から見たものかによって異なるからです。
 左の図のように、あなたにとって右に1m、前に2m、上に3m行った地点は、別の人にとっては右に0m、前に5m、上に3m行った地点かもしれません。 この場合、この別の人はボールの位置を ( 0, 5, 3 ) と伝えるでしょう。同じボールの位置を指定しているはずなのに、あなたから見たものとは全く別の位置ベクトルですね。
  
 このような不一致が起こる理由として、まず第一に、両者は立っている位置が違います。つまり両者にとっての原点: ( 0, 0, 0, ) が指し示す位置が既に異なるのです。そして第二に、両者が正面を向いている方向も違いますから、「右」や「前」が指し示す方向も、両者で異なるのです。つまりあなたにとっての「右」と、別の人にとっての「右」は方向が違うのです。
 
つまり空間中の位置を伝えるには、誰から見たのかという基準が必要なのです。そして、この基準となるのが座標系なのです。


■ 立体を動かす仕組み
 座標系は、立体を動的に動かしたい場合に使用します。それでは、座標系をどのように使って立体を動かすのでしょうか。その原理を説明しましょう。
 まず適当な座標系を用意し、立体をその座標系の ( 1, 2, 3 ) に配置します。別に位置はどこでもかまいませんが、例としてここでは ( 1, 2, 3 ) にしました。 次に、座標系を動かします。

  

 すると、座標系に配置された立体も一緒に動いて見えます。なぜなら座標系が動くと、その座標系を基準にした ( 1, 2, 3 ) が示す場所も動くからです。要するに、立体を動かすにあたって、 「 立体の位置情報を書き換える代わりに、位置の基準(=座標系)を動かした 」 という事です。
 「 なんだ、ばかばかしい、当たり前のことではないか 」 と思われるかもしれません。しかし座標系とは、言葉は難しそうですが単にこれだけのものであり、それ以上のものでは無いのです。


■ なぜ座標系を使うのか
 動く立体の数が少ない場合などには座標系を使う恩恵は少ないですが、一緒に動く立体の数が多くなったり、複数の軌道が合成された複雑な動きを表現する場合などには、座標系の強力さを実感できるでしょう。
 加えて、立体が所属する座標系を動かす処理は、立体を構成する全ポリゴンの座標値を一枚一枚書き換えるのに比べて、大幅に軽いという点も重要です。例えば、座標系を用いずに立体モデルの move メソッドや rot メソッドを連続的に呼び出し続ける事でも、立体の動きを(無理矢理)表現する事は可能ですが、その処理は座標系を活用するよりもかなり重くなってしまうでしょう。
 この処理速度の違いは、特に回転操作の場合において著しく表れます。というのも、3次元の回転操作には多くの三角関数を用いた比較的重い処理を要するからです。立体を構成する全てのポリゴンを個別に回転させると数万回の回転演算が必要ですが、座標系を回転させるにはたった3本の基本ベクトルを回転させるだけで済んでしまいます。
 平行移動操作の場合でも、ポリゴン数が多くなると、内部処理においてメソッド呼び出しのオーバーヘッドが影響してくるため、やはり素直に座標系を用いたほうが若干高速な処理が可能です。

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


スポンサーリンク


スポンサーリンク

この階層の目次
お知らせ

Vnanoのソースコードと開発リポジトリをGitHubで公開
2018年09月30日 - 現在開発中の、ソフトウェア上でのスクリプト処理用途に向けた小型・軽量スクリプトエンジン「 Vnano 」のソースコード&リポジトリを公開しました。ビルド・使用方法や、現状の段階と今後などを解説します。

リニアングラフ3D&2D Ver.5.6 リリース! Java言語のプログラムからも制御可能に
2018年08月19日 - 約5年ぶりの大きなバージョンアップを迎えた、新しいリニアングラフ Ver.5.6の特徴をご紹介します。UIがリファインされ、Java言語でグラフ描画ライブラリとして使う事も可能になりました。

ライセンスの緩和方向への改訂を実施、条件を満たす場合のソフトの再配布などが可能に
2018年07月16日 - RINEARNでは2018年7月に、ソフトウェアライセンスの緩和方向への改訂を実施しました。新ライセンスでは、いくつかの条件を満たす場合において、ソフトの再配布などが無申請で可能になりました。

コードアーカイブ新着
配列を3Dグラフにアニメーションプロットする(点/線グラフ)

座標値配列の内容を、3次元の点/線グラフに連続でプロットし、アニメーションさせるサンプルプログラムです。
2018年11月14日
配列を2Dグラフにアニメーションプロットする

座標値配列の内容を、2次元グラフに連続でプロットし、アニメーションさせるサンプルプログラムです。
2018年11月13日
配列を3Dグラフにプロットする(曲面/メッシュグラフ)

座標値配列の内容を、3次元の曲面/メッシュグラフにプロットするサンプルプログラムです。
2018年11月12日
ファイルを3Dグラフにプロットする(曲面/メッシュグラフ)

座標値ファイルの内容を、3次元の曲面/メッシュグラフにプロットするサンプルプログラムです。
2018年11月11日
連番画像をアニメーション再生する簡易ツール

フォルダ内の連番画像ファイルを、動画への変換不要で、そのままアニメーションとして再生できる簡易ツールです。
2018年09月04日
公式Twitterアカウント

スポンサーリンク