本文整理汇总了C++中Triangle::EdgeOrientation方法的典型用法代码示例。如果您正苦于以下问题:C++ Triangle::EdgeOrientation方法的具体用法?C++ Triangle::EdgeOrientation怎么用?C++ Triangle::EdgeOrientation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Triangle
的用法示例。
在下文中一共展示了Triangle::EdgeOrientation方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FB
/*
void TypeOfFE_RT::FB(const Mesh & Th,const Triangle & K,const R2 & PHat,RNMK_ & val) const
{ //
// const Triangle & K(FE.T);
R2 P(K(PHat));
R2 A(K[0]), B(K[1]),C(K[2]);
R l0=1-P.x-P.y,l1=P.x,l2=P.y;
// R2 Dl0(K.H(0)), Dl1(K.H(1)), Dl2(K.H(2));
if (val.N() <3)
throwassert(val.N() >=3);
throwassert(val.M()==2 );
throwassert(val.K()==3 );
RN_ f0(val('.',0,0));
RN_ f1(val('.',1,0));
val=0;
// RN_ df0(val(0,'.',0));
// RN_ fy(val('.','.',2));
// a_i ([x,y]-c_i) , ou c_i = A,B , C si i= 0,1,2
// int_T a_i div([x,y]-c_i) = 1
// div div([x,y]-c_i) = 2
// donc a_i = 1/(2 area T)
R a=1./(2*K.area);
R a0= K.EdgeOrientation(0) * a ;
R a1= K.EdgeOrientation(1) * a ;
R a2= K.EdgeOrientation(2) * a ;
// if (Th(K)< 2) cout << Th(K) << " " << A << " " << B << " " << C << "; " << a0 << " " << a1 << " "<< a2 << endl;;
// ------------
f0[0] = (P.x-A.x)*a0;
f1[0] = (P.y-A.y)*a0;
f0[1] = (P.x-B.x)*a1;
f1[1] = (P.y-B.y)*a1;
f0[2] = (P.x-C.x)*a2;
f1[2] = (P.y-C.y)*a2;
// ----------------
// ----------------
// BUG dans RT correct FH le 17 sept 2002
// dx [x,y] = [1,0] et non [1,1]
// dy [x,y] = [0,1] et non [1,1]
// -------------------------------------
val(0,0,1) = a0;
val(1,0,1) = a1;
val(2,0,1) = a2;
val(0,1,2) = a0;
val(1,1,2) = a1;
val(2,1,2) = a2;
}
*/
void TypeOfFE_RT::FB(const bool *whatd,const Mesh & Th,const Triangle & K,const R2 & PHat,RNMK_ & val) const
{ //
// const Triangle & K(FE.T);
R2 P(K(PHat));
R2 A(K[0]), B(K[1]),C(K[2]);
// R l0=1-P.x-P.y,l1=P.x,l2=P.y;
// R2 Dl0(K.H(0)), Dl1(K.H(1)), Dl2(K.H(2));
if (val.N() <3)
throwassert(val.N() >=3);
throwassert(val.M()==2 );
// throwassert(val.K()==3 );
val=0;
R a=1./(2*K.area);
R a0= K.EdgeOrientation(0) * a ;
R a1= K.EdgeOrientation(1) * a ;
R a2= K.EdgeOrientation(2) * a ;
// if (Th(K)< 2) cout << Th(K) << " " << A << " " << B << " " << C << "; " << a0 << " " << a1 << " "<< a2 << endl;;
// ------------
if (whatd[op_id])
{
assert(val.K()>op_id);
RN_ f0(val('.',0,0));
RN_ f1(val('.',1,0));
f0[0] = (P.x-A.x)*a0;
f1[0] = (P.y-A.y)*a0;
f0[1] = (P.x-B.x)*a1;
f1[1] = (P.y-B.y)*a1;
f0[2] = (P.x-C.x)*a2;
f1[2] = (P.y-C.y)*a2;
}
// ----------------
// BUG dans RT correct FH le 17 sept 2002
// dx [x,y] = [1,0] et non [1,1]
// dy [x,y] = [0,1] et non [1,1]
// -------------------------------------
if (whatd[op_dx])
{
assert(val.K()>op_dx);
val(0,0,op_dx) = a0;
val(1,0,op_dx) = a1;
val(2,0,op_dx) = a2;
}
if (whatd[op_dy])
{
//.........这里部分代码省略.........
示例2: FB
void TypeOfFE_PkEdge::FB(const bool * whatd,const Mesh & ,const Triangle & K,const R2 & P,RNMK_ & val) const
{
R2 A(K[0]), B(K[1]),C(K[2]);
R l0=1-P.x-P.y,l1=P.x,l2=P.y;
R L[3]={l0,l1,l2};
assert( val.N()>=ndf);
assert(val.M()==1);
int ee=0;
if (L[0] <= min(L[1],L[2]) ) ee=0; // arete
else if (L[1] <= min(L[0],L[2]) ) ee=1;
else ee=2;
int e3=ee*npe;
double s=1.-L[ee];
R xe = L[VerticesOfTriangularEdge[ee][0]]/s;// go from 0 to 1 on edge
if(K.EdgeOrientation(ee) <0.)
xe = 1-xe;
//cout << P << " ee = " << ee << " xe " << xe << " " << L[ee]<< " s=" <<s << " orient: " << K.EdgeOrientation(ee) <<endl;
assert(s);
val=0;
if (whatd[op_id])
{
RN_ f0(val('.',0,op_id));
for (int l=0;l<npe;l++)
{
int df= e3+l;
R f=1.;
for (int i=0;i<npe;++i)
if(i != l)
f *= (xe-X[i])/(X[l]-X[i]);
f0[df] = f;
}
//cout << " f0 = " << f0 << " X= "<< X << endl;
}
if( whatd[op_dx] || whatd[op_dy] || whatd[op_dxx] || whatd[op_dyy] || whatd[op_dxy])
{
cerr << " TO DO ??? FH " << endl;
ffassert(0);
}
}