第 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)平面の平面オブジェクトを取得する.