FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
FK::fk_Plane クラス

幾何平面を管理するクラス [詳解]

#include <FK/Plane.h>

+ FK::fk_Plane の継承関係図
+ FK::fk_Plane 連携図

公開メンバ関数

 fk_Plane (void)
 コンストラクタ
 
 fk_Plane (const fk_Plane &)
 コピーコンストラクタ
 
virtual ~fk_Plane ()
 デストラクタ
 
fk_Planeoperator= (const fk_Plane &)
 代入演算子
 
bool setPosNormal (const fk_Vector &pos, const fk_Vector &norm)
 平面設定関数1
 
bool set3Pos (const fk_Vector &pos1, const fk_Vector &pos2, const fk_Vector &pos3)
 平面設定関数2
 
bool setPosUVVec (const fk_Vector &pos, const fk_Vector &U, const fk_Vector &V)
 平面設定関数3
 
fk_Vector getBasePos (void)
 基点ベクトル参照関数
 
fk_Vector getUVec (void)
 Uベクトル参照関数
 
fk_Vector getVVec (void)
 Vベクトル参照関数
 
fk_Vector getNormal (void)
 法線ベクトル参照関数
 
double getDist (void)
 原点距離参照関数
 
double getDist (const fk_Vector &pos)
 任意点距離参照関数
 
fk_Vector getPos (double u, double v)
 u,v パラメータによる平面上点参照関数
 
bool isParallel (const fk_Vector &V)
 ベクトル平行判定関数
 
bool isParallel (const fk_Plane &P)
 平面平行判定関数
 
bool isVertical (const fk_Vector &V)
 ベクトル垂直判定関数
 
bool isVertical (const fk_Plane &P)
 平面垂直判定関数
 
std::tuple< bool, fk_VectorcalcCrossPos (const fk_Vector &A, const fk_Vector &B)
 交点位置ベクトル参照関数
 
std::tuple< bool, double > calcCrossLineParam (const fk_Vector &A, const fk_Vector &B)
 交点直線パラメータ参照関数
 
std::tuple< bool, double, double > calcCrossPlaneParam (const fk_Vector &A, const fk_Vector &B)
 交点平面パラメータ参照関数
 
std::tuple< bool, fk_Vector, double, double, double > calcCrossAll (const fk_Vector &A, const fk_Vector &B)
 交点情報参照関数
 
fk_Vector proj (const fk_Vector &P)
 点正射影算出関数
 
- 基底クラス FK::fk_BaseObject に属する継承公開メンバ関数
 fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT)
 コンストラクタ
 
fk_Type getObjectType (void) const
 タイプ取得関数
 

詳解

幾何平面を管理するクラス

このクラスは、空間中の平面に関する幾何的な算出を行う機能を提供します。 このクラスは fk_Polygon のような形状を生成するためのものではなく、 純粋に幾何計算を行うためのものです。具体的には、以下のような処理が可能です。

fk_Plane において、平面 P の表現は平面上の点 \( \mathbf{B} \) と、 平面上の平行でない2つの単位ベクトル \( \mathbf{U}, \mathbf{V} \) によって、

\[ \mathbf{P}(u, v) = \mathbf{B} + u\mathbf{U} + v\mathbf{V} \]

という式でなされます。 \(u, v\) は実数パラメータです。 各関数の解説では、 \(\mathbf{B}\) を「基点ベクトル」、 \(\mathbf{U}, \mathbf{V}\)を「Uベクトル」「Vベクトル」とします。

なお、平面が関与しない幾何計算は fk_Math クラスに集約しているので、 そちらも参照して下さい。

参照
fk_Math

構築子と解体子

◆ fk_Plane() [1/2]

FK::fk_Plane::fk_Plane ( void  )

コンストラクタ

◆ fk_Plane() [2/2]

FK::fk_Plane::fk_Plane ( const fk_Plane )

コピーコンストラクタ

◆ ~fk_Plane()

virtual FK::fk_Plane::~fk_Plane ( )
virtual

デストラクタ

関数詳解

◆ operator=()

fk_Plane & FK::fk_Plane::operator= ( const fk_Plane )

