数学処理関数集合クラス [詳細]
Static Public メソッド | |
static double | clamp (double a, double min, double max) |
数値範囲制限関数 [詳細] | |
static bool | isOnLine (const fk_Vector &A, const fk_Vector &B, const fk_Vector &P) |
直線上判定関数 [詳細] | |
static bool | isOnLineSegment (const fk_Vector &A, const fk_Vector &B, const fk_Vector &P, bool openFlg=true) |
線分上判定関数 [詳細] | |
static bool | isCrossLine (const fk_Vector &A, const fk_Vector &B, const fk_Vector &C, const fk_Vector &D) |
直線交差判定関数 [詳細] | |
static bool | isCrossLineSegment (const fk_Vector &A, const fk_Vector &B, const fk_Vector &C, const fk_Vector &D, bool openFlg=true) |
線分交差判定関数 [詳細] | |
static double | calcClosestPtSegToSeg (const fk_Vector &A, const fk_Vector &B, const fk_Vector &C, const fk_Vector &D, double *s, double *t, fk_Vector *P, fk_Vector *Q) |
線分対線分・最近接点算出関数 [詳細] | |
static void | calcClosestPtPtToSeg (const fk_Vector &C, const fk_Vector &A, const fk_Vector &B, double *t, fk_Vector *P) |
点対線分・最近接点算出関数 [詳細] | |
static bool | calcCrossLineAndTri (const fk_Vector &P, const fk_Vector &Q, const fk_Vector &A, const fk_Vector &B, const fk_Vector &C, fk_Vector *R=NULL) |
三角形対線分交差判定関数 [詳細] | |
static double | calcCosine (fk_Vector A, fk_Vector B) |
余弦値算出関数 [詳細] | |
static fk_Vector | divideVec (const fk_Vector &V, const fk_Vector &A, const fk_Vector &B, const fk_Vector &C) |
ベクトル分離係数算出関数 [詳細] | |
static fk_Quaternion & | quatInterLinear (const fk_Quaternion &q1, const fk_Quaternion &q2, double t) |
四元数単純線形補間関数 [詳細] | |
static fk_Quaternion & | quatInterSphere (const fk_Quaternion &q1, const fk_Quaternion &q2, double t) |
四元数球面線形補間関数 [詳細] | |
static fk_Complex & | cexp (const fk_Complex &z) |
複素指数関数 [詳細] | |
static fk_Complex & | csin (const fk_Complex &z) |
複素正弦関数 [詳細] | |
static fk_Complex & | ccos (const fk_Complex &z) |
複素余弦関数 [詳細] | |
数学処理関数集合クラス
このクラスは、様々な数学的処理関数を static 関数群としてまとめたものです。
全ての関数は static 宣言されているため、 本クラスの関数を用いる際に fk_Math 型のインスタンスを生成する必要はありません。 例えば、以下のようにしてコードを記述します。
fk_Vector vec1, vec2; double theta; theta = fk_Math::calcCosine(vec1, vec2);
|
static |
数値範囲制限関数
数値を、指定した範囲内に収まるように補正します。
[in] | a | 対象とする値。 |
[in] | min | 収めたい範囲の最小値。 |
[in] | max | 収めたい範囲の最大値。 |
|
static |
直線上判定関数
頂点 が、
を通る直線上にあるかどうかを判定します。 厳密には、直線と
の距離が FK_EPS 内である場合は、 直線上にあると解釈します。
[in] | A | 直線上の一点。B とは異なる位置でなければなりません。 |
[in] | B | 直線上の一点。A とは異なる位置でなければなりません。 |
[in] | P | 判定対象位置ベクトル |
|
static |
線分上判定関数
頂点 が、
を端点とする線分上にあるかどうかを判定します。 厳密には、線分と
の距離が FK_EPS 内である場合は、 線分上にあると解釈します。
[in] | A | 線分の始点。B とは異なる位置でなければなりません。 |
[in] | B | 線分の終点。A とは異なる位置でなければなりません。 |
[in] | P | 判定対象位置ベクトル |
[in] | openFlg | true の場合は、線分を閉区間として解釈します。 つまり、両端点そのものも線分の一部とみまします。 false の場合は線分を開区間として解釈します。 この場合は、両端点は線分には含まれないので、 もし P が A や B と一致していた場合は false を返すことになります。 |
|
static |
直線交差判定関数
点A,B を通る直線と、点C,D を通る直線が、空間上で交差するかどうかを判定します。 厳密には、両直線の距離が FK_EPS 内である場合は、交差すると解釈します。
もし直線 AB と直線 CD が平行であった場合、 両直線が一致していれば true を、一致していない場合は false を返します。
[in] | A | 1本目の直線上の一点。B とは異なる位置でなければなりません。 |
[in] | B | 1本目の直線上の一点。A とは異なる位置でなければなりません。 |
[in] | C | 2本目の直線上の一点。D とは異なる位置でなければなりません。 |
[in] | D | 2本目の直線上の一点。C とは異なる位置でなければなりません。 |
|
static |
線分交差判定関数
点A,Bを端点とする線分と、点C,Dを端点とする線分が、 空間上で交差するかどうかを判定します。 厳密には、両線分の距離が FK_EPS 内である場合は、交差すると解釈します。
もし線分 AB と線分 CD が平行であった場合、 共有部分が存在すれば true を、なければ false を返します。
[in] | A | 1本目の線分の始点。B とは異なる位置でなければなりません。 |
[in] | B | 1本目の線分の終点。A とは異なる位置でなければなりません。 |
[in] | C | 2本目の線分の始点。D とは異なる位置でなければなりません。 |
[in] | D | 2本目の線分の終点。C とは異なる位置でなければなりません。 |
[in] | openFlg | true の場合は、線分を閉区間として解釈します。 つまり、両端点そのものも線分の一部とみまします。 false の場合は線分を開区間として解釈します。 この場合は、両端点は線分には含まれないので、 端点と線分が交差しているような場合は false を返すことになります。 |
|
static |
線分対線分・最近接点算出関数
点A,Bを端点とする線分と、点C,Dを端点とする線分における最近接点を算出します。 線分の交差のみを判定するのであればisCrossLineSegment()で十分ですが、 この関数は線分間の距離と、それぞれの線分における最近接点を指すパラメータを 同時に算出することができます。
[in] | A | 1本目の線分の始点。B とは異なる位置でなければなりません。 |
[in] | B | 1本目の線分の終点。A とは異なる位置でなければなりません。 |
[in] | C | 2本目の線分の始点。D とは異なる位置でなければなりません。 |
[in] | D | 2本目の線分の終点。C とは異なる位置でなければなりません。 |
[out] | s | 1本目の線分上の最近接点を示すパラメータが代入されます。 |
[out] | t | 2本目の線分上の最近接点を示すパラメータが代入されます。 |
[out] | P | 1本目の線分上の最近接点座標が代入されます。 |
[out] | Q | 2本目の線分上の最近接点座標が代入されます。 |
|
static |
点対線分・最近接点算出関数
点Cに対する、点A,Bを端点とする線分上の最近接点を算出します。 最近接点を指すパラメータと座標値を同時に返します。
[in] | C | 点の座標。 |
[in] | A | 線分の始点。B とは異なる位置でなければなりません。 |
[in] | B | 線分の終点。A とは異なる位置でなければなりません。 |
[out] | t | 線分上の最近接点を示すパラメータが代入されます。 |
[out] | P | 線分上の最近接点座標が代入されます。 |
|
static |
三角形対線分交差判定関数
線分 PQ と、三角形 ABC が交差しているかどうかを判定します。 この関数では、三角形の境界と線分が接している場合や、 線分の端点が三角形面上にあるような場合でも、交差していると判断します。 以下の条件を満たす場合は、常に false を返します。
[in] | P | 有向線分の始点。 |
[in] | Q | 有向線分の終点。 |
[in] | A | 三角形の頂点。 |
[in] | B | 三角形の頂点。 |
[in] | C | 三角形の頂点。 |
[out] | R | 交差の有無にかかわらず、 PQを通る直線とABCを通る平面の交点のパラメータが代入されます。 以下の式は、ABC平面上の点 T をパラメータ表現したものです。
![]() ![]() |
余弦値算出関数
方向ベクトル のなす角を
としたとき、
を返します。
は正規化してある必要はありません。 なお、
のいずれかが 零ベクトルである場合は 0 を返します。
[in] | A | 方向ベクトル |
[in] | B | 方向ベクトル |
|
static |
ベクトル分離係数算出関数
任意のベクトル と、 それぞれが一次独立であるベクトル
について、
を満たすような実数列 を求めます。
が一次独立でなかった場合、
はすべて 0 として出力します。
[in] | V | 分離対象ベクトル |
[in] | A | 分離要素ベクトル |
[in] | B | 分離要素ベクトル |
[in] | C | 分離要素ベクトル |
|
static |
四元数単純線形補間関数
2つの四元数 に対し、 パラメータ
で単純線形補間した四元数を返します。 補間式は以下のとおりです。
単純線形補間は、 quatInterSphere() による球面線形補間と比べて高速です。 しかし、回転速度が一定でない、 正反対に近い姿勢の補間で誤差が生じやすいといった問題が生じることがあります。 速度面がそれほど切実でないのであれば、 quatInterSphere() による球面線形補間を推奨します。
[in] | q1 | 補間の始点となる四元数 |
[in] | q2 | 補間の終点となる四元数 |
[in] | t | 補間パラメータ。0 で始点、1 で終点となります。 通常の補間域は ![]() |
|
static |
四元数球面線形補間関数
2つの四元数 に対し、 パラメータ
で球面線形補間した四元数を返します。 補間式は以下のとおりです。
球面線形補間は、 quatInterLinear() による単純線形補間と比べて計算速度はやや劣りますが、 回転速度が一定であることや、 正反対に近い姿勢の補間で誤差が生じにくいといった長所があります。 速度面がそれほど切実でないのであれば、 quatInterLinear() による単純線形補間よりも 本関数による球面線形補間を推奨します。
[in] | q1 | 補間の始点となる四元数 |
[in] | q2 | 補間の終点となる四元数 |
[in] | t | 補間パラメータ。0 で始点、1 で終点となります。 通常の補間域は ![]() |
|
static |
複素指数関数
|
static |
複素正弦関数
|
static |
複素余弦関数