チュートリアル | (トピック一覧へ戻る) |
三次元座標を相対座標として解釈すれば、それは座標(0, 0, 0)からその座標まで伸びる、 方向と長さを持つベクトルとなります。ベクトルは絶対位置を持たないため、 三次元空間において厳密には実体を持ちえません。
対して、三次元座標を絶対座標として解釈すれば、それはその座標に位置する点となります。 点は絶対位置を持つため、空間において実体を持ちます。
ベクトルは二点を与えられたとき初めて実体化されます。
ただし、点とベクトルは3つの数値の集合という同じデータ構造で表現されます。そのため、或る3つの数値の集合が点であるかベクトルであるかは、その場の解釈に依ります。
たとえば、点は座標(0, 0, 0)からその座標まで伸びるベクトルであるとも解釈できます。
逆についても、ベクトルはその座標に位置する点として捉えられます。
以上の理由から、iGeoにおいて点とベクトルは同じデータ型IVecとして表現されます。
以前のチュートリアルで登場したIPointはIVecの一種ではありますが、 IPointが空間上で実体のあるオブジェクトであるのに対して、 IVecは空間上のオブジェクトとしては取り扱われません。つまり、IVecは視覚化されず、 iGeoサーバおよびファイルに実体のあるオブジェクトとして記録されることもありません。
ただし、IVecはIPointより時間的かつ空間的な効率の良い引数として、 曲線、平面、曲面、ポリゴンメッシュの生成に利用されます。内部的にはそれらの 実体を持つオブジェクトの構成要素として実体化しているとも言えます。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); IVec v1 = new IVec(0, 0, 0); IVec v2 = new IVec(10, 20, 30);
IVecオブジェクトは空間的に実体を持たないため、 上記のスケッチは実行時に何のオブジェクトも表示しません。
IVecオブジェクトの生成には、 コンストラクタnew IVec()以外にもIG.vec() およびIG.v()関数を使用することもできます。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); IVec v1 = IG.vec(0, 0, 0); IVec v2 = IG.vec(10, 20, 30);
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); IVec v1 = IG.v(0, 0, 0); IVec v2 = IG.v(10, 20, 30);
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); IVec v1 = new IVec(0, 0, 0); IVec v2 = new IVec(10, 20, 30); new IPoint(v1).clr(1.,0,0); new IPoint(v2).clr(0,0,1.); new ICurve(v1,v2); IVec v3 = new IVec(-30,0,-20); IVec v4 = new IVec(-60,50,-20); IVec v5 = new IVec(-30,50,0); new ISurface(v1,v3,v4,v5);
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); IVec v1 = new IVec(10, 20, 30); // showing the vector at (0,0,0) (gray) v1.show(); // showing the vector at (20,0,0) (red) v1.show( new IVec(20, 0, 0) ).clr(1.,0,0); // showing the vector at (-20,0,10) (magenta) v1.show(new IVec(-20, 0, 10) ).clr(1.,0,1.); IVec v2 = new IVec(30, -30, 0); // showing the vector at (0,0,0) (black) v2.show().clr(0); // showing the vector at (-10,-10,0) (blue) v2.show(new IVec(-10, -10, 0)).clr(0,0,1.); // showing the vector at (-30,-20,-10) (cyan) v2.show(new IVec(-30, -20, -10)).clr(0,1.,1.);