代入演算子

◆ setPosNormal()

bool FK::fk_Plane::setPosNormal ( const fk_Vector pos,
const fk_Vector norm 
)

平面設定関数1

平面上の1点と、平面の法線ベクトルを指定することにより、平面を設定します。 基点ベクトルは pos となり、UベクトルとVベクトルは自動的に算出されます。 法線ベクトルとして零ベクトルが入力された場合はエラーとなります。

引数
[in]pos基点ベクトル
[in]norm法線ベクトル
戻り値
設定に成功すれば true を、失敗すれば false を返します。

◆ set3Pos()

bool FK::fk_Plane::set3Pos ( const fk_Vector pos1,
const fk_Vector pos2,
const fk_Vector pos3 
)

平面設定関数2

平面上の3点を指定することにより、平面を設定します。 基点ベクトルは pos1 となり、 Uベクトルは (pos2 - pos1)、 Vベクトルは (pos3 - pos1) をそれぞれ正規化したものとなります。 3点が同一直線上にある場合はエラーとなります。

引数
[in]pos1基点ベクトル
[in]pos2平面上の点の位置ベクトル
[in]pos3平面上の点の位置ベクトル
戻り値
設定に成功すれば true を、失敗すれば false を返します。

◆ setPosUVVec()

bool FK::fk_Plane::setPosUVVec ( const fk_Vector pos,
const fk_Vector U,
const fk_Vector V 
)

平面設定関数3

平面上の1点と、平面の法線ベクトルに垂直な平行でない 2つのベクトルを指定することにより、平面を設定します。 引数の U, V がそれぞれ Uベクトル、Vベクトルとして設定されます。 U, V が平行であるか、少なくとも一方が零ベクトルであった場合エラーとなります。

引数
[in]pos基点ベクトル
[in]UUベクトル。単位ベクトルである必要はありません。
[in]VVベクトル。単位ベクトルである必要はありません。
戻り値
設定に成功すれば true を、失敗すれば false を返します。

◆ getBasePos()

fk_Vector FK::fk_Plane::getBasePos ( void  )

基点ベクトル参照関数

基点ベクトルを取得します。

戻り値
基点ベクトル

◆ getUVec()

fk_Vector FK::fk_Plane::getUVec ( void  )

Uベクトル参照関数

Uベクトルを取得します。

戻り値
Uベクトル

◆ getVVec()

fk_Vector FK::fk_Plane::getVVec ( void  )

Vベクトル参照関数

Vベクトルを取得します。

戻り値
Vベクトル

◆ getNormal()

fk_Vector FK::fk_Plane::getNormal ( void  )

法線ベクトル参照関数

法線ベクトルを取得します。

戻り値
法線ベクトル

◆ getDist() [1/2]

double FK::fk_Plane::getDist ( void  )

原点距離参照関数

平面と原点との距離を取得します。

戻り値
距離

◆ getDist() [2/2]

double FK::fk_Plane::getDist ( const fk_Vector pos)

任意点距離参照関数

平面と任意の点との距離を取得します。

引数
[in]pos任意の位置ベクトル
戻り値
距離

◆ getPos()

fk_Vector FK::fk_Plane::getPos ( double  u,
double  v 
)

u,v パラメータによる平面上点参照関数

概要で述べた数式に従って、平面上点の位置ベクトルを算出します。

引数
[in]uuパラメータ
[in]vvパラメータ
戻り値
平面上点の位置ベクトル

◆ isParallel() [1/2]

bool FK::fk_Plane::isParallel ( const fk_Vector V)

ベクトル平行判定関数

任意のベクトルが平行であるかどうかを判定します。 V が零ベクトルであった場合は常に false を返します。

引数
[in]V任意ベクトル
戻り値
平行であれば true を、平行でなければ false を返します。

◆ isParallel() [2/2]

bool FK::fk_Plane::isParallel ( const fk_Plane P)

平面平行判定関数

別の任意の平面と平行であるかどうかを判定します。

引数
[in]P任意平面
戻り値
平行であれば true を、平行でなければ false を返します。

