• 検索結果がありません。

Plane クラス

ドキュメント内 Wave Field Library (WFL) Polygon Source Library (PSL) (ページ 142-146)

第 3 章 リファレンス 55

3.10 Plane クラス

PointArrayクラスの派生クラス.無限の広がりを有する平面オブジェクトを表す.このクラスはPointArrayク ラスのメンバー関数と演算子を継承しているため,回転や平行移動ができる.

3.10 Planeクラス 143 WFL3以降では,平面に裏表が定義されている.GetNormalVector()メンバー関数で取得される法線ベクトルは表 側の面からの法線ベクトルである.

3.10.1 メンバー関数

Plane(void)

Plane(const Point& p1, const Point& p2, const Point& p3) Plane(const Point& p, const Vector& n)

戻り値 なし

説 明 コンストラクタ.第1の形式では(x, y,0)平面を生成する.第2の形式では,Point型の3点p1, p2, p3 を含む平面を生成する.第3の形式では,Vector型の法線ベクトルがnで1点pを含む平面を生成する.

Note

1の形式の場合,3点の順序が右ねじの法則に合うように面の表側(法線ベクトル)が設定される.

p1, p2,p3の2点以上が同一点の場合や,nがゼロベクトルの場合はエラーとなる.

const Vector& GetNormalVector(void) const

戻り値 Vector型のベクトル

説 明 平面の表側の法線ベクトルを取得する.

Note

WFL3以降では,法線ベクトルは表側の面からのそれとなり,平面の位置等では変化しない.PointArrayクラ スのoperator*=()メンバー関数による回転や,Reverse()メンバー関数による反転で表面の方向を変えるこ とができる.

WFL3以前では, 平面の法線ベクトルは,その平面の原点からの距離が正値になるように定義される.すなわ ち,法線ベクトルnとすると,

n·r=nxx+nyy+nzz=d (3.9)

において,d≥0となるようにnが定義される.そのため,平面の位置の変化により法線ベクトルが反転するこ とがある.

上式のdはGetDistance()メンバー関数で取得できる.

void SetNormalVector(const Vector& n)

戻り値 無し

説 明 Vector型のベクトルnを平面の法線ベクトルとして設定する.

void Reverse(void)

戻り値 無し

説 明 平面の向きを逆転する.

int GetSide(const Point& p) const

戻り値 点pの位置.-1:裏側の半空間,0:面内,1:表側の半空間

説 明 この関数は,点pが平面のどちら側に位置しているかを検出する.

double GetDistance(void) const

double GetDistance(const Point& p) const

戻り値 距離

説 明 第1の形式では,原点からの距離を取得する.すなわち式(3.9)のdを取得する.第2の形式では,Point 型の点pからの距離を取得する.

double GetX(double y, double z) const double GetY(double x, double z) const double GetZ(double x, double y) const

戻り値 座標値

説 明 二つの座標値から平面上の点の残りの一つの座標値を取得する.

Note

求めたい座標値の軸と対象平面が平行の場合にはエラーとなる.

Point GetIntersectionPoint(const Line& line) const

戻り値 Point型の点オブジェクト

説 明 Line型の直線lineとの交点を取得する.

Line GetIntersectionLine(const Plane& plane) const

戻り値 Line型の直線オブジェクト

説 明 Plane型の平面planeとの交線を取得する.

3.10 Planeクラス 145 Point GetVerticalPoint(const Point& p) const

戻り値 Point型の点オブジェクト

説 明 Point型の点pからの垂線の足となる点を取得する.

PointArray& Rotate(const RMatrix& r)

戻り値 対象オブジェクトへの参照

説 明 PointArrayクラスから継承しているメンバー関数.RMatrix型の回転行列rで平面を回転する.

bool IsParallel(const Line& line) const bool IsParallel(const Plane& plane) const

戻り値 判定結果

説 明 Line型の直線lineまたはPlane型の平面planeと平行かどうか判定する.

Include(const Point& p) const Include(const Plane& plane) const

戻り値 判定結果

説 明 Point型の点pまたはPlane型の平面planeが対象平面に含まれているかどうか判定する.

Note

点と平面の距離が位置許容誤差以下ならtrueとなる.

Plane型に適用した場合,双方の面の裏表に関係なく,平面が重なっている場合にtrueを返す.面の表裏も含 めて同一平面かどうかを判定するためには==演算子を用いる.

bool IsEmpty(void) const

戻り値 判定結果

説 明 空のオブジェクトかどうか判定する.

Note

法線ベクトルの長さが位置許容誤差以下ならtrueとなる.

3.10.2 オーバーロード演算子

bool operator==(const Plane& plane) const

戻り値 判定結果

説 明 対象の平面がplaneと同一の平面かどうか判定する.

Note

法線ベクトルが等しく,原点からの距離が位置許容誤差以下で等しい場合にtrueとなる.

WFL2以前では幾何的に重なる面であればtrueとなったが,WFL3以降では平面の表裏も含めて等しい場合 にtrueとなる.表裏に無関係に幾何的に重なっていることを検出するためにはInclude()メンバー関数を用 いる.

bool operator!=(const Plane& plane) const

戻り値 判定結果

説 明 対象の平面がplaneと異なった平面かどうか判定する.

PointArray& operator=(const PointArray& rhs) PointArray& operator-=(const Vector& rhs) PointArray& operator+=(const Vector& rhs) PointArray& operator*=(double m)

PointArray& operator*=(const RMatrix& mat)

戻り値 そのオブジェクトへの参照

説 明 PointArrayクラスから継承している演算子.+=演算子や-=演算子で移動,*=演算子で面の回転ができる.

3.10.3 静的メンバー関数

static Plane XY(void) static Plane YZ(void) static Plane ZX(void)

戻り値 Plane型の平面オブジェクト

説 明 それぞれ,(x, y,0)平面, (0, y, z)平面,(x,0, z)平面の平面オブジェクトを取得する.

ドキュメント内 Wave Field Library (WFL) Polygon Source Library (PSL) (ページ 142-146)