cog.cxx
来自「有限元学习研究用源代码(老外的),供科研人员参考」· CXX 代码 · 共 102 行
CXX
102 行
#include <math.h>
#include "cog.hxx"
wzRegion Cogeometry::InitialDefaultRegion = wzRegion(1);
wzFace Cogeometry::InitialDefaultFace = wzFace(1);
Cogeometry::Cogeometry(cogFloat delta)
:DefaultRegion(InitialDefaultRegion)
,DefaultFace (InitialDefaultFace)
{
setDelta(delta);
specialRefinement = 0;
cogLinkPrintCommands();
}
void Cogeometry::setDelta(cogFloat delta)
{
Delta=delta;
ShiftDelta = 0.1*Delta;
Delta2D = 32*Delta;
Delta3D = 128*Delta;
singleIntersectionLimit2D = 10*Delta2D;
}
cogFloat cogTetrahedron::volume() const
{
cogFloat x[3],y[3],z[3]; int i;
for(i=0;i<3;i++){
x[i] = c1[i]-c0[i];
y[i] = c2[i]-c0[i];
z[i] = c3[i]-c0[i];
}
return
x[0]*(y[1]*z[2]-y[2]*z[1])
+ x[1]*(y[2]*z[0]-y[0]*z[2])
+ x[2]*(y[0]*z[1]-y[1]*z[0]);
}
cogFloat cogTetrahedron::diameter() const
{
cogFloat d=0;
cogIndex i;
for(i=0;i<3;i++){
if(c3[i]>c0[i]){
if(c2[i]>c3[i]){
if(c1[i]>c2[i]) {d += c1[i]-c0[i];}
else if(c1[i]>c0[i]) {d += c2[i]-c0[i];}
else {d += c2[i]-c1[i];}
}else if(c2[i]<c0[i]){
if(c1[i]>c3[i]) {d += c1[i]-c2[i];}
else if(c1[i]>c2[i]) {d += c3[i]-c2[i];}
else {d += c3[i]-c1[i];}
}else{
if(c1[i]>c3[i]) {d += c1[i]-c0[i];}
else if(c1[i]>c0[i]) {d += c3[i]-c0[i];}
else {d += c3[i]-c1[i];}
}
}else{
if(c2[i]>c0[i]){
if(c1[i]>c2[i]) {d += c1[i]-c3[i];}
else if(c1[i]>c3[i]) {d += c2[i]-c3[i];}
else {d += c2[i]-c1[i];}
}else if(c2[i]<c3[i]){
if(c1[i]>c0[i]) {d += c1[i]-c2[i];}
else if(c1[i]>c2[i]) {d += c0[i]-c2[i];}
else {d += c0[i]-c1[i];}
}else{
if(c1[i]>c0[i]) {d += c1[i]-c3[i];}
else if(c1[i]>c3[i]) {d += c0[i]-c3[i];}
else {d += c0[i]-c1[i];}
}
}
}
return d;
}
void cogLine::barycentre(cogPoint& p) const
{
switch(c0.spaceDimension()){
case 3:
p[2] = (c0[2]==c1[2])? c0[2]: (c0[2]+c1[2])/2;
case 2:
p[1] = (c0[1]==c1[1])? c0[1]: (c0[1]+c1[1])/2;
case 1:
p[0] = (c0[0]==c1[0])? c0[0]: (c0[0]+c1[0])/2;
}
}
void cogTriangle::barycentre(cogPoint& p) const
{
p[0] = (c0[0]+c1[0]+c2[0])/3;
p[1] = (c0[1]+c1[1]+c2[1])/3;
if(c0.spaceDimension()>2) p[2] = (c0[2]+c1[2]+c2[2])/3;
}
void cogTetrahedron::barycentre(cogPoint& p) const
{
p[0] = (c0[0]+c1[0]+c2[0]+c3[0])/4;
p[1] = (c0[1]+c1[1]+c2[1]+c3[1])/4;
p[2] = (c0[2]+c1[2]+c2[2]+c3[2])/4;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?