📄 cogenchart.cxx
字号:
#include "cogenchart.hxx"
cogenChart CogenChart::cogenchart() const {return (CogenChart *) this;}
CogenChart::CogenChart(cogenerator gen, wzcoordinates c)
// :original(gen),
:CogenDecorator(gen),
coordinates(c)
{
original->endInitialization();
}
wzFloat CogenChart::chi(const wzPoint& p0) const
{
wzPoint p;
coordinates->y(p.X,p0.X);
return original->chi(p);
}
static wzFloat ppmin = 1/(wzInfty*wzInfty);
void CogenChart::getMetric(wzMetricData& data, const wzPoint& p0) const
{
wzPoint po,p;
wzFloat pp;
wzIndex i,j,d=coordinates->dim;
for(i=0;i<d;i++){
coordinates->dx(p.X,p0.X,i);
for(j=0,pp=0;j<d;j++) pp += p[j]*p[j];
if(pp<ppmin) pp=ppmin;
((wzDiagonalMetricData*)(&data))->g_ii[i] = pp;
}
}
void CogenChart::getMetric(wzMetricData& data, const cogFlag1& f) const
{
wzPoint po,p;
wzFloat pp;
wzIndex i,j,d=coordinates->dim;
for(i=0;i<d;i++){
coordinates->dx(p.X,f.p1.X,i);
for(j=0,pp=0;j<d;j++) pp += p[j]*p[j];
((wzDiagonalMetricData*)(&data))->g_ii[i] = pp;
}
}
wzFloat CogenChart::g_ii(const wzMetricData& data,
const wzPoint& q, wzIndex i) const
{
return ((wzDiagonalMetricData*)(&data))->g_ii[i];
}
wzFloat CogenChart::g_ii(const wzMetricData& data,
const cogFlag1& q, wzIndex i) const
{
return ((wzDiagonalMetricData*)(&data))->g_ii[i];
}
cogIndex CogenChart::Point(wzPoint& p0) const
{
wzPoint p;
coordinates->y(p.X,p0.X);
wzIndex rc = original->geometry()->Point(p);
p0.segment() = p.segment();
return rc;
}
cogIndex CogenChart::Line (cogFlag1& f0, const cogLine& s0) const
{
wzPoint fp1,fp0,fpo,sp0,sp1;
cogLine s(sp0,sp1);
cogFlag1 f(fp1,fp0,fpo);
wzIndex rc = Cogeometry::Line(f0,s0);
if(rc == cogRCFaceFound){
sp0 = f0.p0; coordinates->y(sp0.X,f0.p0.X);
sp1 = f0.po; coordinates->y(sp1.X,f0.po.X);
// sp0 = s0.c0; coordinates->y(sp0.X,s0.c0.X);
// sp1 = s0.c1; coordinates->y(sp1.X,s0.c1.X);
rc = original->geometry()->Line(f,s);
f0.p1 = fp1; coordinates->x(f0.p1.X,fp1.X);
f0.p0 = fp0; coordinates->x(f0.p0.X,fp0.X);
f0.po = fpo; coordinates->x(f0.po.X,fpo.X);
// f0.p1 = fp1; coordinates->x(f0.p1.X,fp1.X);
// f0.p0 = fp0; coordinates->x(f0.p0.X,fp0.X);
// f0.po = fpo; coordinates->x(f0.po.X,fpo.X);
}
return rc;
}
cogIndex CogenChart::BoundaryCondition(cogFlag1& f) const
{
wzPoint p1,p0,po; cogFlag1 pp(p1,p0,po);
coordinates->y(p1.X,f.p1.X);
coordinates->y(p0.X,f.p0.X);
coordinates->y(po.X,f.po.X);
original->geometry()->BoundaryCondition(pp);
f.p1.segment() = p1.segment();
return cogRCConditionFound;
}
CogeometryChart::CogeometryChart(cogeometry old, wzcoordinates c)
:original(old),
coordinates(c)
{}
cogIndex CogeometryChart::Point(wzPoint& p0) const
{
wzPoint p;
coordinates->x(p.X,p0.X);
wzIndex rc = original->Point(p);
p0.segment() = p.segment();
return rc;
}
cogIndex CogeometryChart::BoundaryCondition(cogFlag1& f) const
{
wzPoint p1,p0,po; cogFlag1 pp(p1,p0,po);
coordinates->x(p1.X,f.p1.X);
coordinates->x(p0.X,f.p0.X);
coordinates->x(po.X,f.po.X);
original->BoundaryCondition(pp);
f.p1.segment() = p1.segment();
return cogRCConditionFound;
}
cogIndex CogeometryChart::Line (cogFlag1& f0, const cogLine& s0) const
{
wzPoint fp1,fp0,fpo,sp0,sp1;
cogLine s(sp0,sp1);
cogFlag1 f(fp1,fp0,fpo);
wzIndex rc = Cogeometry::Line(f0,s0);
if(rc == cogRCFaceFound){
sp0 = f0.p0; coordinates->x(sp0.X,f0.p0.X);
sp1 = f0.po; coordinates->x(sp1.X,f0.po.X);
rc = original->Line(f,s);
f0.p1 = fp1; coordinates->y(f0.p1.X,fp1.X);
f0.p0 = fp0; coordinates->y(f0.p0.X,fp0.X);
f0.po = fpo; coordinates->y(f0.po.X,fpo.X);
}
return rc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -