第 3 章 リファレンス 51
3.6 PointArray クラス
vec *= mat ; // V e c t o rク ラ ス の 乗 算 演 算 子
vv = mat * vec ; // R M a t r i xク ラ ス の 乗 算 演 算 子
bool operator==(const Vector& rhs) const bool operator!=(const Vector& rhs) const 戻り値 判定結果
説 明 ベクトルrhsと一致または不一致であればtrueになる.
Note
• この判定は,2点(位置ベクトル)の間の距離を計算して,それが位置許容誤差内であるかどうかを 調べることによって行われる.
• 位置許容誤差の取得と設定にはそれぞれGetPositionTolerance()関数と wfl::SetPositionTolerance()関数を用いる.
126 第3章 リファレンス 戻り値 Point型の点オブジェクト
説 明 インデックスiの点オブジェクトへの参照を取得する.
Note
• iがGetN()メンバー関数で取得される点数以上の場合はエラーとなる.
• このメンバー関数で取得される参照には書き込みできない.従って左辺値にはなれない.
Point& At(int i) const
戻り値 Point型の点オブジェクト
説 明 インデックスiの点オブジェクトへの参照を取得する.
Note
• iがGetN()メンバー関数で取得される点数以上の場合はエラーとなる.
• このメンバー関数で取得される参照には書き込みできるため左辺値になれる.
Example
P o i n t A r r a y pa ( pp );
pa . At (0) *= 3 . 0 ; // 先 頭 の 要 素 に3を 乗 算 す る
void SetPoint(int i, const Point& p) 戻り値 なし
説 明 インデックスiの要素としてPoint型の点オブジェクトpを設定する.
Note
• iがGetN()メンバー関数で取得される点数以上の場合はエラーとなる.
• 点数は増加しない.
• 点を追加する(点数を増加する)場合には,Insert()メンバー関数を用いる.
void Insert(const Point& p)
void Insert(int i, const Point& p) 戻り値 なし
説 明 第1の形式では,配列の末尾にPoint型の点オブジェクトpを挿入する.第2の形式では,
インデックスiの要素の直前に点オブジェクトpを挿入する.
Note
• iがGetN()メンバー関数で取得される点数を超える場合はエラーとなる.
• 配列の長さ(点数)は自動的に増加される.
void Remove(void) void Remove(int i) 戻り値 なし
説 明 第1の形式では,配列の末尾から点オブジェクトを一つ削除する.第2の形式では,インデッ クスiの点オブジェクトを削除する.
Note
• iがGetN()メンバー関数で取得される点数以上の場合はエラーとなる.
• 配列の長さ(点数)は自動的に減少する.
PointArray& Rotate(const RMatrix& r) 戻り値 対象オブジェクトへの参照
説 明 RMatrix型の回転行列rでこのオブジェクトを回転する.
PointArray GetBoundingBox(void) const
戻り値 外接直方体の対角点である2点のPointArray型オブジェクト
説 明 全点をその中に含む外接直方体を求め,その対角点を戻す.戻り値のPointArray型オブジェ クトでは,x,y,z座標値が最小の頂点がインデックス0の点,またこれらが最大の頂点がインデッ クス1の点となっている.
Note
• 点数が0個の場合はエラーになる.
Example
// P o i n t A r r a yのp a 1に 点 群 が 入 っ て い る P o i n t A r r a y pa2 = pa1 . G e t B o u n d i n g B o x ();
c o u t < < "最小座標値の点: " < < pa2 [0] < < e n d l ; c o u t < < "最大座標値の点: " < < pa2 [1] < < e n d l ;
c o u t < < "中心点: " < < ( pa2 [0] + pa2 [ 1 ] ) / 2 . 0 < < e n d l ;
Vector GetCenter(void) const 戻り値 Vector型の位置座標
説 明 全点をその中に含む外接直方体の中心座標を取得する.
void SetCenter(const Vector& p) 戻り値 なし
説 明 全点をその中に含む直方体の中心座標が Vector型の位置pになるように点群を平行移動
128 第3章 リファレンス する.
void Localize(void) 戻り値 なし
説 明 全点をその中に含む直方体の中心座標が原点になるように点群を平行移動する.
double GetMaxX(void) const double GetMaxY(void) const double GetMaxZ(void) const 戻り値 最大座標値
説 明 それぞれ,点群の中での座標の最大値を取得する.
Note
• 点数が多い場合,この関数を個別に呼び出すとパフォーマンスが悪い.最大最小値が必要な場合は 代わりにGetBoundingBox()メンバー関数を用いる.
double GetMinX(void) const double GetMinY(void) const double GetMinZ(void) const 戻り値 最小座標値
説 明 それぞれ,点群の中での座標の最小値を取得する.
Note
• 点数が多い場合,この関数を個別に呼び出すとパフォーマンスが悪い.最大最小値が必要な場合は 代わりにGetBoundingBox()メンバー関数を用いる.
double GetWidth(void) const double GetHeight(void) const double GetDepth(void) const 戻り値 空間的な長さ
説 明 それぞれ,全点をその中に含む外接直方体のx方向の幅,y方向の高さ,z方向の奥行きを取 得する.
Note
• 点数が0個の場合はエラーになる.
Plane GetPlane(void) const 戻り値 Plane型の平面オブジェクト
説 明 この点群の最初の3点を含む平面を取得する.
PointArray& ProjectionOn(const Plane& plane)
PointArray& ProjectionOn(const Plane& plane, const Line& line) 戻り値 対象オブジェクトへの参照
説 明 第1番目の形式では,この点群をPlane型の平面planeへ正投影する.第2番目の形式では,
この点群を通りLine型の直線lineに平行な直線に沿って,この点群をPlane型の平面plane へ投影する.
bool IsInplane(void) const 戻り値 判定結果
説 明 この点群の点が全て同一平面上にあるかどうか判定する.
void SaveAsCsv(const char* fname) const 戻り値 なし
説 明 ファイル名fnameのCSV形式ファイルとして点群の座標を保存する.
3.6.2 オーバーロード演算子
Point& operator[](int i) const 戻り値 Point型の点オブジェクト
説 明 インデックスiの点オブジェクトへの参照を取得する.左辺値として代入可能.
PointArray& operator=(const PointArray& rhs) 戻り値 対象オブジェクトへの参照
説 明 rhsに含まれる全ての点オブジェクトを対象オブジェクトにコピーする代入演算子.
PointArray& operator-=(const Vector& rhs) PointArray& operator+=(const Vector& rhs) 戻り値 対象オブジェクトへの参照
説 明 含まれる全ての点オブジェクトにVector型のベクトルrhsを加減算する代入演算子.
130 第3章 リファレンス
PointArray& operator*=(double m)
PointArray& operator*=(const RMatrix& mat) 戻り値 Point型の点オブジェクト
説 明 乗算代入演算子.第1の形式では,含まれる全ての点オブジェクトにスカラー値mを乗算す る.第2の形式では含まれる全ての点オブジェクトに左側よりRMatrix型の行列matを乗算する.
bool operator==(const PointArray& rhs) 戻り値 判定結果
説 明 等号演算子.含まれる全ての点オブジェクトがrhsの全ての点オブジェクトに等しいとき trueになる.
bool operator!=(const PointArray& rhs) 戻り値 判定結果
説 明 不等号演算子.含まれる点オブジェクトの一つでもrhsの点オブジェクトと異なるときtrue になる.