FineKernelToolKit 4.2.13
|
幾何平面を管理するクラス [詳解]
#include <FK/Plane.h>
公開メンバ関数 | |
fk_Plane (void) | |
コンストラクタ | |
fk_Plane (const fk_Plane &) | |
コピーコンストラクタ | |
virtual | ~fk_Plane () |
デストラクタ | |
fk_Plane & | operator= (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_Vector > | calcCrossPos (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_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::fk_Plane::fk_Plane | ( | void | ) |
コンストラクタ
FK::fk_Plane::fk_Plane | ( | const fk_Plane & | ) |
コピーコンストラクタ
|
virtual |
デストラクタ
平面設定関数1
平面上の1点と、平面の法線ベクトルを指定することにより、平面を設定します。 基点ベクトルは pos となり、UベクトルとVベクトルは自動的に算出されます。 法線ベクトルとして零ベクトルが入力された場合はエラーとなります。
[in] | pos | 基点ベクトル |
[in] | norm | 法線ベクトル |
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 | 平面上の点の位置ベクトル |
平面設定関数3
平面上の1点と、平面の法線ベクトルに垂直な平行でない 2つのベクトルを指定することにより、平面を設定します。 引数の U, V がそれぞれ Uベクトル、Vベクトルとして設定されます。 U, V が平行であるか、少なくとも一方が零ベクトルであった場合エラーとなります。
[in] | pos | 基点ベクトル |
[in] | U | Uベクトル。単位ベクトルである必要はありません。 |
[in] | V | Vベクトル。単位ベクトルである必要はありません。 |
fk_Vector FK::fk_Plane::getBasePos | ( | void | ) |
基点ベクトル参照関数
基点ベクトルを取得します。
fk_Vector FK::fk_Plane::getUVec | ( | void | ) |
Uベクトル参照関数
Uベクトルを取得します。
fk_Vector FK::fk_Plane::getVVec | ( | void | ) |
Vベクトル参照関数
Vベクトルを取得します。
fk_Vector FK::fk_Plane::getNormal | ( | void | ) |
法線ベクトル参照関数
法線ベクトルを取得します。
double FK::fk_Plane::getDist | ( | void | ) |
原点距離参照関数
平面と原点との距離を取得します。
double FK::fk_Plane::getDist | ( | const fk_Vector & | pos | ) |
任意点距離参照関数
平面と任意の点との距離を取得します。
[in] | pos | 任意の位置ベクトル |
fk_Vector FK::fk_Plane::getPos | ( | double | u, |
double | v | ||
) |
u,v パラメータによる平面上点参照関数
概要で述べた数式に従って、平面上点の位置ベクトルを算出します。
[in] | u | uパラメータ |
[in] | v | vパラメータ |
bool FK::fk_Plane::isParallel | ( | const fk_Vector & | V | ) |
ベクトル平行判定関数
任意のベクトルが平行であるかどうかを判定します。 V が零ベクトルであった場合は常に false を返します。
[in] | V | 任意ベクトル |
bool FK::fk_Plane::isParallel | ( | const fk_Plane & | P | ) |
平面平行判定関数
別の任意の平面と平行であるかどうかを判定します。
[in] | P | 任意平面 |
bool FK::fk_Plane::isVertical | ( | const fk_Vector & | V | ) |
ベクトル垂直判定関数
任意のベクトルが垂直であるかどうかを判定します。 V が零ベクトルであった場合は常に false を返します。
[in] | V | 任意ベクトル |
bool FK::fk_Plane::isVertical | ( | const fk_Plane & | P | ) |
平面垂直判定関数
別の任意の平面と垂直であるかどうかを判定します。
[in] | P | 任意平面 |
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点 |
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点 |
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点 |
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点 |