StdAfx.cpp

Summary
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を返す(オーバーロード)
DiffCoord2D2D平面での座標値がAPPROX_ZEROの精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す
DiffCoord2D2D平面での座標値が指定の精度で同じなら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を返す
NewVectordouble型1次元配列のメモリー確保
NewVectordouble型2次元配列のメモリー確保
FreeVectordouble型1次元配列のメモリー解放
FreeMatrixdouble型2次元配列のメモリー解放
NewCoord11次元Coord型配列のメモリー確保
NewCoord22次元Coord型配列のメモリー確保
NewCoord33次元Coord型配列のメモリー確保
FreeCoord11次元Coord型配列のメモリー解放
FreeCoord22次元Coord型配列のメモリー解放
FreeCoord33次元Coord型配列のメモリー解放
NormalizeVecベクトルを正規化する
NormalizeVecベクトルを正規化する(オーバーロード)
CalcEuclidユークリッド距離を算出
CalcEuclid2D2次元ユークリッド距離を算出
CalcDistance2点間のユークリッド距離を求める
CalcDistance2D2次元座標上での2点間のユークリッド距離を算出
CalcInnerProduct内積を求める
CalcInnerProduct内積を求める(オーバーロード)
CalcOuterProduct外積を求める
CalcOuterProduct2D外積を求める (2D Ver.)
CalcVecAngle2つのベクトルのなす角を求める(返値はrad)
CalcInterDivPt2点p(t=0),q(t=1)をt(0~1)で内分したときの点の座標をもとめる
CalcOrthoProjection任意の点を任意の平面へ正射影する
CalcDistPtToPlane任意の点から任意の平面までの距離を求める
CalcScalarTriProductスカラー三重積を求める
CalcAnglePlaneVec平面と直線とのなす角を求める
DrawPoint点を描画(OpenGL)
DrawPoints点群を描画(OpenGL)
DrawVectorベクトルを描画(OpenGL)
DrawLine2点間に線分を描画(OpenGL)
DrawSolidCone四角錐を描画する
DegToRad角度をdegreeからradianへ変換
RadToDeg角度をradianからdegreeへ変換
Arc_CP円の中心点(vec[0])から円上に接する任意の2本の接線が交わる点へのベクトル(中心角0<θ<π)
CalcVecAngle2D2つのベクトルのなす角を求める(2D平面)
CalcRotVec2D任意のベクトルを回転させたベクトルを求める(2D平面)
CalcRotVec任意のベクトルを原点を通る任意軸周りに回転させたベクトルを求める
CalcNormalLine任意の点Pから任意の直線(点Aを通り単位ベクトルuの方向を持つ)へ下ろした点を求める
BubbleSortint型配列のバブルソート(基本交換法)
BubbleSortdouble型配列のバブルソート(基本交換法)(オーバーロード)
QCmpC言語標準関数qsort(double型、降順)で用いる比較関数
ReverseCoord配列の反転
Reversedouble型配列の反転操作(オーバーロード)
InitVector1次元配列の初期化
InitMatrix2次元配列の初期化
CopyVectorベクトルのコピー(aベクトルをbベクトルへ代入)
CalcCubicEquation3次方程式を解く
CalcQuadraticEquation2次方程式を解く
CalcLinearEquation1次方程式を解く
sgn符号判定
CheckZero値がAPPROX_ZEROの範囲で0であるかチェック
CheckRange指定した値が指定した範囲内であるかをチェック
CheckMag2つの値の大小比較
IsPointInPolygon注目点の多角形内外判別(x-y平面内)
CalcNormVecFrom3Pts空間上の3点からなる平面の法線ベクトルを求める
CalcPolygonArea空間上の多角形の面積を得る
ClacPolygonArea2D2D平面上の多角形の符号付き面積を得る(CCW:正,CW:負)
DiscriminateCW2D2D平面上の多角形が時計回りか反時計回りかを判別する
AddMxMx行列同士の足し算
MulMxMx行列同士の掛け算
MulMxVec行列とベクトルの掛け算
MulMxVec行列と座標値ベクトルの掛け算(オーバーロード)
MulMxCoordCoordで表現される3x3行列とCoordベクトルとの掛け算
MulMxCoordMatrixで表現される3x3行列とCoordベクトルとの掛け算(オーバーロード)
TranMx転置行列を得る
TranMx2次元Coord配列によって構成される行列の転置行列を得る(オーバーロード)
TranMx1次元Coord配列によって構成される行列の転置行列を得る(オーバーロード)
MulFrameCoord同次変換行列(R,T)と座標値(I(3Dベクトル))との掛け算
MulFrameCoord同次変換行列(f)と座標値(I(3Dベクトル))との掛け算(オーバーロード)
InvFrame同次変換行列Fの逆行列を得る
MulFrame同次変換行列の掛け算
RotToZYZEuler回転行列からZYZオイラー角を算出( tmp.x がα角(O), tmp.y がβ角(A), tmp.z がγ角(T) にそれぞれ対応 )
InitFrameFRAMEの初期化
Gauss連立1次方程式の解を求める
Gauss連立1次方程式の解を求める(オーバーロード)
LU_SolverLU分解の結果から連立1次方程式を解く
LU_SolverLU分解の結果から連立1次方程式を解く(オーバーロード)
MatInv逆行列を求める
LULU分解ルーチン
MatInv33x3の逆行列を求める
MatInv22x2の逆行列を求める
nCr2項係数(nCrの組合せ総数)を求める
Factorial自然数nの階乗を求める(桁数に注意.int型の場合,10!でオーバーフロー)
Round四捨五入する
SetColorStatカラーステータス構造体DispStatに値を代入する
CatCoordある座標値配列の後ろに新たな座標値配列を繋げる
CheckTheSamePoints同一点を除去する
CheckTheSamePoints同一値を除去する(オーバーロード)
CheckTheSamePoints2D2次元平面内の同一点を除去する (座標値はCoordのxとyで与える)
CoordToArrayCoordをdouble配列に代入
CoordToArray2DCoordをdouble配列に代入(2D Ver.)

Functions

+

Coord Coord::operator +(Coord a)

Coord同士の足し算(AddCoord())

-

Coord Coord::operator -(Coord a)

Coord同士の引き算(SubCoord())

/

Coord Coord::operator /(Coord a)

Coord同士の割り算(DivCoord())

/

Coord Coord::operator /(double a)

Coordとdoubleとの割り算(オーバーロード)

&

double Coord::operator &(Coord a)

Coord同士の内積(CalcInnerProduct())

&&

Coord Coord::operator &&(Coord a)

Coord同士の外積(CalcOuterProduct())

InitCoord

void InitCoord(Coord *a)

座標値の初期化

Parameters

*a初期化したい座標値のポインタ

InitCoord

void InitCoord(Coord *a,
int n)

座標値配列の初期化(オーバーロード)

Parameters

*a初期化したい座標値配列
n配列要素数

InitCoord

Coord InitCoord()

座標値の初期化(オーバーロード)

Return

初期化された座標値

AddCoord

Coord AddCoord(Coord a,
Coord b)

座標値同士の足し算

Parameter

a, b加算する2つの座標値

Return

演算結果(a.x+b.x, a.y+b.y, a.z+b.z)

AddCoord

Coord AddCoord(Coord a,
double b)

座標値同士の足し算(オーバーロード)

Parameter

a加算される座標値
b加算するdouble値(a.x, a.y, a.zそれぞれにbが加算される)

Return

演算結果(a.x+b, a.y+b, a.z+b)

AddCoord

Coord AddCoord(Coord a,
double x,
double y,
double z)

座標値同士の足し算(オーバーロード)

Parameter

a加算される座標値
x,y,z加算するdouble値(a.x, a.y, a.zそれぞれにx,y,zが加算される)

Return

演算結果(a.x+x, a.y+y, a.z+z)

AddCoord2D

Coord AddCoord2D(Coord a,
Coord b)

座標値同士の足し算 (2D Ver.)

Parameter

a, b加算する2つの座標値

Return

演算結果(a.x+b.x, a.y+b.y)

AddCoord2D

Coord AddCoord2D(Coord a,
double b)

座標値同士の足し算(オーバーロード) (2D Ver.)

Parameter

a加算される座標値
b加算するdouble値(a.x, a.yそれぞれにbが加算される)

Return

演算結果(a.x+b, a.y+b)

AddCoord

Coord AddCoord2D(Coord a,
double x,
double y)

座標値同士の足し算(オーバーロード) (2D Ver.)

Parameter

a加算される座標値
x,y,z加算するdouble値(a.x, a.yそれぞれにx,yが加算される)

Return

演算結果(a.x+x, a.y+y)

DivCoord

Coord DivCoord(Coord a,
Coord b)

座標値同士の割り算

Parameter

a,b除算する2つの座標値

Return

演算結果(a.x/b.x, a.y/b.y, a.z/b.z)

DivCoord

Coord DivCoord(Coord a,
double b)

座標値同士の割り算(オーバーロード)

Parameter

a除算される座標値
b除算するdouble値

Return

演算結果(a.x/b, a.y/b, a.z/b)

DivCoord

Coord DivCoord(Coord a,
double x,
double y,
double z)

座標値同士の割り算(オーバーロード)

Parameter

a除算される座標値
b除算するdouble値

Return

演算結果(a.x/x, a.y/y, a.z/z)

DivCoord2D

Coord DivCoord2D(Coord a,
Coord b)

座標値同士の割り算 (2D Ver.)

Parameter

a,b除算する2つの座標値

Return

演算結果(a.x/b.x, a.y/b.y)

DivCoord2D

Coord DivCoord2D(Coord a,
double b)

座標値同士の割り算(オーバーロード) (2D Ver.)

Parameter

a除算される座標値
b除算するdouble値

Return

演算結果(a.x/b, a.y/b)

DivCoord2D

Coord DivCoord2D(Coord a,
double x,
double y)

座標値同士の割り算(オーバーロード) (2D Ver.)

Parameter

a除算される座標値
x,y除算するdouble値

Return

演算結果(a.x/x, a.y/y)

SubCoord

Coord SubCoord(Coord a,
Coord b)

座標値同士の引き算

Parameter

a,b引き算する2つの座標値

Return

演算結果(a.x-b.x, a.y-b.y, a.z-b.z)

SubCoord

Coord SubCoord(Coord a,
double b)

座標値同士の引き算(オーバーロード)

Parameter

a引き算される座標値
b引き算するdouble値

Return

演算結果(a.x-b, a.y-b, a.z-b)

SubCoord

Coord SubCoord(Coord a,
double x,
double y,
double z)

座標値同士の引き算(オーバーロード)

Parameter

a引き算される座標値
x,x,z引き算するdouble値

Return

演算結果(a.x-x, a.y-y, a.z-z)

SubCoord2D

Coord SubCoord2D(Coord a,
Coord b)

座標値同士の引き算 (2D Ver.)

Parameter

a,b引き算する2つの座標値

Return

演算結果(a.x-b.x, a.y-b.y)

SubCoord2D

Coord SubCoord2D(Coord a,
double b)

座標値同士の引き算(オーバーロード) (2D Ver.)

Parameter

a引き算される座標値
b引き算するdouble値

Return

演算結果(a.x-b, a.y-b)

SubCoord2D

Coord SubCoord2D(Coord a,
double x,
double y)

座標値同士の引き算(オーバーロード) (2D Ver.)

Parameter

a引き算される座標値
x,y引き算するdouble値

Return

演算結果(a.x-x, a.y-y)

MulCoord

Coord MulCoord(Coord a,
Coord b)

座標値同士の掛け算

Parameter

a,b掛け算する2つの座標値

Return

演算結果(a.x*b.x, a.y*b.y, a.z*b.z)

MulCoord

Coord MulCoord(Coord a,
double b)

座標値同士の掛け算(オーバーロード)

Parameter

a掛け算される座標値
b掛け算するdouble値

Return

演算結果(a.x*b, a.y*b, a.z*b)

MulCoord

Coord MulCoord(Coord a,
double x,
double y,
double z)

座標値同士の掛け算(オーバーロード)

Parameter

a掛け算される座標値
x,y,z掛け算するdouble値

Return

演算結果(a.x*x, a.y*y, a.z*z)

MulCoord2D

Coord MulCoord2D(Coord a,
Coord b)

座標値同士の掛け算 (2D Ver.)

Parameter

a,b掛け算する2つの座標値

Return

演算結果(a.x*b.x, a.y*b.y)

MulCoord2D

Coord MulCoord2D(Coord a,
double b)

座標値同士の掛け算(オーバーロード) (2D Ver.)

Parameter

a掛け算される座標値
b掛け算するdouble値

Return

演算結果(a.x*b, a.y*b)

MulCoord2D

Coord MulCoord2D(Coord a,
double x,
double y)

座標値同士の掛け算(オーバーロード) (2D Ver.)

Parameter

a掛け算される座標値
x,y掛け算するdouble値

Return

演算結果(a.x*x, a.y*y)

DiffCoord

int DiffCoord(Coord a,
Coord b)

座標値がAPPROX_ZEROの精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す

Parameter

a,b比較する2つの座標値

Return

A==B: KOD_TRUE, A!=B: KOD_FALSE

DiffCoord

int DiffCoord(Coord a,
Coord b,
double App)

座標値が指定の精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す(オーバーロード)

Parameter

a,b比較する2つの座標値
App精度(APPROX_ZERO_L_L, APPROX_ZERO_L, APPROX_ZERO, APPROX_ZERO_Hから選択)

Return

A==B: KOD_TRUE, A!=B: KOD_FALSE

DiffCoord2D

int DiffCoord2D(Coord a,
Coord b)

2D平面での座標値がAPPROX_ZEROの精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す

Parameter

a,b比較する2つの座標値

Return

A==B: KOD_TRUE, A!=B: KOD_FALSE

DiffCoord2D

int DiffCoord2D(Coord a,
Coord b,
double App)

2D平面での座標値が指定の精度で同じならKOD_TRUE、異なっているならKOD_FALSEを返す(オーバーロード)

Parameter

a,b比較する2つの座標値
App精度(APPROX_ZERO_L_L, APPROX_ZERO_L, APPROX_ZERO, APPROX_ZERO_Hから選択)

Return

A==B: KOD_TRUE, A!=B: KOD_FALSE

AbsCoord

Coord AbsCoord(Coord a)

座標値の絶対値を返す

Parameter

a座標値

Return

x,y,z各座標の絶対値を返す

AbsCoord2D

Coord AbsCoord2D(Coord a)

座標値の絶対値を返す(2D Ver.)

Parameter

a座標値

Return

x,y,z各座標の絶対値を返す

SetCoord

Coord SetCoord(Coord a)

座標値を代入する

Parameter

a代入する座標値

Return

引数aの値がそのまま返る

SetCoord

Coord SetCoord(double x,
double y,
double z)

座標値を代入する(オーバーロード)

Parameter

x,y,z代入する座標値を要素ごとに指定

Return

(x,y,z)の値がCoordとして返る

SetCoord2D

Coord SetCoord2D(Coord a)

座標値を代入する(2D Ver.)

Parameter

a代入する座標値

Return

引数aの値がそのまま返る

SetCoord2D

Coord SetCoord2D(double x,
double y)

座標値を代入する(オーバーロード)(2D Ver.)

Parameter

x,y代入する座標値を要素ごとに指定

Return

(x,y)の値がCoordとして返る

CopyCoord

void CopyCoord(Coord *a,
int n,
Coord *b)

座標値群のコピー(b<--a)

Parameter

*a代入する座標値配列
n配列の要素数
*b代入される方の座標値配列

CopyCoord2D

void CopyCoord2D(Coord *a,
int n,
Coord *b)

座標値群のコピー(b<--a)(2D Ver.)

Parameter

*a代入する座標値配列
n配列の要素数
*b代入される方の座標値配列

ZoroCoord

int ZoroCoord(Coord a)

座標値aが(0,0,0)のときKOD_FALSEを返す

Parameters

a検証する座標値 KOD_TRUE: (0,0,0)でない. KOD_FALSE: (0,0,0)

ZoroCoord2D

int ZoroCoord2D(Coord a)

座標値aが(0,0)のときKOD_FALSEを返す

Parameters

a検証する座標値 KOD_TRUE: (0,0)でない. KOD_FALSE: (0,0)

NewVector

Vector NewVector(int len)

double型1次元配列のメモリー確保

Parameters

lenメモリー確保するdouble型配列要素数

Return

確保されたdouble型1次元配列へのポインタ(メモリー確保に失敗:NULL)

NewVector

double型2次元配列のメモリー確保

Parameters

row, colメモリー確保するdouble型2次元配列の行,列の要素数

Return

確保されたdouble型2次元配列へのポインタ(メモリー確保に失敗:NULL)

FreeVector

void FreeVector(Vector a)

double型1次元配列のメモリー解放

Parameter

aメモリー解放するdouble型1次元配列へのポインタ

FreeMatrix

void FreeMatrix(Matrix a,
int col)

double型2次元配列のメモリー解放

Parameter

aメモリー解放するdouble型2次元配列へのポインタ
colaの行要素数

NewCoord1

Coord *NewCoord1(int len)

1次元Coord型配列のメモリー確保

Parameters

lenメモリー確保するCoord型配列要素数

Return

確保されたdouble型1次元配列へのポインタ(メモリー確保に失敗:NULL)

NewCoord2

Coord **NewCoord2(int row,
int col)

2次元Coord型配列のメモリー確保

Parameters

row, colメモリー確保するCoord型2次元配列の行,列の要素数

Return

確保されたCoord型2次元配列へのポインタ(メモリー確保に失敗:NULL)

NewCoord3

Coord ***NewCoord3(int x,
int y,
int z)

3次元Coord型配列のメモリー確保

Parameters

x, y, zメモリー確保するCoord型3次元配列の各配列要素数

Return

確保されたCoord型3次元配列へのポインタ(メモリー確保に失敗:NULL)

FreeCoord1

void FreeCoord1(Coord *a)

1次元Coord型配列のメモリー解放

Parameters

*a解放する1次元Coord型配列へのポインタ

FreeCoord2

void FreeCoord2(Coord **a,
int col)

2次元Coord型配列のメモリー解放

Parameters

*a解放する2次元Coord型配列へのポインタ
colaの行要素数

FreeCoord3

void FreeCoord3(Coord ***a,
int x,
int y)

3次元Coord型配列のメモリー解放

Parameters

*a解放する3次元Coord型配列へのポインタ
x,yaの行,列要素数

NormalizeVec

Coord NormalizeVec(Coord a)

ベクトルを正規化する

Parameters

a正規化する三次元ベクトル

Return

正規化された三次元ベクトル

NormalizeVec

Coord NormalizeVec(double x,
double y,
double z)

ベクトルを正規化する(オーバーロード)

Parameters

x,y,z正規化する3次元ベクトルを,(x,y,z)座標値で指定

Return

正規化された3次元ベクトル

CalcEuclid

double CalcEuclid(Coord a)

ユークリッド距離を算出

Parameters

a3次元ベクトル

Return

ユークリッド距離

CalcEuclid2D

double CalcEuclid2D(double a,
double b)

2次元ユークリッド距離を算出

Parameters

a,b2次元ベクトル(a,b)

Return

ユークリッド距離

CalcDistance

double CalcDistance(Coord a,
Coord b)

2点間のユークリッド距離を求める

Parameters

a,b2点

Return

2点間のユークリッド距離

CalcDistance2D

double CalcDistance2D(Coord a,
Coord b)

2次元座標上での2点間のユークリッド距離を算出

Parameters

a,b2点

Return

2点間のユークリッド距離

CalcInnerProduct

double CalcInnerProduct(Coord a,
Coord b)

内積を求める

Parameters

a,b2つの3次元ベクトル

Return

内積

CalcInnerProduct

double CalcInnerProduct(Coord a,
double x,
double y,
double z)

内積を求める(オーバーロード)

Parameters

a3次元ベクトル(Coordで指定)
x,y,z3次元ベクトル((x,y,z)座標値で指定)

Return

内積

CalcOuterProduct

Coord CalcOuterProduct(Coord a,
Coord b)

外積を求める

Parameters

a,b2つの3次元ベクトル

Return

外積

CalcOuterProduct2D

double CalcOuterProduct2D(Coord a,
Coord b)

外積を求める (2D Ver.)

Parameters

a,b2つの3次元ベクトル

Return

外積

CalcVecAngle

double CalcVecAngle(Coord a,
Coord b)

2つのベクトルのなす角を求める(返値はrad)

Parameters

a,b2つの3次元ベクトル

Return

2つのベクトルのなす角(rad)

CalcInterDivPt

Coord CalcInterDivPt(Coord p,
Coord q,
double t)

2点p(t=0),q(t=1)をt(0~1)で内分したときの点の座標をもとめる

Parameters

p,q2つの3次元座標
t内分比を0-1の間で指定.

Return

内分点座標

CalcOrthoProjection

Coord CalcOrthoProjection(Coord p,
Coord n,
Coord q)

任意の点を任意の平面へ正射影する

Parameters

p任意の平面上の点
n任意の平面の単位法線ベクトル
q正射影したい点

Return

正射影された点の座標値

CalcDistPtToPlane

double CalcDistPtToPlane(Coord Pt,
Coord P0,
Coord N)

任意の点から任意の平面までの距離を求める

Parameters

Pt任意の点
P0平面上の1点
N平面の法線ベクトル

Return

計算結果

CalcScalarTriProduct

double CalcScalarTriProduct(Coord a,
Coord b,
Coord c)

スカラー三重積を求める

Parameters

a,b,c3つの3次元ベクトル

Return

スカラー三重積

CalcAnglePlaneVec

double CalcAnglePlaneVec(Coord a,
Coord n)

平面と直線とのなす角を求める

Parameters

a直線の方向ベクトル
n平面の法線ベクトル

Return

計算結果(radian)

DrawPoint

void DrawPoint(Coord p,
double scale,
double width,
double color[3])

点を描画(OpenGL)

Parameters

p点の座標値
ScalepをScale倍する
Width点のサイズ
Color[3]点の色をRGBで指定 (0<= r,g,b <=1)

DrawPoints

void DrawPoints(Coord *p,
int n,
double scale,
double width,
double color[3])

点群を描画(OpenGL)

Parameters

*p点群配列へのポインタ
n点数
scalepをScale倍する
width点のサイズ
color[3]点の色をRGBで指定 (0<= r,g,b <=1)

DrawVector

void DrawVector(Coord s,
Coord e,
double vec_len,
double width,
double color[3])

ベクトルを描画(OpenGL)

Parameters

s,e3次元ベクトルの始点と終点座標
vec_len表示するベクトルの長さの倍率
width描画する線分の太さ
color[3]点の色をRGBで指定 (0<= r,g,b <=1)

DrawLine

void DrawLine(Coord s,
Coord e,
double width,
double color[3])

2点間に線分を描画(OpenGL)

Parameters

s,e描画する線分の始点と終点座標
width描画する線分の太さ
color[3]点の色をRGBで指定 (0<= r,g,b <=1)

DrawSolidCone

void DrawSolidCone(double r,
double h)

四角錐を描画する

Parameters

r錐の底辺の半径
h錐の高さ

DegToRad

double DegToRad(double degree)

角度をdegreeからradianへ変換

Parameters

degreedegree

Return

radian

RadToDeg

double RadToDeg(double radian)

角度をradianからdegreeへ変換

Parameters

radianradian

Return

degree

Arc_CP

Coord Arc_CP(Coord a,
Coord b,
double cos)

円の中心点(vec[0])から円上に接する任意の2本の接線が交わる点へのベクトル(中心角0<θ<π)

Parameters

a円弧をなすベクトル1
b円弧をなすベクトル2
cos中心角の余弦

Return

計算結果

CalcVecAngle2D

double CalcVecAngle2D(Coord a,
Coord b)

2つのベクトルのなす角を求める(2D平面)

Parameters

a,b2つの2次元ベクトル

Return

計算結果

CalcRotVec2D

Coord CalcRotVec2D(Coord a,
double angle)

任意のベクトルを回転させたベクトルを求める(2D平面)

Parameters

a任意の2次元ベクトル
angle回転角度(rad)

Return

回転後の2次元ベクトル

CalcRotVec

Coord CalcRotVec(Coord a,
Coord e,
double ang)

任意のベクトルを原点を通る任意軸周りに回転させたベクトルを求める

Parameters

a回転させたいベクトル
e原点を通る任意軸(単位ベクトルであること)
ang回転角(rad)

Return

回転後のベクトル

CalcNormalLine

Coord CalcNormalLine(Coord P,
Coord A,
Coord u)

任意の点Pから任意の直線(点Aを通り単位ベクトルuの方向を持つ)へ下ろした点を求める

Parameters

P任意の点
A任意の直線上の点
u任意の直線の単位方向ベクトル

Return

計算結果

BubbleSort

void BubbleSort(int array[],
int array_size)

int型配列のバブルソート(基本交換法)

Parameters

array[]ソートされる数値配列
array_size配列要素数

BubbleSort

void BubbleSort(double array[],
int array_size)

double型配列のバブルソート(基本交換法)(オーバーロード)

Parameters

array[]ソートされる数値配列
array_size配列要素数

QCmp

int QCmp(const void*a,
const void*b)

C言語標準関数qsort(double型、降順)で用いる比較関数

Parameters

*a,*b比較するdouble型の数値

Return

a<b:1, a>b:-1, a=b:0

Reverse

void Reverse(Coord p[],
int n)

Coord配列の反転

Parameters

p[]Coord配列
npの要素数

Reverse

void Reverse(double p[],
int n)

double型配列の反転操作(オーバーロード)

Parameters

p[]double配列
npの要素数

InitVector

void InitVector(Vector vec,
int size)

1次元配列の初期化

Parameters

vec1次元配列へのポインタ
size配列要素数

InitMatrix

void InitMatrix(Matrix mat,
int size_x,
int size_y)

2次元配列の初期化

Parameters

mat2次元配列へのポインタ
size_x,size_y行列要素数

CopyVector

void CopyVector(Vector a,
int n,
Vector b)

ベクトルのコピー(aベクトルをbベクトルへ代入)

Parameters

aコピー元1次元配列へのポインタ
naの要素数
bコピー先1次元配列へのポインタ

CalcCubicEquation

int CalcCubicEquation(double *p,
double *ans)

3次方程式を解く

Parameters

*p4つの係数(a[0]x^3 + a[1]x^2 + a[2]x + a[3])
*ans3つの解

Return

解が3つとも実根の場合は3、1つだけ実根の場合は1 a[0]==0の場合はKOD_ERR

CalcQuadraticEquation

int CalcQuadraticEquation(double *a,
double *ans)

2次方程式を解く

Parameters

*a3つの係数(a[0]x^2 + a[1]x + a[2])
*ans2つの解

Return

解が実根の場合は2、虚根の場合はKOD_ERR a[0]==0の場合はKOD_ERR

CalcLinearEquation

int CalcLinearEquation(double *a,
double *ans)

1次方程式を解く

Parameters

*a2つの係数(a[0]x + a[1])
*ans

Return

a[0]==0の場合はKOD_ERR

sgn

double sgn(double x)

符号判定

Parameters

x対象とするdouble値

Return

x<0:-1,x==0:0, x>0:1

CheckZero

int CheckZero(double val,
int flag)

値がAPPROX_ZEROの範囲で0であるかチェック

Parameters

val入力値
flag精度(HIGH_ACCURACY or MID_ACCURACY or LOW_ACCURACY)

-APPROX_ZERO < val < APPROX_ZERO

Return

KOD_TRUE:範囲内でゼロとみなせる KOD_FALSE:範囲外 KOD_ERR:引数のflag指定が間違っている

CheckRange

int CheckRange(double low,
double up,
double val,
int flag)

指定した値が指定した範囲内であるかをチェック

Parameters

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と一致する場合は、範囲内にあるものとする

Return

KOD_TRUE:範囲内  KOD_FALSE:範囲外   KOD_ERR:flagに指定した値が0,1以外

CheckMag

int CheckMag(double val1,
double val2,
int flag)

2つの値の大小比較

Parameters

val1,val2入力値
flag精度(HIGH_ACCURACY or or MID_ACCURACY or LOW_ACCURACY or LOW_LOW_ACCURACY)

Returns

KOD_EQUALval1 = val2 (|va1-val2| < APPROX_ZERO)
KOD_TRUEval1 > val2 ()
KOD_FALSEval1 < val2 ()

IsPointInPolygon

int IsPointInPolygon(Coord TargetPoint,
Coord *BorderPoint,
int CountPoint)

注目点の多角形内外判別(x-y平面内)

Parameters

TargetPoint注目点
*BorderPoint多角形の頂点群配列
CountPoint頂点の数

Returns

KOD_TRUE:内 KOD_FALSE:外 KOD_ONEDGE:エッジ上

CalcNormVecFrom3Pts

Coord CalcNormVecFrom3Pts(Coord p1,
Coord p2,
Coord p3)

空間上の3点からなる平面の法線ベクトルを求める

Parameters

p1,p2,p3空間上の3点

Return

計算結果

CalcPolygonArea

double CalcPolygonArea(Coord p[],
int Vnum)

空間上の多角形の面積を得る

Parameters

p[]頂点列
Vnum頂点の数

Return

計算結果

ClacPolygonArea2D

double ClacPolygonArea2D(Coord p[],
int Vnum)

2D平面上の多角形の符号付き面積を得る(CCW:正,CW:負)

Parameters

p[]頂点列
Vnum頂点の数

Return

計算結果

DiscriminateCW2D

int DiscriminateCW2D(Coord p[],
int Vnum)

2D平面上の多角形が時計回りか反時計回りかを判別する

Parameters

p[]頂点列
Vnum頂点の数

Return

CCW:KOD_TRUE CW:KOD_FALSE

AddMxMx

void AddMxMx(Matrix A,
Matrix B,
Matrix C,
int row,
int col)

行列同士の足し算

Parameters

A,B,C[C] = [A] +[B]
row,col行,列要素数

MulMxMx

void MulMxMx(Matrix A,
int A_row,
int A_col,
Matrix B,
int B_row,
int B_col,
Matrix C)

行列同士の掛け算

Parameters

A,B,C[C] = [A][B]
A_row, A_col行列Aの行,列要素数
B_row, B_col行列Bの行,列要素数

MulMxVec

void MulMxVec(Matrix A,
int A_row,
int A_col,
Vector B,
int B_row,
Vector C)

行列とベクトルの掛け算

Parameters

A,B,C{C} = [A]{B}
A_row行数
A_col列数
B_rowベクトルの次元数

MulMxVec

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]|

Parameters

A,B,C{C} = [A]{B}
A_row行数
A_col列数
B_rowベクトルの次元数

MulMxCoord

Coord MulMxCoord(Coord A[],
Coord d)

Coordで表現される3x3行列とCoordベクトルとの掛け算

    |A[0].x A[1].x A[2].x|       |d.x|
A = |A[0].y A[1].y A[2].y| , d = |d.y|
    |A[0].z A[1].z A[2].z|       |d.z|

Parameters

A[3]Coord表現の3x3行列
dCoord表現の3次元ベクトル

Return

計算結果

MulMxCoord

Coord MulMxCoord(Matrix A,
Coord d)

Matrixで表現される3x3行列とCoordベクトルとの掛け算(オーバーロード)

Parameters

Adouble型2次元配列へのポインタ(3x3行列)
dCoord表現の3次元ベクトル

Return

計算結果

TranMx

void TranMx(Matrix A,
int m,
int n,
Matrix B)

転置行列を得る

Parameters

**A元の行列
mAの行数
nAの列数
**B転置行列を格納

転置されるとmとnが逆になるので、Bのメモリー確保に注意!

TranMx

void TranMx(Coord **A,
int m,
int n,
Coord **B)

2次元Coord配列によって構成される行列の転置行列を得る(オーバーロード)

Parameters

**A元の行列
mAの行数
nAの列数
**B転置行列を格納

転置されるとmとnが逆になるので、Bのメモリー確保に注意!

TranMx

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|

Parameters

A[3]元の行列
B[3]転置行列を格納

MulFrameCoord

Coord MulFrameCoord(double R[][3],
double T[],
Coord I)

同次変換行列(R,T)と座標値(I(3Dベクトル))との掛け算

Parameters

R[][3]同次変換行列の回転行列成分
T[3]同次変換行列の並進ベクトル成分
I座標値

Return

計算結果

MulFrameCoord

Coord MulFrameCoord(FRAME f,
Coord I)

同次変換行列(f)と座標値(I(3Dベクトル))との掛け算(オーバーロード)

Parameters

f同次変換行列
I座標値

Return

計算結果

InvFrame

FRAME InvFrame(FRAME F)

同次変換行列Fの逆行列を得る

F = |R T|    F^-1 = |R^-1 -R^-1*T|
    |0 1|           |  0     1   |

Parameters

F同次変換行列

Return

計算結果

MulFrame

FRAME MulFrame(FRAME a,
FRAME b)

同次変換行列の掛け算

Parameters

a,b同次変換行列

Return

計算結果

RotToZYZEuler

Coord RotToZYZEuler(Coord rot[])

回転行列からZYZオイラー角を算出( tmp.x がα角(O), tmp.y がβ角(A), tmp.z がγ角(T) にそれぞれ対応 )

Prameters

rot[3]Coord表現の回転行列(rad)

Return

計算結果(deg)

InitFrame

void InitFrame(FRAME *f)

FRAMEの初期化

Parameters

*f初期化するFRAMEへのポインタ

Gauss

double Gauss(int n,
Matrix a,
Vector b,
Vector x)

連立1次方程式の解を求める

Parameters

n:行数 a,b,x - [a]{x}={b}で、解はxに入る(b,xはdouble型配列)

Return

行列式(メモリーエラー:KOD_ERR)

Gauss

double Gauss(int n,
Matrix a,
Coord *b,
Coord *x)

連立1次方程式の解を求める(オーバーロード)

Parameters

n:行数 a,b,x - [a]{x}={b}で、解はxに入る(b,xはCoord型配列)

Return

行列式(メモリーエラー:KOD_ERR)

LU_Solver

void LU_Solver(int n,
Matrix a,
Vector b,
int *ip,
Vector x)

LU分解の結果から連立1次方程式を解く

Parameters

n行/列数
an*nの係数行列 (注意:出力としてLU分解された結果が格納される)
bn次元の右辺ベクトル
ip行交換の情報

LU_Solver

void LU_Solver(int n,
Matrix a,
Coord *b,
int *ip,
Coord *x)

LU分解の結果から連立1次方程式を解く(オーバーロード)

Parameters

n行/列数
an*nの係数行列 (注意:出力としてLU分解された結果が格納される)
bn次元の右辺Coord配列
ip行交換の情報

MatInv

double MatInv(int n,
Matrix a,
Matrix a_inv)

逆行列を求める

Parameters

n行(列)数
a元の行列
a_inv行列aの逆行列

Return

行列式(メモリーエラー:KOD_ERR)

LU

double LU(int n,
Matrix a,
int *ip)

LU分解ルーチン

Parameters

n行/列数
an*n行列 (注意:出力としてLU分解された結果が格納される)
*ip行交換の情報が格納される(n個のint配列を用意すること)

Return

行列式

MatInv3

double MatInv3(Matrix A,
Matrix A_inv)

3x3の逆行列を求める

Parameters

A元の行列
A_invAの逆行列を格納

Return

行列式

MatInv2

double MatInv2(Matrix A,
Matrix A_inv)

2x2の逆行列を求める

Parameters

A元の行列
A_invAの逆行列を格納

Return

行列式

nCr

int nCr(int n,
int r)

2項係数(nCrの組合せ総数)を求める

Parameters

n,rnCrのnとr

Return

計算結果

Factorial

int Factorial(int n)

自然数nの階乗を求める(桁数に注意.int型の場合,10!でオーバーフロー)

Parameters

nn!のn

Return

計算結果

Round

double Round(double x)

四捨五入する

Parameters

x四捨五入するdouble型値

Return

計算結果

SetColorStat

void SetColorStat(DispStat *ds,
float r,
float g,
float b,
float a)

カラーステータス構造体DispStatに値を代入する

Parameters

*ds代入先のDispStat構造体へのポインタ
r,g,b,aカラーステータス

CatCoord

int CatCoord(Coord a[],
Coord b[],
int alim,
int anum,
int bnum)

ある座標値配列の後ろに新たな座標値配列を繋げる

Parameters

a[]代入される座標値配列
b[]代入する座標値配列
alima[]の配列要素数
anum現在のa[]にデータが格納されている最後尾番号
bnumb[]の代入したい配列要素数

Return

合算された配列要素数

CheckTheSamePoints

int CheckTheSamePoints(Coord *P,
int N)

同一点を除去する

Prameters

*P点群(変更後の点群もここに格納される)
N点数

Return

変更後の点数

CheckTheSamePoints

int CheckTheSamePoints(double *P,
int N)

同一値を除去する(オーバーロード)

Prameters

*P数値配列(変更後もここに格納される)
N点数

Return

変更後の点数

CheckTheSamePoints2D

int CheckTheSamePoints2D(Coord *P,
int N)

2次元平面内の同一点を除去する (座標値はCoordのxとyで与える)

Parameters

*P点群(変更後の点群もここに格納される)
N点数

Return

変更後の点数

CoordToArray

void CoordToArray(Coord a,
double b[3])

Coordをdouble配列に代入

Parameters

aCoord値
b[3]double配列

CoordToArray2D

void CoordToArray2D(Coord a,
double b[2])

Coordをdouble配列に代入(2D Ver.)

Parameters

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