StdAfx.cpp | |
Functions | |
+ | Coord同士の足し算(AddCoord()) |
- | Coord同士の引き算(SubCoord()) |
/ | Coord同士の割り算(DivCoord()) |
/ | Coordとdoubleとの割り算(オーバーロード) |
& | Coord同士の内積(CalcInnerProduct()) |
&& | Coord同士の外積(CalcOuterProduct()) |
InitCoord | 座標値の初期化 |
InitCoord | 座標値配列の初期化(オーバーロード) |
InitCoord | 座標値の初期化(オーバーロード) |
AddCoord | 座標値同士の足し算 |
AddCoord | 座標値同士の足し算(オーバーロード) |
AddCoord | 座標値同士の足し算(オーバーロード) |
AddCoord2D | 座標値同士の足し算 (2D Ver.) |
AddCoord2D | 座標値同士の足し算(オーバーロード) (2D Ver.) |
AddCoord | 座標値同士の足し算(オーバーロード) (2D Ver.) |
DivCoord | 座標値同士の割り算 |
DivCoord | 座標値同士の割り算(オーバーロード) |
DivCoord | 座標値同士の割り算(オーバーロード) |
DivCoord2D | 座標値同士の割り算 (2D Ver.) |
DivCoord2D | 座標値同士の割り算(オーバーロード) (2D Ver.) |
DivCoord2D | 座標値同士の割り算(オーバーロード) (2D Ver.) |
SubCoord | 座標値同士の引き算 |
SubCoord | 座標値同士の引き算(オーバーロード) |
SubCoord | 座標値同士の引き算(オーバーロード) |
SubCoord2D | 座標値同士の引き算 (2D Ver.) |
SubCoord2D | 座標値同士の引き算(オーバーロード) (2D Ver.) |
SubCoord2D | 座標値同士の引き算(オーバーロード) (2D Ver.) |
MulCoord | 座標値同士の掛け算 |
MulCoord | 座標値同士の掛け算(オーバーロード) |
MulCoord | 座標値同士の掛け算(オーバーロード) |
MulCoord2D | 座標値同士の掛け算 (2D Ver.) |
MulCoord2D | 座標値同士の掛け算(オーバーロード) (2D Ver.) |
MulCoord2D | 座標値同士の掛け算(オーバーロード) (2D Ver.) |
DiffCoord | 座標値がAPPROX_ZEROの精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す |
DiffCoord | 座標値が指定の精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す(オーバーロード) |
DiffCoord2D | 2D平面での座標値がAPPROX_ZEROの精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す |
DiffCoord2D | 2D平面での座標値が指定の精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す(オーバーロード) |
AbsCoord | 座標値の絶対値を返す |
AbsCoord2D | 座標値の絶対値を返す(2D Ver.) |
SetCoord | 座標値を代入する |
SetCoord | 座標値を代入する(オーバーロード) |
SetCoord2D | 座標値を代入する(2D Ver.) |
SetCoord2D | 座標値を代入する(オーバーロード)(2D Ver.) |
CopyCoord | 座標値群のコピー(b<--a) |
CopyCoord2D | 座標値群のコピー(b<--a)(2D Ver.) |
ZoroCoord | 座標値aが(0,0,0)のときKOD_FALSEを返す |
ZoroCoord2D | 座標値aが(0,0)のときKOD_FALSEを返す |
NewVector | double型1次元配列のメモリー確保 |
NewVector | double型2次元配列のメモリー確保 |
FreeVector | double型1次元配列のメモリー解放 |
FreeMatrix | double型2次元配列のメモリー解放 |
NewCoord1 | 1次元Coord型配列のメモリー確保 |
NewCoord2 | 2次元Coord型配列のメモリー確保 |
NewCoord3 | 3次元Coord型配列のメモリー確保 |
FreeCoord1 | 1次元Coord型配列のメモリー解放 |
FreeCoord2 | 2次元Coord型配列のメモリー解放 |
FreeCoord3 | 3次元Coord型配列のメモリー解放 |
NormalizeVec | ベクトルを正規化する |
NormalizeVec | ベクトルを正規化する(オーバーロード) |
CalcEuclid | ユークリッド距離を算出 |
CalcEuclid2D | 2次元ユークリッド距離を算出 |
CalcDistance | 2点間のユークリッド距離を求める |
CalcDistance2D | 2次元座標上での2点間のユークリッド距離を算出 |
CalcInnerProduct | 内積を求める |
CalcInnerProduct | 内積を求める(オーバーロード) |
CalcOuterProduct | 外積を求める |
CalcOuterProduct2D | 外積を求める (2D Ver.) |
CalcVecAngle | 2つのベクトルのなす角を求める(返値はrad) |
CalcInterDivPt | 2点p(t=0),q(t=1)をt(0~1)で内分したときの点の座標をもとめる |
CalcOrthoProjection | 任意の点を任意の平面へ正射影する |
CalcDistPtToPlane | 任意の点から任意の平面までの距離を求める |
CalcScalarTriProduct | スカラー三重積を求める |
CalcAnglePlaneVec | 平面と直線とのなす角を求める |
DrawPoint | 点を描画(OpenGL) |
DrawPoints | 点群を描画(OpenGL) |
DrawVector | ベクトルを描画(OpenGL) |
DrawLine | 2点間に線分を描画(OpenGL) |
DrawSolidCone | 四角錐を描画する |
DegToRad | 角度をdegreeからradianへ変換 |
RadToDeg | 角度をradianからdegreeへ変換 |
Arc_CP | 円の中心点(vec[0])から円上に接する任意の2本の接線が交わる点へのベクトル(中心角0<θ<π) |
CalcVecAngle2D | 2つのベクトルのなす角を求める(2D平面) |
CalcRotVec2D | 任意のベクトルを回転させたベクトルを求める(2D平面) |
CalcRotVec | 任意のベクトルを原点を通る任意軸周りに回転させたベクトルを求める |
CalcNormalLine | 任意の点Pから任意の直線(点Aを通り単位ベクトルuの方向を持つ)へ下ろした点を求める |
BubbleSort | int型配列のバブルソート(基本交換法) |
BubbleSort | double型配列のバブルソート(基本交換法)(オーバーロード) |
QCmp | C言語標準関数qsort(double型、降順)で用いる比較関数 |
Reverse | Coord配列の反転 |
Reverse | double型配列の反転操作(オーバーロード) |
InitVector | 1次元配列の初期化 |
InitMatrix | 2次元配列の初期化 |
CopyVector | ベクトルのコピー(aベクトルをbベクトルへ代入) |
CalcCubicEquation | 3次方程式を解く |
CalcQuadraticEquation | 2次方程式を解く |
CalcLinearEquation | 1次方程式を解く |
sgn | 符号判定 |
CheckZero | 値がAPPROX_ZEROの範囲で0であるかチェック |
CheckRange | 指定した値が指定した範囲内であるかをチェック |
CheckMag | 2つの値の大小比較 |
IsPointInPolygon | 注目点の多角形内外判別(x-y平面内) |
CalcNormVecFrom3Pts | 空間上の3点からなる平面の法線ベクトルを求める |
CalcPolygonArea | 空間上の多角形の面積を得る |
ClacPolygonArea2D | 2D平面上の多角形の符号付き面積を得る(CCW:正,CW:負) |
DiscriminateCW2D | 2D平面上の多角形が時計回りか反時計回りかを判別する |
AddMxMx | 行列同士の足し算 |
MulMxMx | 行列同士の掛け算 |
MulMxVec | 行列とベクトルの掛け算 |
MulMxVec | 行列と座標値ベクトルの掛け算(オーバーロード) |
MulMxCoord | Coordで表現される3x3行列とCoordベクトルとの掛け算 |
MulMxCoord | Matrixで表現される3x3行列とCoordベクトルとの掛け算(オーバーロード) |
TranMx | 転置行列を得る |
TranMx | 2次元Coord配列によって構成される行列の転置行列を得る(オーバーロード) |
TranMx | 1次元Coord配列によって構成される行列の転置行列を得る(オーバーロード) |
MulFrameCoord | 同次変換行列(R,T)と座標値(I(3Dベクトル))との掛け算 |
MulFrameCoord | 同次変換行列(f)と座標値(I(3Dベクトル))との掛け算(オーバーロード) |
InvFrame | 同次変換行列Fの逆行列を得る |
MulFrame | 同次変換行列の掛け算 |
RotToZYZEuler | 回転行列からZYZオイラー角を算出( tmp.x がα角(O), tmp.y がβ角(A), tmp.z がγ角(T) にそれぞれ対応 ) |
InitFrame | FRAMEの初期化 |
Gauss | 連立1次方程式の解を求める |
Gauss | 連立1次方程式の解を求める(オーバーロード) |
LU_Solver | LU分解の結果から連立1次方程式を解く |
LU_Solver | LU分解の結果から連立1次方程式を解く(オーバーロード) |
MatInv | 逆行列を求める |
LU | LU分解ルーチン |
MatInv3 | 3x3の逆行列を求める |
MatInv2 | 2x2の逆行列を求める |
nCr | 2項係数(nCrの組合せ総数)を求める |
Factorial | 自然数nの階乗を求める(桁数に注意.int型の場合,10!でオーバーフロー) |
Round | 四捨五入する |
SetColorStat | カラーステータス構造体DispStatに値を代入する |
CatCoord | ある座標値配列の後ろに新たな座標値配列を繋げる |
CheckTheSamePoints | 同一点を除去する |
CheckTheSamePoints | 同一値を除去する(オーバーロード) |
CheckTheSamePoints2D | 2次元平面内の同一点を除去する (座標値はCoordのxとyで与える) |
CoordToArray | Coordをdouble配列に代入 |
CoordToArray2D | Coordをdouble配列に代入(2D Ver.) |
int CheckRange( double low, double up, double val, int flag )
指定した値が指定した範囲内であるかをチェック
low | 下限 |
up | 上限 |
val | 調べたい値 |
flag | チェックタイプを以下より選択 |
flag = 0:(low <= val <= up) --> (low-ap < val < up+ap), 1:(low < val < up) --> (low+ap < val < up-ap), 2:(val <= up) --> (val < up+ap), 3:(val < up) --> (val < up-ap), 4:(low <= val) --> (low-ap < val), 5:(low < val) --> (low+ap < val) 注意 valがAPPROX_ZERO(ap)内でlowまたはupと一致する場合は、範囲内にあるものとする
KOD_TRUE:範囲内 KOD_FALSE:範囲外 KOD_ERR:flagに指定した値が0,1以外
void MulMxVec( Matrix A, int A_row, int A_col, Coord * B, Coord * C )
行列と座標値ベクトルの掛け算(オーバーロード)
|A[0][0] A[0][1] . . A[0][col-1] || B[0] | |A[1][0] A[1][1] . . A[1][col-1] || B[1] | | . . . . . || . | | . . . . . || . | |A[row-1][0] . . . A[row-1][col-1]||B[row-1]|
A,B,C | {C} = [A]{B} |
A_row | 行数 |
A_col | 列数 |
B_row | ベクトルの次元数 |
void TranMx( Coord A[], Coord B[] )
1次元Coord配列によって構成される行列の転置行列を得る(オーバーロード)
|A[0].x A[1].x A[2].x| |B[0].x B[1].x B[2].x| |A[0].x A[0].y A[0].z| Coord A[3] = |A[0].y A[1].y A[2].y| , Coord B[3] = |B[0].y B[1].y B[2].y| = |A[1].x A[1].y A[1].z| = A^T |A[0].z A[1].z A[2].z| |B[0].z B[1].z B[2].z| |A[2].x A[2].y A[2].z|
A[3] | 元の行列 |
B[3] | 転置行列を格納 |
Coord同士の足し算(AddCoord())
Coord Coord::operator +( Coord a )
Coord同士の引き算(SubCoord())
Coord Coord::operator -( Coord a )
Coord同士の割り算(DivCoord())
Coord Coord::operator /( Coord a )
Coord同士の内積(CalcInnerProduct())
double Coord::operator &( Coord a )
座標値の初期化
void InitCoord( Coord * a )
座標値同士の足し算
Coord AddCoord( Coord a, Coord b )
座標値同士の足し算 (2D Ver.)
Coord AddCoord2D( Coord a, Coord b )
座標値同士の割り算
Coord DivCoord( Coord a, Coord b )
座標値同士の割り算 (2D Ver.)
Coord DivCoord2D( Coord a, Coord b )
座標値同士の引き算
Coord SubCoord( Coord a, Coord b )
座標値同士の引き算 (2D Ver.)
Coord SubCoord2D( Coord a, Coord b )
座標値同士の掛け算
Coord MulCoord( Coord a, Coord b )
座標値同士の掛け算 (2D Ver.)
Coord MulCoord2D( Coord a, Coord b )
座標値がAPPROX_ZEROの精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す
int DiffCoord( Coord a, Coord b )
2D平面での座標値がAPPROX_ZEROの精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す
int DiffCoord2D( Coord a, Coord b )
座標値の絶対値を返す
Coord AbsCoord( Coord a )
座標値の絶対値を返す(2D Ver.)
Coord AbsCoord2D( Coord a )
座標値を代入する
Coord SetCoord( Coord a )
座標値を代入する(2D Ver.)
Coord SetCoord2D( Coord a )
座標値群のコピー(b<--a)
void CopyCoord( Coord * a, int n, Coord * b )
座標値群のコピー(b<--a)(2D Ver.)
void CopyCoord2D( Coord * a, int n, Coord * b )
座標値aが(0,0,0)のときKOD_FALSEを返す
int ZoroCoord( Coord a )
座標値aが(0,0)のときKOD_FALSEを返す
int ZoroCoord2D( Coord a )
double型1次元配列のメモリー確保
Vector NewVector( int len )
double型1次元配列のメモリー解放
void FreeVector( Vector a )
double型2次元配列のメモリー解放
void FreeMatrix( Matrix a, int col )
1次元Coord型配列のメモリー確保
Coord *NewCoord1( int len )
2次元Coord型配列のメモリー確保
Coord **NewCoord2( int row, int col )
3次元Coord型配列のメモリー確保
Coord ***NewCoord3( int x, int y, int z )
1次元Coord型配列のメモリー解放
void FreeCoord1( Coord * a )
2次元Coord型配列のメモリー解放
void FreeCoord2( Coord ** a, int col )
3次元Coord型配列のメモリー解放
void FreeCoord3( Coord *** a, int x, int y )
ベクトルを正規化する
Coord NormalizeVec( Coord a )
ユークリッド距離を算出
double CalcEuclid( Coord a )
2次元ユークリッド距離を算出
double CalcEuclid2D( double a, double b )
2点間のユークリッド距離を求める
double CalcDistance( Coord a, Coord b )
2次元座標上での2点間のユークリッド距離を算出
double CalcDistance2D( Coord a, Coord b )
内積を求める
double CalcInnerProduct( Coord a, Coord b )
外積を求める
Coord CalcOuterProduct( Coord a, Coord b )
外積を求める (2D Ver.)
double CalcOuterProduct2D( Coord a, Coord b )
2つのベクトルのなす角を求める(返値はrad)
double CalcVecAngle( Coord a, Coord b )
2点p(t=0),q(t=1)をt(0~1)で内分したときの点の座標をもとめる
Coord CalcInterDivPt( Coord p, Coord q, double t )
任意の点を任意の平面へ正射影する
Coord CalcOrthoProjection( Coord p, Coord n, Coord q )
任意の点から任意の平面までの距離を求める
double CalcDistPtToPlane( Coord Pt, Coord P0, Coord N )
スカラー三重積を求める
double CalcScalarTriProduct( Coord a, Coord b, Coord c )
平面と直線とのなす角を求める
double CalcAnglePlaneVec( Coord a, Coord n )
点を描画(OpenGL)
void DrawPoint( Coord p, double scale, double width, double color[3] )
点群を描画(OpenGL)
void DrawPoints( Coord * p, int n, double scale, double width, double color[3] )
ベクトルを描画(OpenGL)
void DrawVector( Coord s, Coord e, double vec_len, double width, double color[3] )
2点間に線分を描画(OpenGL)
void DrawLine( Coord s, Coord e, double width, double color[3] )
四角錐を描画する
void DrawSolidCone( double r, double h )
角度をdegreeからradianへ変換
double DegToRad( double degree )
角度をradianからdegreeへ変換
double RadToDeg( double radian )
円の中心点(vec[0])から円上に接する任意の2本の接線が交わる点へのベクトル(中心角0<θ<π)
Coord Arc_CP( Coord a, Coord b, double cos )
2つのベクトルのなす角を求める(2D平面)
double CalcVecAngle2D( Coord a, Coord b )
任意のベクトルを回転させたベクトルを求める(2D平面)
Coord CalcRotVec2D( Coord a, double angle )
任意のベクトルを原点を通る任意軸周りに回転させたベクトルを求める
Coord CalcRotVec( Coord a, Coord e, double ang )
任意の点Pから任意の直線(点Aを通り単位ベクトルuの方向を持つ)へ下ろした点を求める
Coord CalcNormalLine( Coord P, Coord A, Coord u )
int型配列のバブルソート(基本交換法)
void BubbleSort( int array[], int array_size )
C言語標準関数qsort(double型、降順)で用いる比較関数
int QCmp( const void*a, const void*b )
Coord配列の反転
void Reverse( Coord p[], int n )
1次元配列の初期化
void InitVector( Vector vec, int size )
2次元配列の初期化
void InitMatrix( Matrix mat, int size_x, int size_y )
ベクトルのコピー(aベクトルをbベクトルへ代入)
void CopyVector( Vector a, int n, Vector b )
3次方程式を解く
int CalcCubicEquation( double * p, double * ans )
2次方程式を解く
int CalcQuadraticEquation( double * a, double * ans )
1次方程式を解く
int CalcLinearEquation( double * a, double * ans )
符号判定
double sgn( double x )
値がAPPROX_ZEROの範囲で0であるかチェック
int CheckZero( double val, int flag )
指定した値が指定した範囲内であるかをチェック
int CheckRange( double low, double up, double val, int flag )
2つの値の大小比較
int CheckMag( double val1, double val2, int flag )
注目点の多角形内外判別(x-y平面内)
int IsPointInPolygon( Coord TargetPoint, Coord * BorderPoint, int CountPoint )
空間上の3点からなる平面の法線ベクトルを求める
Coord CalcNormVecFrom3Pts( Coord p1, Coord p2, Coord p3 )
空間上の多角形の面積を得る
double CalcPolygonArea( Coord p[], int Vnum )
2D平面上の多角形の符号付き面積を得る(CCW:正,CW:負)
double ClacPolygonArea2D( Coord p[], int Vnum )
2D平面上の多角形が時計回りか反時計回りかを判別する
int DiscriminateCW2D( Coord p[], int Vnum )
行列同士の足し算
void AddMxMx( Matrix A, Matrix B, Matrix C, int row, int col )
行列同士の掛け算
void MulMxMx( Matrix A, int A_row, int A_col, Matrix B, int B_row, int B_col, Matrix C )
行列とベクトルの掛け算
void MulMxVec( Matrix A, int A_row, int A_col, Vector B, int B_row, Vector C )
Coordで表現される3x3行列とCoordベクトルとの掛け算
Coord MulMxCoord( Coord A[], Coord d )
転置行列を得る
void TranMx( Matrix A, int m, int n, Matrix B )
同次変換行列(R,T)と座標値(I(3Dベクトル))との掛け算
Coord MulFrameCoord( double R[][3], double T[], Coord I )
同次変換行列Fの逆行列を得る
FRAME InvFrame( FRAME F )
同次変換行列の掛け算
FRAME MulFrame( FRAME a, FRAME b )
回転行列からZYZオイラー角を算出( tmp.x がα角(O), tmp.y がβ角(A), tmp.z がγ角(T) にそれぞれ対応 )
Coord RotToZYZEuler( Coord rot[] )
FRAMEの初期化
void InitFrame( FRAME * f )
連立1次方程式の解を求める
double Gauss( int n, Matrix a, Vector b, Vector x )
LU分解の結果から連立1次方程式を解く
void LU_Solver( int n, Matrix a, Vector b, int * ip, Vector x )
逆行列を求める
double MatInv( int n, Matrix a, Matrix a_inv )
LU分解ルーチン
double LU( int n, Matrix a, int * ip )
3x3の逆行列を求める
double MatInv3( Matrix A, Matrix A_inv )
2x2の逆行列を求める
double MatInv2( Matrix A, Matrix A_inv )
2項係数(nCrの組合せ総数)を求める
int nCr( int n, int r )
自然数nの階乗を求める(桁数に注意.int型の場合,10!でオーバーフロー)
int Factorial( int n )
四捨五入する
double Round( double x )
カラーステータス構造体DispStatに値を代入する
void SetColorStat( DispStat * ds, float r, float g, float b, float a )
ある座標値配列の後ろに新たな座標値配列を繋げる
int CatCoord( Coord a[], Coord b[], int alim, int anum, int bnum )
同一点を除去する
int CheckTheSamePoints( Coord * P, int N )
2次元平面内の同一点を除去する (座標値はCoordのxとyで与える)
int CheckTheSamePoints2D( Coord * P, int N )
Coordをdouble配列に代入
void CoordToArray( Coord a, double b[3] )
Coordをdouble配列に代入(2D Ver.)
void CoordToArray2D( Coord a, double b[2] )