◆ isVertical() [1/2]

bool FK::fk_Plane::isVertical ( const fk_Vector V)

ベクトル垂直判定関数

任意のベクトルが垂直であるかどうかを判定します。 V が零ベクトルであった場合は常に false を返します。

引数
[in]V任意ベクトル
戻り値
垂直であれば true を、垂直でなければ false を返します。

◆ isVertical() [2/2]

bool FK::fk_Plane::isVertical ( const fk_Plane P)

平面垂直判定関数

別の任意の平面と垂直であるかどうかを判定します。

引数
[in]P任意平面
戻り値
垂直であれば true を、垂直でなければ false を返します。

◆ calcCrossPos()

std::tuple< bool, fk_Vector > FK::fk_Plane::calcCrossPos ( const fk_Vector A,
const fk_Vector B 
)

交点位置ベクトル参照関数

2点A, B を通る直線と平面との交点の位置ベクトルを取得します。 A,Bが同じ位置であった場合や、直線と平面が平行である場合、 エラーとなります。

引数
[in]A直線上の1点
[in]B直線上の1点
戻り値
第1要素は、成功すれば true を、失敗すれば false が入ります。 第2要素は交点の位置ベクトルが入ります。 失敗した場合の第2要素の値は未定義です。

◆ calcCrossLineParam()

std::tuple< bool, double > FK::fk_Plane::calcCrossLineParam ( const fk_Vector A,
const fk_Vector B 
)

交点直線パラメータ参照関数

2点A, B を通る直線と平面との交点の、直線上でのパラメータを取得します。 直線式 \(\mathbf{L}(t)\) は、以下のようなものであると想定します。

\[ \mathbf{L}(t) = (1-t)\mathbf{A} + t\mathbf{B} \]

A,Bが同じ位置であった場合や、直線と平面が平行である場合、 エラーとなります。

引数
[in]A直線上の1点
[in]B直線上の1点
戻り値
第1要素は、成功すれば true を、失敗すれば false が入ります。 第2要素は交点の直線上でのパラメータが入ります。 失敗した場合の第2要素の値は未定義です。

◆ calcCrossPlaneParam()

std::tuple< bool, double, double > FK::fk_Plane::calcCrossPlaneParam ( const fk_Vector A,
const fk_Vector B 
)

交点平面パラメータ参照関数

2点A, B を通る直線と平面との交点の、平面上でのパラメータを取得します。 平面の式は概要のものと想定します。 A,Bが同じ位置であった場合や、直線と平面が平行である場合、 エラーとなります。

引数
[in]A直線上の1点
[in]B直線上の1点
戻り値
第1要素は、成功すれば true を、失敗すれば false が入ります。 第2,3要素は、交点の平面上での u, v パラメータがそれぞれ入ります。 失敗した場合の第2,3要素の値は未定義です。

◆ calcCrossAll()

std::tuple< bool, fk_Vector, double, double, double > FK::fk_Plane::calcCrossAll ( const fk_Vector A,
const fk_Vector B 
)

交点情報参照関数

2点A, B を通る直線と平面との交点の、直線上でのパラメータを取得します。 直線式 \(\mathbf{L}(t)\)は、以下のようなものであると想定します。

\[ \mathbf{L}(t) = (1-t)\mathbf{A} + t\mathbf{B} \]

平面の式は概要のものと想定します。 A,Bが同じ位置であった場合や、直線と平面が平行である場合、エラーとなります。

引数
[in]A直線上の1点
[in]B直線上の1点
戻り値
第1要素は、成功すれば true を、失敗すれば false が入ります。 第2要素は、交点位置ベクトルが入ります。 第3要素は、交点の直線上でのパラメータが入ります。 第4,5要素は、交点の平面上でのu,vパラメータがそれぞれ入ります。 失敗した場合の第2〜5要素の値は未定義です。

◆ proj()

fk_Vector FK::fk_Plane::proj ( const fk_Vector P)

点正射影算出関数

任意の位置から平面へ正射影した位置を算出します。

引数
[in]P点の位置ベクトル
戻り値
点の平面への正射影点の位置ベクトル