# クラス fk_Plane

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

fk_Planeに対する継承グラフ
[凡例]
fk_Planeのコラボレーション図
[凡例]

すべてのメンバ一覧

## Public メソッド
| fk_Plane (void)
| コンストラクタ
| ~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)
bool | calcCrossPos (const fk_Vector &A, const fk_Vector &B, fk_Vector *pos)
| 交点位置ベクトル参照関数
bool | calcCrossLineParam (const fk_Vector &A, const fk_Vector &B, double *t)
| 交点直線パラメータ参照関数
bool | calcCrossPlaneParam (const fk_Vector &A, const fk_Vector &B, double *u, double *v)
| 交点平面パラメータ参照関数
bool | calcCrossAll (const fk_Vector &A, const fk_Vector &B, fk_Vector *pos, double *t, double *u, double *v)
| 交点情報参照関数

## 説明

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

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

- 平面と原点、あるいは平面と任意点の距離算出
- 平面と直線の交点算出
- 平面同士、あるいは平面とベクトルとの平行、垂直判定

fk_Plane において、平面 P の表現は平面上の点 と、 平面上の平行でない2つの単位ベクトル によって、

という式でなされます。 は実数パラメータです。 各関数の解説では、 を「基点ベクトル」、 を「Uベクトル」「Vベクトル」とします。

## コンストラクタとデストラクタ

fk_Plane::fk_Plane | ( | void |  | ) |

コンストラクタ

fk_Plane::~fk_Plane | ( |  | ) |

デストラクタ

## 関数

bool fk_Plane::setPosNormal | ( | const fk_Vector & | pos,
|  | const fk_Vector & | norm |
| ) |  |  |

平面設定関数1

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

引数:

  `[in]` | pos | 基点ベクトル
  `[in]` | norm | 法線ベクトル

戻り値:
  設定に成功すれば true を、失敗すれば false を返します。

bool 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 を返します。

bool 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]` | U | Uベクトル。単位ベクトルである必要はありません。
  `[in]` | V | Vベクトル。単位ベクトルである必要はありません。

戻り値:
  設定に成功すれば true を、失敗すれば false を返します。

fk_Vector fk_Plane::getBasePos | ( | void |  | ) |

基点ベクトル参照関数

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

戻り値:
  基点ベクトル

fk_Vector fk_Plane::getUVec | ( | void |  | ) |

Uベクトル参照関数.

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

戻り値:
  Uベクトル

fk_Vector fk_Plane::getVVec | ( | void |  | ) |

Vベクトル参照関数.

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

戻り値:
  Vベクトル

fk_Vector fk_Plane::getNormal | ( | void |  | ) |

法線ベクトル参照関数

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

戻り値:
  法線ベクトル

double fk_Plane::getDist | ( | void |  | ) |

原点距離参照関数

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

戻り値:
  距離

double fk_Plane::getDist | ( | const fk_Vector & | pos | ) |

任意点距離参照関数

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

引数:

  `[in]` | pos | 任意の位置ベクトル

戻り値:
  距離

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

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

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

引数:

  `[in]` | u | uパラメータ
  `[in]` | v | vパラメータ

戻り値:
  平面上点の位置ベクトル

bool fk_Plane::isParallel | ( | const fk_Vector & | V | ) |

ベクトル平行判定関数

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

引数:

  `[in]` | V | 任意ベクトル

戻り値:
  平行であれば true を、平行でなければ false を返します。

bool fk_Plane::isParallel | ( | const fk_Plane & | P | ) |

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

引数:

  `[in]` | P | 任意平面

戻り値:
  平行であれば true を、平行でなければ false を返します。

bool fk_Plane::isVertical | ( | const fk_Vector & | V | ) |

ベクトル垂直判定関数

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

引数:

  `[in]` | V | 任意ベクトル

戻り値:
  垂直であれば true を、垂直でなければ false を返します。

bool fk_Plane::isVertical | ( | const fk_Plane & | P | ) |

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

引数:

  `[in]` | P | 任意平面

戻り値:
  垂直であれば true を、垂直でなければ false を返します。

bool fk_Plane::calcCrossPos | ( | const fk_Vector & | A,
|  | const fk_Vector & | B,
|  | fk_Vector * | pos |
| ) |  |  |

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

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

引数:

  `[in]` | A | 直線上の1点
  `[in]` | B | 直線上の1点
  `[out]` | pos | 交点位置ベクトルが代入されます。

戻り値:
  成功すれば true を、失敗すれば false を返します。

bool fk_Plane::calcCrossLineParam | ( | const fk_Vector & | A,
|  | const fk_Vector & | B,
|  | double * | t |
| ) |  |  |

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

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

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

引数:

  `[in]` | A | 直線上の1点
  `[in]` | B | 直線上の1点
  `[out]` | t | 交点の直線上でのパラメータが代入されます。

戻り値:
  成功すれば true を、失敗すれば false を返します。

bool fk_Plane::calcCrossPlaneParam | ( | const fk_Vector & | A,
|  | const fk_Vector & | B,
|  | double * | u,
|  | double * | v |
| ) |  |  |

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

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

引数:

  `[in]` | A | 直線上の1点
  `[in]` | B | 直線上の1点
  `[out]` | u | 交点の平面上でのuパラメータが代入されます。
  `[out]` | v | 交点の平面上でのvパラメータが代入されます。

戻り値:
  成功すれば true を、失敗すれば false を返します。

bool fk_Plane::calcCrossAll | ( | const fk_Vector & | A,
|  | const fk_Vector & | B,
|  | fk_Vector * | pos,
|  | double * | t,
|  | double * | u,
|  | double * | v |
| ) |  |  |

交点情報参照関数

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

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

引数:

  `[in]` | A | 直線上の1点
  `[in]` | B | 直線上の1点
  `[out]` | pos | 交点位置ベクトルが代入されます。
  `[out]` | t | 交点の直線上でのパラメータが代入されます。
  `[out]` | u | 交点の平面上でのuパラメータが代入されます。
  `[out]` | v | 交点の平面上でのvパラメータが代入されます。

戻り値:
  成功すれば true を、失敗すれば false を返します。