Kodatuno Logo
Kodatuno User's Guide
Prev Index Next


NURBS演算ライブラリ

【NURBS_Func.h】

NURBS操作モジュールを提供します.

■シンボル

#define PTNUMMAX            10000           // NURBSの点列の最大数
#define RANKMAX             9               // NURBSの階数の最大値
#define INTERSECPTNUMMAX    1000            // 交点格納配列長
#define NEAREST_GAP         0.01            // 2点が同一点とみなす距離
#define CONVERG_GAP         0.00001         // ニュートン法の収束を判別する閾値
#define CONVDIVNUM          100             // 収束計算用のパラメータ分割数
#define TRM_BORDERDIVNUM    100             // トリム境界線上に生成する点の数
#define FORWARD             1               // 交線追跡の方向(順)
#define INVERS             -1               // 交線追跡の方向(逆)
#define PARAM_U             0               // u方向を表すシンボル
#define PARAM_V             1               // v方向を表すシンボル
#define OUTTER_TRIM         0               // 外周トリミング領域
#define INNER_TRIM          1               // 内周トリミング領域
#define PARAMDIVNUM         10              // 初期値探索用のパラメータ分割数
#define RUNGE_KUTTA         0               // Runge-Kutta法のシンボル
#define BULIRSH_STOER       1               // Bulirsch-Stoer法のシンボル
#define CALC_OFFSET         2               // オフセット曲面計算のシンボル
#define BS_DIV              11              // Bulirsch-Stoer法の刻み数



■インクルードライブラリ

"BODY.h" "Quaternion.h" "SFQuant.h"



■型定義

なし



■クラス

NURBS_Func
<継承>
なし



■関数(Class NURBS_Func)

public
Coord CalcNurbsCCoord(NURBSC *NurbsC,double t)
Coord CalcNurbsSCoord(NURBSS *NurbsS,double div_u,double div_v)

<説明>
指定したパラメータにおけるNURBS曲線/曲面の座標値を求める.
<引数>
*NurbsC / *NurbsS:NURBS曲線/曲面へのポインタ
t:NURBS曲線パラメータ
div_u/div_v:NURBS曲面パラメータ
<戻り値>
NURBS曲線/曲面の座標値


public
void CalcNurbsCCoords(NURBSC *NurbsC,int Ptnum,double *T,Coord *Pt)
void CalcNurbsSCoords(NURBSS *NurbsS,int Ptnum,Coord *UV,Coord *Pt)

<説明>
指定したパラメータ群におけるNURBS曲線/曲面の座標値群を求める.
<引数>
*NurbsC / *NurbsS:NURBS曲線/曲面へのポインタ
Ptnum:求める点群の数
T/UV:NURBS曲線/曲面のパラメータ群
Pt:NURBS曲線/曲面の座標値
<戻り値>
なし


public
Coord CalcDiffuNurbsS(NURBSS *NurbsS,double div_u,double div_v);
Coord CalcDiffvNurbsS(NURBSS *NurbsS,double div_u,double div_v);
Coord CalcDiffNNurbsS(NURBSS *NurbsS,int k,int l,double div_u,double div_v);

<説明>
指定したパラメータにおけるNURBS曲面のu/v方向の1階/N階微分係数を求める.
<引数>
*NurbsS:NURBS曲面へのポインタ
div_u:uパラメータ
div_v:vパラメータ
k:u方向微分階数 l:v方向微分階数
<戻り値>
微分係数


public
int GenNurbsC(NURBSC *NurbsC,int K,int M,int N,double T[],double W[],Coord cp[],double V[],int prop[],int euflag)
int GenNurbsC(NURBSC *NurbsC,NURBSC nurb)

<説明>
1つのNURBS曲線を生成/コピーする.
<引数>
*NurbsC:NURBS曲線へのポインタ
K:コントロールポイントの数
M:階数
N:ノットベクトルの数
T[]:ノットシーケンスの値
W[]:Weightの値
cp[]:コントロールポイントの値
V[]:パラメータの範囲
prop[]:各プロパティの値
euflag:ディレクトリ部 Entity Use Flagの値
*NurbsC:新たに生成するNURBS曲線
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenNurbsS(NURBSS *NurbsS,int Mu,int Mv,int Ku,int Kv,double *S,double *T,double **W,Coord **Cp,double U_s,double U_e,double V_s,double V_e)
int NURBS_Func::GenNurbsS(NURBSS *Nurbs,NURBSS nurb)

<説明>
1つのNURBS曲面を生成/コピーする.
<引数>
*NurbsS:NURBS曲面へのポインタ
Mu:u方向の階数
Mv:v方向の階数
Ku:u方向のコントロールポイントの数
Kv:v方向のコントロールポイントの数
*S:u方向のノットベクトルの値
*T:v方向のノットベクトルの値
**W:Weightの値
**Cp:コントロールポイントの値
U_s:uパラメータの範囲の最初の値
U_e:uパラメータの範囲の最後の値
V_s:vパラメータの範囲の最初の値
V_e:vパラメータの範囲の最後の値
*NurbsS:新たに生成するNURBS曲線
nurb:コピーするNURBS曲面
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenRotNurbsS(NURBSS *NurbsS,NURBSC NurbsC,Coord Axis,double deg)

<説明>
NURBS曲線を原点を通る任意の回転軸回りにある角度だけ回転させ,回転サーフェスを生成する.
<引数>
*NurbsS:生成された回転サーフェス
NurbsC:回転させるNURBS曲線
Axis:任意の回転軸
deg:回転角度
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenSweepNurbsS(NURBSS *NurbsS,NURBSC NurbsC,Coord Axis,double Len)

<説明>
NURBS曲線を原点を通る任意の回転軸回りにある角度だけ回転させ,回転サーフェスを生成する.
<引数>
*NurbsS:生成されたスイープサーフェス
NurbsC:スイープさせるNURBS曲線
Axis:任意の軸
Len:移動距離
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenIsoparamCurveU(NURBSS *P,double u,NURBSC *C)

<説明>
NURBS曲面上のu方向パラメータ値を固定したときのアイソパラメトリックNURBS曲線を生成する.
<引数>
*NurbsS:アイソパラメトリック曲線生成元のNURBS曲面
u:u方向の固定パラメータ
*C:生成されたアイソパラメトリック曲線
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR (引数uが*Pのuパラメータ範囲外)


public
int GenIsoparamCurveV(NURBSS *P,double v,NURBSC *C)

<説明>
NURBS曲面上のv方向パラメータ値を固定したときのアイソパラメトリックNURBS曲線を生成する.
<引数>
*NurbsS:アイソパラメトリック曲線生成元のNURBS曲面
v:v方向の固定パラメータ
*C:生成されたアイソパラメトリック曲線
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR (引数vが*Pのvパラメータ範囲外)


public
int GenTrimdNurbsS(TRIMD_NURBSS *TNurbs,TRIMD_NURBSS tnurb)

<説明>
トリム面を有するNURBS曲面を生成する.
<引数>
*Tnurbs:新たに生成するトリム面
nurb:元となるトリム面
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int DelTrimdNurbsS(TRIMD_NURBSS *TNurbs)

<説明>
GenTrimdNurbsS()によって生成されたトリム面を削除する.
<引数>
*Tnurbs:削除するトリム面
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
void DelNurbsC(NURBSC *NurbsC)
void DelNurbsS(NURBSS *NurbsS)

<説明>
GenNurbsC()/GenNurbsS()によって生成されたNURBS曲線/曲面を削除する.
<引数>
*NurbsC/*NurbsS:削除するNURBS曲線/曲面
<戻り値>
なし


public
double CalcBSbasis(double t, double knot[],int N,int I,int M)

<説明>
GenNurbsC()/GenNurbsS()によって生成されたNURBS曲線/曲面を削除する.
<引数>
t:ノット
knot[]:ノットベクトル
N:ノットベクトルの数
I:Bスプライン基底関数下添え字の1つ目(0〜)
M:Bスプライン基底関数下添え字の2つ目(階数)
<戻り値>
Bスプライン基底関数の計算結果


public
double CalcDiffBSbasis(double t,double knot[],int N,int I,int M)

<説明>
Bスプライン基底関数の1階微分係数を求める.
<引数>
t:ノット
knot[]:ノットベクトル
N:ノットベクトルの数
I:注目中のコントロールポイント
M:階数
<戻り値>
Bスプライン基底関数の1階微分係数の計算結果


public
double CalcDiffBSbasisN(double t,double knot[],int N,int I,int M,int Dn)

<説明>
Bスプライン基底関数のN階微分係数を求める.
<引数>
t:ノット
knot[]:ノットベクトル
N:ノットベクトルの数
I:注目中のコントロールポイント
M:階数
Dn:微分階数
<戻り値>
Bスプライン基底関数のN階微分係数の計算結果


public
Coord CalcDiffNurbsC(NURBSC *NurbsC,double t)

<説明>
NURBS曲線の1階微分係数を求める.
<引数>
*NurbsC:NURBS曲線へのポインタ
t:ノット
<戻り値>
NURBS曲線の1階微分係数


public
Coord CalcDiff2NurbsC(NURBSC *NurbsC,double t)

<説明>
NURBS曲線の2階微分係数を求める.
<引数>
*NurbsC:NURBS曲線へのポインタ
t:ノット
<戻り値>
NURBS曲線の2階微分係数


public
Coord CalcDiffNNurbsC(NURBSC *NurbsC,int r,double t)

<説明>
NURBS曲線のN階微分係数を求める.
<引数>
*NurbsC:NURBS曲線へのポインタ
r:微分階数 t:ノット
<戻り値>
NURBS曲線の微分係数


public
Coord CalcNormVecOnNurbsS(NURBSS *nurb,double u,double v)

<説明>
NURBS曲面上の(u,v)における法線ベクトルを求める.
<引数>
*nurb:NURBS曲面へのポインタ
u:uパラメータ
v:vパラメータ
<戻り値>
単位法線ベクトル


public
Coord CalcDiffuNormVecOnNurbsS(NURBSS *nurb,double u,double v)
Coord CalcDiffvNormVecOnNurbsS(NURBSS *nurb,double u,double v)

<説明>
NURBS曲面上の(u,v)における法線ベクトルのu/v方向1階微分を求める.
<引数>
*nurb:NURBS曲面へのポインタ
u:uパラメータ
v:vパラメータ
<戻り値>
計算結果


public
double CalcMeanCurvature(NURBSS *nurb,double u,double v)
double CalcMeanCurvature(SFQuant q)

<説明>
NURBS曲面上の(u,v)における平均曲率を求める.
<引数>
*nurb:NURBS曲面へのポインタ
u:uパラメータ
v:vパラメータ
q:曲面の基本量
<戻り値>
平均曲率


public
Coord CalcMeanCurvatureNormVec(NURBSS *nurb,double u,double v)

<説明>
NURBS曲面上の(u,v)における平均曲率法線ベクトルを求める.
<引数>
*nurb:NURBS曲面へのポインタ
u:uパラメータ
v:vパラメータ
<戻り値>
平均曲率法線ベクトル


public
double CalcGaussCurvature(NURBSS *nurb,double u,double v)
double CalcGaussCurvature(SFQuant q)

<説明>
NURBS曲面上の(u,v)におけるガウス曲率を求める.
<引数>
*nurb:NURBS曲面へのポインタ
u:uパラメータ
v:vパラメータ
q:曲面の基本量
<戻り値>
ガウス曲率


public
Coord CalcGaussCurvatureNormVec(NURBSS *nurb,double u,double v)

<説明>
NURBS曲面上の(u,v)におけるガウス曲率法線ベクトルを求める.
<引数>
*nurb:NURBS曲面へのポインタ
u:uパラメータ
v:vパラメータ
<戻り値>
ガウス曲率法線ベクトル


public
int ClacuIntersecPtNurbsLine(NURBSS *Nurb,Coord r,Coord p,int Divnum,Coord *ans,int anssize)

<説明>
NURBS曲面と直線の交点を算出する.
<引数>
*Nurb:NURBS曲面へのポインタ
r:直線N(t)上の1点
p:直線N(t)の方向
Divnum:NURBS曲面の分割数
*ans:交点のu,v,tパラメータ
anssize:ansの配列長
<戻り値>
交点の数
KOD_ERR:収束しなかった


public
int CalcIntersecPtNurbsPt(NURBSS *S,Coord P,int Divnum,double Stepsize,Coord *Q)

<説明>
NURBS曲面S上における空間上の1点Pからの最近傍点Qをニュートン法により求める.
<引数>
*Nurb:NURBS曲面へのポインタ
P:空間上の任意点 Divnum:ニュートン法初期値指定用の曲面分割数
Stepsize:ニュートンパラメータ更新時のステップサイズ(1 <= Stepsize < 0)
*Q:交点のu,vパラメータ
<戻り値>
KOD_FALSE:収束しなかった
KOD_TRUE:収束した


public
int CalcIntersecIsparaCurveU(NURBSS *nurb,double V,Coord pt,Coord nvec,int Divnum,double *ans,int ans_size)
int CalcIntersecIsparaCurveV(NURBSS *nurb,double U,Coord pt,Coord nvec,int Divnum,double *ans,int ans_size)

<説明>
NURBS曲面のU/V方向アイソパラ曲線(V/Uパラメータを固定)と平面との交点をニュートン法により求める.
<引数>
*nurb:NURBS曲面へのポインタ
V/U:固定するNURBS曲面パラメータ pt:平面上の一点
nvec:平面の法線ベクトル
Divnum:ニュートン法初期値指定用の曲面分割数
*ans:算出された交点のtパラメータ値を格納
ans_size:ansの配列長
<戻り値>
交点の個数
KOD_ERR:交点の数がans_sizeを超えた


public
int CalcIntersecCurve(NURBSC *nurb,Coord pt,Coord nvec,int Divnum,double *ans,int ans_size,int LoD)

<説明>
NURBS曲線と平面との交点をニュートン法により求める.
<引数>
*nurb:NURBS曲面へのポインタ
pt:平面上の一点
nvec:平面の法線ベクトル
Divnum:NURBS曲線のパラメータ分割数(初期点探索用) *ans:算出された交点のtパラメータ値
ans_size:ansの配列長
LoD:詳細度(ニュートン法の更新パラメータを足しこむときに,LoDで割ることで,急激なパラメータ変更を避ける.通常は1でよいが,解が得られない場合は値を大きくする.2とか3とか)
<戻り値>
交点の個数
交点は最大で(M-1)*(K-M+1)点得られる. よって引数*ansは(M-1)*(K-M+1)個の配列を用意することが望ましい.


public
int CalcIntersecCurve3(NURBSC *nurb,Coord pt,Coord nvec,double *ans,int ans_size)

<説明>
NURBS曲線と平面との交点を求める.
<引数>
*nurb:NURBS曲面へのポインタ
pt:平面上の一点
nvec:平面の法線ベクトル
*ans:算出された交点のtパラメータ値
ans_size:ansの配列長
<戻り値>
交点の個数
交点は最大で(M-1)*(K-M+1)点得られる. よって引数*ansは(M-1)*(K-M+1)個の配列を用意することが望ましい.


public
int CalcIntersecPtsPlaneV3(NURBSS *nurb,Coord pt,Coord nvec,int v_divnum,Coord *ans,int ans_size)

<説明>
3次以下のNURBS曲面と平面との交点群を代数解法にて求める(vパラメータ).
<引数>
*nurb:NURBS曲面へのポインタ
pt:平面上の一点
nvec:平面の法線ベクトル
v_divnum:vパラメータ分割数
*ans:算出された交点のu,vパラメータ値
ans_size:ansの配列長
<戻り値>
交点の個数(交点の数がans_sizeを超えた:KOD_ERR)


public
int CalcIntersecPtsPlaneU3(NURBSS *nurb,Coord pt,Coord nvec,int u_divnum,Coord *ans,int ans_size)

<説明>
3次以下のNURBS曲面と平面との交点群を代数解法にて求める(vパラメータ).
<引数>
*nurb:NURBS曲面へのポインタ
pt:平面上の一点
nvec:平面の法線ベクトル
u_divnum:uパラメータ分割数
*ans:算出された交点のu,vパラメータ値
ans_size:ansの配列長
<戻り値>
交点の個数(交点の数がans_sizeを超えた:KOD_ERR)


public
int CalcIntersecPtsPlaneU(NURBSS *nurbss,Coord pt,Coord nvec,int u_divnum,Coord *ans,int ans_size)
int CalcIntersecPtsPlaneV(NURBSS *nurbss,Coord pt,Coord nvec,int v_divnum,Coord *ans,int ans_size)

<説明>
U/V方向のアイソパラ曲線を指定した分割数で生成し,各曲線とNURBS曲面との交点を算出する
<引数>
*nurb:NURBS曲面へのポインタ
pt:平面上の一点
nvec:平面の法線ベクトル
u_divnum/v_divnum:u/vパラメータ分割数
*ans:算出された交点のu,vパラメータ値
ans_size:ansの配列長
<戻り値>
交点の個数(交点の数がans_sizeを超えた:KOD_ERR)


public
int CalcIntersecPtsPlaneSearch(NURBSS *nurb,Coord pt,Coord nvec,double ds,int initdivnum,Coord *ans,int ans_size,int method)

<説明>
NURBS曲面と平面との交点群を交線追跡法にて求める.
<引数>
*nurb:NURBS曲面へのポインタ
pt:平面上の一点
nvec:平面の法線ベクトル
ds:交線(交点群)の粗さ(密0.1〜2疎)
*ans:算出された交点のu,vパラメータ値
ans_size:ansの配列長
method : 交点算出時の数値計算法の選択(RUNGE_KUTTA:ルンゲクッタ法, BULIRSH_STOER:Bulirsh-Stoer法)
<戻り値>
交点の個数(NURBS曲面と平面が交差していない:KOD_FALSE,特異点または発散により処理を中断:KOD_ERR)


public
int CalcIntersecPtsOffsetPlaneSearch(NURBSS *nurb,double os,Coord pt,Coord nvec,double ds,int initdivnum,Coord *ans,int ans_size)

<説明>
オフセットNURBS曲面と平面との交点群を交点追跡法にて求める.
<引数>
*nurb:NURBS曲面へのポインタ
os:オフセット量
pt:平面上の一点
nvec:平面の法線ベクトル
ds:交線(交点群)の粗さ(密0.1〜2疎)
initdivnum:初期点探索の荒さ(密10〜1疎) *ans:算出された交点のu,vパラメータ値
ans_size:ansの配列長
<戻り値>
交点の個数(NURBS曲面と平面が交差していない:KOD_FALSE,特異点または発散により処理を中断:KOD_ERR)


public
int CalcIntersecPtsNurbsSNurbsC(NURBSS *NurbsS,NURBSC *NurbsC,int Divnum,Coord *ans,int ans_size)

<説明>
NURBS曲面とNURBS曲線との交点群を交線追跡法で求める.
<引数>
*NurbsS:NURBS曲面へのポインタ
*NurbsC:NURBS曲線へのポインタ
Divnum:初期点サーチ時の曲線分割数 *ans:解を格納 ans_size:ans配列の配列長
<戻り値>
交点の個数(NURBS曲面と平面が交差していない:KOD_FALSE,交点の数がans_sizeを超えた:KOD_ERR)


public
int CalcIntersecPtsNurbsSGeom(NURBSS *nurbR,NURBSS *nurbS,int u_divnum,int v_divnum,Coord *ansR,Coord *ansS,int ans_size)

<説明>
NURBS曲面S(u,v)とNURBS曲面R(w,t)の交線(交点群)を幾何学的にて求める(補助平面を用いた解法)
<引数>
*nurbR:NURBS曲面R(w,t)へのポインタ
*nurbS:NURBS曲面S(u,v)へのポインタ
u_divnum:uパラメータの分割数
v_divnum:vパラメータの分割数
*ansR:算出された交点のw,tパラメータ値
*ansS:算出された交点のu,vパラメータ値
ans_size:ansの配列長
<戻り値>
交点の個数(交点の数がans_sizeを超えた:KOD_ERR)


public
int CalcIntersecPtsNurbsSSearch(NURBSS *nurbR,NURBSS *nurbS,int div,double ds,Coord *ansR,Coord *ansS,int ans_size)

<説明>
NURBS曲面S(u,v)とNURBS曲面R(w,t)の交線(交点群)を交点追跡法にて求める.
<引数>
*nurbR:NURBS曲面R(w,t)へのポインタ
*nurbS:NURBS曲面S(u,v)へのポインタ
div:パラメータの分割数
ds:交線(交点群)の粗さ(密0.1〜2疎)
*ansR:算出された交点のw,tパラメータ値
*ansS:算出された交点のu,vパラメータ値
ans_size:ansの配列長
<戻り値>
NURBS曲面同士が交差していない:KOD_FALSE 特異点または発散により処理を中断:KOD_ERR


public
int CalcIntersecPtsNurbsCNurbsCParam(NURBSC *NurbA,NURBSC *NurbB,int Divnum,Coord *ans,int ans_size)

<説明>
NURBS曲線同士の交点を求めるをニュートン法にて求める.
<引数>
*NurbA,NurbB:2つのNURBS曲線へのポインタ
DivNum:初期点サーチ時の曲線分割数
*ans:解を格納
ans_size:ans配列の配列長
<戻り値>
交点の数(交点の数がans_sizeを超えた:KOD_ERR)


public
int SearchExtremum_BS(NURBSS *S,Coord nf,double u0,double v0,double H,int param,int direction,Coord *ans)

<説明>
Bulirsch-Stoer法により極地探索を行う(微分方程式:du(s)/ds = fu(u,v) と、dv(s)/ds = fv(u,v)の解探索)
<引数>
*S:NURBS曲面へのポインタ
nf:平面の法線ベクトル
u0:開始点の曲面パラメータu
v0:開始点の曲面パラメータv
H:探索幅
param:u方向の1階微分が0となる極値の探索(PARAM_U) or v方向探索(PARAM_V)の選択
direction:順方向探索(FORWARDを指定)or逆方向探索(INVERSEを指定)
*ans:解を格納
<戻り値>
KOD_TRUE:正常終了
KOD_FALSE:特異点により処理を中断
KOD_ERR:パラメータの指定ミスにより処理を中断


public
int GetBSplCoef3(int M,int K,int i,double *t,double **coef)
int GetBSplCoef2(int M,int K,int i,double *t,double **coef)
int GetBSplCoef1(int M,int K,int i,double *t,double **coef)

<説明>
3/2/1次のBスプライン曲線の各係数を求める.
<引数>
M:階数 K:コントロールポイントの数
i:注目中のコントロールポイント
*t:ノットベクトル列
*coef:算出される係数
<戻り値>
正常終了:KOD_TRUE


public
void ShiftNurbsC(NURBSC *nurbs,Coord shift)
void ShiftNurbsS(NURBSS *nurbs,Coord shift)

<説明>
NURBS曲線/曲面をシフトする.
<引数>
*NurbsC/*NurbsS:シフトされるNURBS曲線/曲面
shift:シフト量
<戻り値>
なし


public
void ChRatioNurbsC(NURBSC *NurbsC,Coord ratio)
void ChRatioNurbsS(NURBSS *NurbsS,Coord ratio)

<説明>
NURBS曲線/曲面の倍率を変更する.
<引数>
*NurbsC/*NurbsS:変更されるNURBS曲線/曲面
ratio:倍率
<戻り値>
なし


public
int SetCPNurbsS(NURBSS *nurbs,NURBSS Nurbs)

<説明>
NURBS曲面間にコントロールポイントを代入する.
<引数>
*nurbs:代入されるNURBS曲面
Nurbs:代入元のNURBS曲面
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenInterpolatedNurbsC1(NURBSC *Nurbs,Coord *P,int PNum,int N)

<説明>
与えられた点列を補間する最高4階のNURBS曲線を生成する(端末条件を与えない).
<引数>
*Nurbs:生成されるNURBS曲線
*P:点列
PNum:点列の数
M:階数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenInterpolatedNurbsC2(NURBSC *Nurbs,Coord *P_,int PNum,int N)

<説明>
与えられた点列を補間する最高4階のNURBS曲線を生成する(端末条件:始点とC2で一致).
<引数>
*Nurbs:生成されるNURBS曲線
*P_:通過点列
PNum:通過点列の数
M:階数
<戻り値>
正常終了:KOD_TRUE
始点と終点の不一致:KOD_FALSE
点列の数が1個未満:KOD_ERR


public
int GenApproximationNurbsC(NURBSC *Nurbs,Coord *P,int PNum,int M)

<説明>
与えられた点列を近似するn階のNURBS曲線を生成する.
<引数>
*Nurbs:生成されるNURBS曲線
*P:点列
Pnum:点列の数
M:階数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenNurbsCfromCP(NURBSC *Nurbs,Coord *P,int PNum,int M)

<説明>
コントロールポイントからNURBS曲線を生成する.
<引数>
*Nurbs:生成されるNURBS曲線
*P:点列
Pnum:点列の数
M:階数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenPolygonalLine(NURBSC *Nurbs,Coord *P,int PNum)

<説明>
折れ線を生成する.
<引数>
*Nurbs:生成されるNURBS曲線
*P:コントロールポイント
PNum:コントロールポイントの数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenInterpolatedNurbsS1(NURBSS *Nurbs,Coord **P,int PNum_u,int PNum_v,int Mu,int Mv)

<説明>
与えられた点列を補間する最高4階のNURBS曲面を生成する.
<引数>
*Nurbs:生成されるNURBS曲面
**P:与えられた点列
PNum_u/PNum_v:点の数
Mu/Mv:階数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenPolygonalSurface(NURBSS *Nurbs,Coord **P,int PNum_u,int PNum_v)

<説明>
折れ面を生成する.
<引数>
*Nurbs:生成されるNURBS曲面
**P:コントロールポイント
PNum_u/PNum_v:コントロールポイントの数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenApproximationNurbsS(NURBSS *Nurbs,Coord **P,int PNum_u,int PNum_v,int Mu,int Mv)

<説明>
与えられた点列を近似するn階のNURBS曲面を生成する.
<引数>
*Nurbs:生成されるNURBS曲面
**P:与えられた点列
PNum_u/PNum_v:点の数
Mu,Mv:u方向,v方向の階数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int GenNurbsSfromCP(NURBSS *Nurbs,Coord **P,int PNum_u,int PNum_v,int Mu,int Mv)

<説明>
与えられたコントロールポイントからn階のNURBS曲面を生成する.
<引数>
*Nurbs:生成されるNURBS曲面
**P:与えられたコントロールポイント列
PNum_u/PNum_v:点の数
Mu,Mv:u方向,v方向の階数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


public
int DetermPtOnTRMSurf(TRMS *Trim,double u,double v)

<説明>
注目中のNURBS曲面上の1点(u,v)がトリミング領域内にあるのかを判定する.
<引数>
*Trim:トリム曲面へのポインタ
u:注目中のuパラメータ
v:注目中のvパラメータ
<戻り値>
面上(エッジ上含む):KOD_TRUE
面外:KOD_FALSE
エラー:KOD_ERR


public
int GetPtsOnOuterTRMSurf(TRMS *Trm,Coord *Pt,int N)

<説明>
外周トリム面内の点のみ残す
<引数>
*Trim:トリム曲面へのポインタ
*Pt:トリム面の(u,v)パラメータ群
N:Ptの数
<戻り値>
残った点の数 (外周トリムが存在しない:KOD_FALSE)


public
int GetPtsOnOuterTRMSurf(TRMS *Trm,Coord *Pt,int N)

<説明>
内周トリム面外の点のみ残す
<引数>
*Trim:トリム曲面へのポインタ
*Pt:トリム面の(u,v)パラメータ群
N:Ptの数
<戻り値>
残った点の数 (内周トリムが存在しない:KOD_FALSE)


public
int GetPtsOnInnerOuterTRMSurf(TRMS *Trm,Coord *Pt,int N)

<説明>
内外周トリム面外の点のみ残す
<引数>
*Trim:トリム曲面へのポインタ
*Pt:トリム面の(u,v)パラメータ群
N:Ptの数
<戻り値>
残った点の数 (内外周トリムが存在しない:KOD_FALSE)


public
void RotNurbsC(NURBSC *nurbs,Coord axis,double deg)
void RotNurbsS(NURBSS *nurbs,Coord axis,double deg)

<説明>
NURBS曲線/曲面をDベクトル回りにdeg(°)だけ回転させる.
<引数>
*nurbs:回転させるNURBS曲線/曲面
axis:回転軸の単位ベクトル
deg:角度(degree)
<戻り値>
なし


public
int DetectInterfereNurbsS(NURBSS *nurbR,NURBSS *nurbS,int divnum)
int DetectInterfereTrmS(TRIMD_NURBSS *tNurbR,TRIMD_NURBSS *tNurbS,int divnum)

<説明>
NURBS/トリム曲面S(u,v)とNURBS/トリム曲面R(w,t)の干渉を検出する.
<引数>
*nurbsR/tNurbsR:NURBS/トリム曲面R(w,t)
*nurbsS/tNurbsS:NURBS/トリム曲面S(u,v)
divnum:パラメータ分割数
<戻り値>
干渉の有無(干渉あり:TRUE 干渉無し:FALSE)


public
double CalcIntersecPtsPlaneGeom(NURBSS *nurb,Coord pt,Coord nf,int u_divnum,int v_divnum,Coord *ans,int ans_size)

<説明>
NURBS曲面と平面との交点群を幾何学的に求める(補助平面を用いた解法).
<引数>
*Nurb:NURBS曲面
pt:平面上の一点 nf:平面の法線ベクトル u_divnum:初期点サーチ時のuパラメータ分割数 v_divnum:初期点サーチ時のvパラメータ分割数 *ans:算出された交点のu,vパラメータ値をそれぞれans.x,ans.yに格納 ans_size:ansの配列長
<戻り値>
交点の個数(交点の数がans_sizeを超えた:KOD_ERR)


public
double CalcNurbsCLength(NURBSC *Nurb)
double CalcNurbsCLength(NURBSC *,double a,double b)

<説明>
NURBS曲線の線分長を微小線分近似により求める.引数に区間[a,b]を指定した場合はその区間における線分長を返す
<引数>
*Nurb:対象となるNURBS曲線
a,b:線分長区間
<戻り値>
線分長


public
int CalcDeltaPtsOnNurbsC(NURBSC *Nurb,int D,Coord *Pts)

<説明>
指定した分割数でNURBS曲線上の座標値を出力する.
<引数>
*Nurb:対象となるNURBS曲線
D:分割数
*Pts:出力される座標値を格納
<戻り値>
点数


public
int CalcDeltaPtsOnNurbsS(NURBSS *S,int Du,int Dv,Coord **Pts)

<説明>
指定した分割数(u,v)を分割し,でNURBS曲面上の座標値を出力する.
<引数>
*S:対象となるNURBS曲面
Du,Dv:u,v方向分割数
**Pts:出力される座標値を格納
<戻り値>
点数


public
int CalcExtremumNurbsC(NURBSC *C,Coord nf,double *pt,int ptnum)

<説明>
NURBS曲線の指定した方向における極値の座標値を得る.
<引数>
*C:極値座標を求めたいNURBS曲線へのポインタ
nf:方向ベクトル
*pt:得られた極値のNurbs曲線パラメータ値列
ptnum:*ptの配列長
<戻り値>
得られた極値パラメータの数 (KOD_FALSE:得られなかった KOD_ERR:極値パラメータの数がptnumを超えた)


public
int New_NurbsC(NURBSC *nurb,int K, int N)

<説明>
Nurbs曲線のメモリー確保.
<引数>
*nurb:極値座標を求めたいNURBS曲線へのポインタ
K:コントロールポイントの数
N:ノットベクトルの数
<戻り値>
KOD_TURE:メモリー確保に成功 KOD_ERR:メモリー確保に失敗


public
void Free_NurbsC_1DArray(NURBSC *a,int num)

<説明>
NURBS曲線配列のメモリー解放.
<引数>
*a:NURBS曲線配列へのポインタ
num:配列長
<戻り値>
なし


public
void Free_NurbsC(NURBSC *a)

<説明>
NURBS曲線のメモリー解放.
<引数>
*a:NURBS曲線へのポインタ
<戻り値>
なし


public
int New_NurbsS(NURBSS *nurb,int K[2],int N[2])

<説明>
NURBS曲面のメモリー確保.
<引数>
*nurb:メモリー確保するNurbs曲面へのポインタ
K[2]:u,vコントロールポイントの数
N[2]:u,vノットベクトルの数
<戻り値>
KOD_TURE:メモリー確保に成功 KOD_ERR:メモリー確保に失敗


public
void Free_NurbsS_1DArray(NURBSC *a,int num)

<説明>
NURBS曲面配列のメモリー解放.
<引数>
*a:NURBS曲面へのポインタ
num:配列長
<戻り値>
なし


public
void Free_NurbsS(NURBSC *a)

<説明>
NURBS曲面のメモリー解放.
<引数>
*a:NURBS曲面へのポインタ
<戻り値>
なし


public
int New_TrmS(TRMS *trms,int num)

<説明>
トリム面のメモリー確保.
<引数>
*trms:メモリー確保するトリム面へのポインタ
num:トリム面の数
<戻り値>
KOD_TURE:メモリー確保に成功 KOD_ERR:メモリー確保に失敗


public
void Free_TrmS_1DArray(TRMS *a,int num)

<説明>
トリム面配列のメモリー解放.
<引数>
*a:トリム面配列へのポインタ
num:配列長
<戻り値>
なし


public
void Free_TrmS(TRMS *a)

<説明>
トリム面のメモリー解放.
<引数>
*a:トリム面へのポインタ
<戻り値>
なし


public
int New_CompC(COMPC *compc,int num)

<説明>
複合曲線のメモリー確保.
<引数>
*compc:メモリー確保する複合曲線へのポインタ
num:複合曲線の数
<戻り値>
KOD_TURE:メモリー確保に成功 KOD_ERR:メモリー確保に失敗


public
void Free_CompC_1DArray(COMPC *a,int num)

<説明>
複合曲線配列のメモリー解放.
<引数>
*a:複合曲線配列へのポインタ
num:配列長
<戻り値>
なし


public
void Free_CompC(COMPC *a)

<説明>
複合曲線のメモリー解放.
<引数>
*a:複合曲線へのポインタ
<戻り値>
なし


public
void DebugForNurbsC(NURBSC *nurbs)

<説明>
NURBS曲線情報をデバッグプリント
<引数>
*nurbs:NURBS曲線へのポインタ
<戻り値>
なし


public
void DebugForNurbsS(NURBSS *nurbs)

<説明>
NURBS曲面情報をデバッグプリント
<引数>
*nurbs:NURBS曲面へのポインタ
<戻り値>
なし


public
Coord CalcTanVecOnNurbsC(NURBSC *C,double t)

<説明>
NURBS曲線上のtにおける単位接ベクトルをもとめる
<引数>
*C:NURBS曲線
t:NURBS曲線パラメータ
<戻り値>
単位接ベクトル


public
int ConnectNurbsSU(NURBSS *S1,NURBSS *S2,NURBSS *S_)
int ConnectNurbsSV(NURBSS *S1,NURBSS *S2,NURBSS *S_)

<説明>
2枚のNURBS曲面を連結する(U/V方向に長くなる)
<引数>
*S1,*S2:連結する2つのNURBS曲面
*S_:連結され新たに生成されたNURBS曲面
<戻り値>
成功:KOD_TRUE, 失敗:KOD_FALSE


public
double CalcCurvatureNurbsC(NURBSC *C,double t)

<説明>
NURBS曲線の曲率を求める
<引数>
*C:NURBS曲線
t:NURBS曲線パラメータ
<戻り値>
曲率


public
int DivNurbsCParam(NURBSC *C0, NURBSC *C1, NURBSC *C2, double t)

<説明>
NURBS曲線を指定したパラメータ値で分割する
<引数>
*C0:元のNURBS曲線
*C1:分割され新たに生成されたNURBS曲線
*C2:分割され新たに生成されたNURBS曲線
t1:分割位置を表す曲線パラメータ
<戻り値>
成功:KOD_TRUE, 失敗:KOD_FALSE


public
int DivNurbsC(NURBSC *C0, NURBSC *C1, NURBSC *C2, double L)

<説明>
NURBS曲線を指定した位置(端からの弧長)で分割する
<引数>
*C0:元のNURBS曲線
*C1:分割され新たに生成されたNURBS曲線
*C2:分割され新たに生成されたNURBS曲線
L:端からの弧長
<戻り値>
成功:KOD_TRUE, 失敗:KOD_FALSE


public
int ConnectNurbsC(NURBSC *C1,NURBSC *C2,NURBSC *C_)

<説明>
2本のNURBS曲線を連結する
<引数>
*C1:元のNURBS曲線
*C2:元のNURBS曲線
*C_:連結され新たに生成されたNURBS曲線
L:端からの弧長
<戻り値>
成功:KOD_TRUE, 失敗:KOD_FALSE


public
int ReverseNurbsC(NURBSC *C)

<説明>
NURBS曲線のノットベクトルの向きを反転する
<引数>
*C:NURBS曲線
<戻り値>
なし


public
int CalcParamLengthOnNurbsC(NURBSC *C,double L,double Init_t)

<説明>
NURBS曲線において一端からの指定距離におけるパラメータ値を返す
<引数>
*C:NURBS曲線
L:指定距離
Init_t:解探索の初期パラメータ
<戻り値>
曲線パラメータ


public
int CalcDeltaPtsOnNurbsC(NURBSC *Nurb,double D,Coord *Pts)

<説明>
指定した間隔でNURBS曲線上の座標値を出力す
<引数>
*Nurb:NURBS曲線
D:指定間隔
*Pts:出力される座標値を格納
<戻り値>
点数


private
int GetNurbsCCoef(NURBSC *nurb,double **coef,int i,Coord *P,double *Q)

<説明>
NURBS曲線の係数を求める(最高3次).
<引数>
*nurb:対象となるNURBS曲線
coef:Bスプライン基底関数の係数
i:曲線の番号
*P/*Q:NURBS曲線の係数(P,Q)
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


private
int CalcEquation(double *a,double *t,int M)

<説明>
3次方程式まで解く.
<引数>
*a:係数
*t:解
M:次数
<戻り値>
成功:KOD_TRUE
失敗:KOD_ERR


private
void GetNurbsSCoef(int M,double **coef,double *a,Coord *b,int i,Coord *P,double *Q)

<説明>
NURBS曲線C(u) or C(v)の係数を求める.
<引数>
M:階数
coef:Bスプライン基底関数の係数
*a/*b:u/vを固定した時のNURBS曲線C(v)/C(u)の分母/分子の係数
i:曲線の番号
*P/*Q:固定されたパラメータにおけるNURBS曲面の係数(P,Q)
<戻り値>
なし


private
void GetIntersecEquation(int M,Coord *P,double *Q,Coord pt,Coord nvec,double *a)

<説明>
NURBS曲線と平面の交線導出用方程式を得る.
<引数>
M:階数
*P/*Q:NURBS曲線の係数(P,Q)
pt:平面上の一点
nvec:平面の法線ベクトル
*a:結果
<戻り値>
なし


private
int SearchIntersectPt(NURBSS *nurb,Coord pt,Coord nvec,double ds,double *u,double *v,int direction)
int SearchIntersectPt(NURBSS *nurbR,NURBSS *nurbS,double ds,double *w,double *t,double *u,double *v,int direction)
int SearchIntersectPt_RKM(NURBSS *S,Coord pt,Coord n,double delta,double *u,double *v,int direction)
int SearchIntersectPt_BS(NURBSS *S,Coord pt,Coord nvec,double H,double *u0,double *v0,int direction)
int SearchIntersectPt_OS(NURBSS *S,Coord pt,Coord n,double delta,double *u,double *v,int direction)

<説明>
ニュートン法により交点を真値に収束させる(NURBS曲面と平面)
ニュートン法により交点を真値に収束させる(NURBS曲面同士)
4次のルンゲクッタ法により交点を収束させる(NURBS曲面と平面)
Bulirsch-Stoer法により交点を収束させる(NURBS曲面と平面)
4次のルンゲクッタ法により交点を収束させる(オフセットNURBS曲面と平面)
<引数>
*nurb/nurbR:1つ目の対象となるNURBS曲面
pt,nvec/nurbS:2つ目の対象となる平面/NURBS曲面
ds,delta:粗さ
*u,*v,*w,*t:パラメータ
direction:追跡方向を表すフラグ
<戻り値>
収束した場合:KOD_TRUE
パラメータ範囲外:KOD_FALSE
失敗:KOD_ERR


private
void GetSIPParam1(NURBSS *S,double u,double v,Coord pt,Coord nvec,int direction,Coord *f)

<説明>
曲面と平面の交点を表す微分方程式の右辺の値を得る
<引数>
*S:NURBS曲面
u,v:NURBS曲面パラメータ
pt:平面上の一点
nvec:平面の法線ベクトル
direction:追跡方向を表すフラグ
*f:計算結果
<戻り値>
なし


private
void ApproxTrimBorder(COMPC *CompC,Coord *P)

<説明>
トリム境界線を点群で近似する
<引数>
*CompC:複合曲線
*P:近似点群
<戻り値>
店群の数(失敗:KOD_ERR)


private
int DetermPtOnTRMSurf_sub(CONPS *Conps,double u,double v)

<説明>
面上線のタイプが複合曲線の場合のトリミング領域内外判定
<引数>
*Conps:面上線へのポインタ
u/v:パラメータ
<戻り値>
内外判定(失敗:KOD_ERR)


private
void GetCurveKnotParam1(Coord *P,int PNum,Vector T_)

<説明>
各通過点の曲線パラメータを算出(コード長の比から算出)
<引数>
*P:通過点列
PNum:通過点列の数
T_:曲線パラメータを格納
<戻り値>
なし


private
void GetCurveKnotParam2(Coord *P,int PNum,Vector T_)

<説明>
各通過点の曲線パラメータを算出(コード長の平方根の比から算出)
<引数>
*P:通過点列
PNum:通過点列の数
T_:曲線パラメータを格納
<戻り値>
なし


private
void GetSurfaceKnotParam(Vector S,Vector T,Coord **P,int uNum,int vNum)

<説明>
補間曲面用u,vパラメータを得る
<引数>
S:u方向曲線パラメータ
T:v方向曲線パラメータ
**P:与えられた点列
uNum:u方向の点列数 vNum:v方向の点列数
<戻り値>
なし


private
void GetEqIntervalKont(int K,int M,Vector T)

<説明>
曲線/曲面パラメータから等間隔なノットベクトルを算出
<引数>
K:コントロールポイントの数
M:階数
T:格納するノットベクトル列
<戻り値>
なし


private
void ChangeKnotVecRange(Vector T, int N, int M, int K, double Ts, double Te)

<説明>
曲線/曲面パラメータの定義域を変更する
<引数>
T:変更したいノットベクトル列
N:Tの配列長 M:階数
K:コントロールポイントの数 Tst:開始ノットベクトル Te:終了ノットベクトル
<戻り値>
なし


private
void GetInterpolatedKnot(Vector T_,int N,int K,int M,Vector T)

<説明>
曲線/曲面パラメータから補間用ノットベクトルを算出
<引数>
T_:曲線パラメータ列
N:ノットベクトルの数
K:コントロールポイントの数
M:階数
T:格納するノットベクトル列
<戻り値>
なし


private
void GetApproximatedKnot(Vector T_,int N,int M,int K,Vector T)

<説明>
曲線/曲面パラメータから近似用ノットベクトルを算出
<引数>
T_:曲線パラメータ列
N:ノットベクトルの数
K:コントロールポイントの数
M:階数
T:格納するノットベクトル列
<戻り値>
なし


private
void CalcApproximationCP_LSM(Coord *P,Vector T_,Vector T,int Pnum,int Nnum,int M,int K,Coord *Q)

<説明>
最小2乗法で近似コントロールポイントを求める
<引数>
*P:通過点列
T_:曲線パラメータ列
T:ノットベクトル Pnum:曲線パラメータの数 Nnum:ノットベクトルの数
K:コントロールポイントの数
M:階数
*Q:算出されたコントロールポイント列
<戻り値>
なし


private
void RemoveTheSamePoints(NURBSS *S,Coord *Q,int N)

<説明>
同一点を除去する
<引数>
*S:NURBS曲面
*Q:曲面上の(u,v)パラメータ群(変更後の点群もここに格納される) N:点数
<戻り値>
変更後の点数


private
int SetApproximationCPnum(int PNum)

<説明>
点列数から生成するコントロールポイント数を算定する
<引数>
PNum:点列数
<戻り値>
コントロールポイント数


private
double CalcDiffNurbsSDenom(NURBSS *S,int k,int l,double u,double v)
double CalcDiffNurbsSNumer(NURBSS *S,int k,int l,double u,double v)

<説明>
NURBS曲面分母の各方向を任意階微分したときの微分係数を求めるSub関数
<引数>
*S:NURBS曲面へのポインタ
k:u方向の微分階数
l:v方向の微分階数
u,v:u方向v方向それぞれのパラメータ
<戻り値>
係数


private
Coord TrimNurbsSPlaneSub1(double a,double b,double x0,double y0,double x1,double y1)

<説明>
TrimNurbsSPlaneのサブ関数(2D上の2直線の交点をもとめる)
<引数>
a,b:1つ目の直線の係数
x0,y0,x1,y1:2つ目の直線が通る2点
<戻り値>
交点の2D座標


private
Coord CalcIntersecPtsPlaneSearch_Sub(NURBSS *nurb,double u, double v,Coord pt,Coord nvec)

<説明>
面から飛び出した(u,v)を参考に面のエッジ部(new_u,new_v)を得る
<引数>
*nurb:NURBS曲面
u,v:NURBS曲面パラメータ
pt:平面上の1点
nvec:平面の法線ベクトル
<戻り値>
エッジ上の曲面パラメータ


private
Coord GetMinDistance(Coord a,Coord *b,int n)

<説明>
1点aに対して点群b_nから最小距離となる座標値b_minを返す
<引数>
a:対象とする1点
*b:探索する点群
n:点群の数
<戻り値>
最小距離となる点b_min


private
int CheckClossedPoints(NURBSS *nurb,Coord A,Coord B,Coord P)

<説明>
指定した点Pが他の2点A,Bを対角とする立方体の中に存在するかを調べる
<引数>
*nurb:NURBS曲面
A,B:対角をなす2点
P:調査対象の点
<戻り値>
KOD_TRUE:存在する, KOD_FALSE:存在しない


private
int GetSECParam1(NURBSS *S,double u,double v,Coord nf,int param,int direction,Coord *f)

<説明>
極値探索線Sub関数1
<引数>
*nurb:NURBS曲面
u,v:NURBS曲面パラメータ
nf:(u,v)での法線ベクトル
param:PARAM_U or PARAM_V
direction:探索方向
*f:計算結果を格納
<戻り値>
KOD_TRUE:計算成功, KOD_FALSE:ゼロ割により計算中断


private
int GetMinDist(NURBSS *S,Coord P,Coord *Q,int N,Coord *Ans)

<説明>
CalcIntersecPtNurbsPtのサブ関数(空間上の1点とNURBS曲面上にあるいくつかの点との距離で最小のものを調べる)
<引数>
*S:NURBS曲面へのポインタ
P:空間上の1点
*Q:曲面上の点群(u,vパラメータで指定)
N:点数
*Ans:最小距離を持つ曲面上の点
<戻り値>
成功:KOD_TRUE
失敗:KOD_FALSE


private
void SetKnotVecSU_ConnectS(NURBSS *S1,NURBSS *S2,NURBSS *S_)
void SetKnotVecSV_ConnectS(NURBSS *S1,NURBSS *S2,NURBSS *S_)

<説明>
S1とS2を連結しS_を生成する際のS_のU/V方向ノット定義域を設定する
<引数>
*S1,*S2:連結する2つのNURBS曲面
*S_:連結後のNURBS曲面
<戻り値>
なし


private
void SetCPSU_ConnectS(NURBSS *S1,NURBSS *S2,NURBSS *S_)
void SetCPSV_ConnectS(NURBSS *S1,NURBSS *S2,NURBSS *S_)

<説明>
S1とS2を連結しS_を生成する際のS_のU/V方向コントロールポイントとウェイトを設定する
<引数>
*S1,*S2:連結する2つのNURBS曲面
*S_:連結後のNURBS曲面
<戻り値>
なし


private
int InsertNewKnotOnNurbsC(NURBSC *C,NURBSC *C_,double t,int deg)

<説明>
NURBS曲線に新たなノットを挿入する
<引数>
*C:連結する2つのNURBS曲線
*C_:連結後のNURBS曲線
t:挿入するノット
deg:多重度
<戻り値>
新たなノットベクトル列におけるtの挿入位置


private
void SetKnotVecC_ConnectC(NURBSC *C1,NURBSC *C2,NURBSC *C_)

<説明>
2本のNURBS曲線を繋げたときのノットベクトルを設定する
<引数>
*S1,*S2:連結する2つのNURBS曲線
*S_:連結後のNURBS曲線
<戻り値>
なし


private
void SetCPC_ConnectC(NURBSC *C1,NURBSC *C2,NURBSC *C_)

<説明>
2本のNURBS曲線を繋げたときのコントロールポイントとウェイトを設定する
<引数>
*S1,*S2:連結する2つのNURBS曲線
*S_:連結後のNURBS曲線
<戻り値>
なし



Document Release 3.0.1 for Kodatuno R3.0.1, Oct. 2014


Prev index Next

Copyright(C) Kodatuno Development Team, 2011 Last modified: Oct. 22, 2014