稜線の法線方向ベクトルを求める 関数は以下のようになる。
/* 稜線の法線方向ベクトル */
void WH_Fem__Simplex2D__whV_n
(double whV_x0[2],
double whV_x1[2],
double whV_x2[2],
int Iedge,
double OUT__whV_n[2])
/*
入力引数:
whV_x0, whV_x1, whV_x2 はベクトルで、各頂点の位置
Iedge は0から2までの整数で、稜線ID
出力引数:
OUT__whV_n はベクトルで、法線方向
*/
{
double x0 = whV_x0[0];
double x1 = whV_x1[0];
double x2 = whV_x2[0];
double y0 = whV_x0[1];
double y1 = whV_x1[1];
double y2 = whV_x2[1];
double l;
WH_Fem__Simplex2D__l
(whV_x0, whV_x1, whV_x2, Iedge,
&l);
switch (Iedge) {
case 0:
OUT__whV_n[0] = (y2 - y1) / l;
OUT__whV_n[1] = (x1 - x2) / l;
break;
case 1:
OUT__whV_n[0] = (y0 - y2) / l;
OUT__whV_n[1] = (x2 - x0) / l;
break;
case 2:
OUT__whV_n[0] = (y1 - y0) / l;
OUT__whV_n[1] = (x0 - x1) / l;
break;
default:
assert(0);
break;
}
}