home processing download documents tutorial python tutorial gallery source about
 チュートリアル (トピック一覧へ戻る)

3次元ベクトル入門

     点とベクトル

iGeoにおいて、三次元ベクトルと点は共にX軸・Y軸・Z軸を表す3つの数値の順序付き集合として表現されます。

三次元座標を相対座標として解釈すれば、それは座標(0, 0, 0)からその座標まで伸びる、 方向と長さを持つベクトルとなります。ベクトルは絶対位置を持たないため、 三次元空間において厳密には実体を持ちえません。

対して、三次元座標を絶対座標として解釈すれば、それはその座標に位置する点となります。 点は絶対位置を持つため、空間において実体を持ちます。

ベクトルは二点を与えられたとき初めて実体化されます。


ただし、点とベクトルは3つの数値の集合という同じデータ構造で表現されます。そのため、或る3つの数値の集合が点であるかベクトルであるかは、その場の解釈に依ります。

たとえば、点は座標(0, 0, 0)からその座標まで伸びるベクトルであるとも解釈できます。

逆についても、ベクトルはその座標に位置する点として捉えられます。

以上の理由から、iGeoにおいて点とベクトルは同じデータ型IVecとして表現されます。

以前のチュートリアルで登場したIPointはIVecの一種ではありますが、 IPointが空間上で実体のあるオブジェクトであるのに対して、 IVecは空間上のオブジェクトとしては取り扱われません。つまり、IVecは視覚化されず、 iGeoサーバおよびファイルに実体のあるオブジェクトとして記録されることもありません。

ただし、IVecはIPointより時間的かつ空間的な効率の良い引数として、 曲線、平面、曲面、ポリゴンメッシュの生成に利用されます。内部的にはそれらの 実体を持つオブジェクトの構成要素として実体化しているとも言えます。


     IVecクラス

IVecオブジェクトを生成するには、三次元座標を表す3つの数値をコンストラクタに渡します。

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);

     ベクトルによる幾何学オブジェクトの生成

IVecオブジェクトによって、IPoint、ICurve、ISurfaceなどのオブジェクトを簡単に生成できます。

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);


     矢印によるベクトルの表示

show()メソッドを用いることで、ベクトルは矢印として視覚化することができます。 ベクトルそのものは開始点を持たないため、show()メソッドは開始点の座標を引数として取ります。その座標が渡されなかった場合、show()は座標(0, 0, 0)を開始点としてベクトルを表示します。

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.);


(トピック一覧へ戻る)

HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java / Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT