⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cogcube.cxx

📁 Delaunay三角形的网格剖分程序
💻 CXX
字号:
#include "cog.hxx"//  This file contains the implementations for cells other than simplices:/*cogIndex   Cogeometry::Square(cogFlag2& f, const cogFlag1& o,         const cogSquare& s) const;cogIndex   Cogeometry::Cube(cogFlag3& f, const cogFlag2& o,         const cogCube& c) const;	 */cogIndex   Cogeometry::Square(cogFlag2& f, const cogFlag1& o,         const cogSquare& s) const{  cogTriangle t0(s.c0,s.c1,s.c2);  cogIndex rc = Triangle(f,o,t0);  cogIndex rt,i;  switch(rc){  case cogRCEdgeFound:	return cogRCEdgeFound;  case cogRCFaceFoundOn01:	return cogRCFaceFoundOn01;  case cogRCFaceFoundOn02:	rt = 3; break;  case cogRCFaceFoundOn12:	return cogRCFaceFoundOn12;  }  cogTriangle t1(s.c2,s.c0,s.c1);  cogTriangle t3(s.c0,s.c2,s.c3);  cogPoint p1,po,p0; cogFlag1 t(p1,p0,po);  t = f;  for(i=0;i<5;i++){    switch(rt){    case 1:      rc=Triangle(f,t,t1);      switch(rc){      case cogRCEdgeFound:	return cogRCEdgeFound;      case cogRCFaceFoundOn01:	rt = 3; break;      case cogRCFaceFoundOn02:	return cogRCFaceFoundOn12;      case cogRCFaceFoundOn12:	return cogRCFaceFoundOn01;      }      break;    case 3:      rc=Triangle(f,t,t3);      switch(rc){      case cogRCEdgeFound:	return cogRCEdgeFound;      case cogRCFaceFoundOn01:	rt = 1; break;      case cogRCFaceFoundOn02:	return cogRCFaceFoundOn03;      case cogRCFaceFoundOn12:	return cogRCFaceFoundOn23;      }      break;    }  }  return cogRCError;}cogIndex   Cogeometry::Cube(cogFlag3& f, const cogFlag2& o,         const cogCube& c) const{  cogTetrahedron vol(c.c6,c.c0,c.c2,o.p2);  cogIndex rc,rt,i;  if(vol.volume()>0){	// incoming triangle 012    cogTetrahedron t1(c.c0,c.c1,c.c2,c.c6);    rc = Tetrahedron(f,o,t1);    switch(rc){    case cogRCVertexFound: return rc;    case cogRCEdgeFoundOn012: return cogRCEdgeFoundOn0123;    case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn1256;    case cogRCEdgeFoundOn013: rt = 15; break;    case cogRCEdgeFoundOn023: rt = 23; break;    }  }else{		// incoming triangle 023    cogTetrahedron t1(c.c0,c.c2,c.c3,c.c6);    rc = Tetrahedron(f,o,t1);    switch(rc){    case cogRCVertexFound: return rc;    case cogRCEdgeFoundOn012: return cogRCEdgeFoundOn0123;    case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn2367;    case cogRCEdgeFoundOn013: rt = 21; break;    case cogRCEdgeFoundOn023: rt = 37; break;    }  }  cogTetrahedron t15(c.c6,c.c0,c.c1,c.c5);  cogTetrahedron t54(c.c6,c.c0,c.c5,c.c4);  cogTetrahedron t47(c.c6,c.c0,c.c4,c.c7);  cogTetrahedron t73(c.c6,c.c0,c.c7,c.c3);  cogTetrahedron t32(c.c6,c.c0,c.c3,c.c2);  cogTetrahedron t21(c.c6,c.c0,c.c2,c.c1);  cogTetrahedron t51(c.c0,c.c6,c.c5,c.c1);  cogTetrahedron t45(c.c0,c.c6,c.c4,c.c5);  cogTetrahedron t74(c.c0,c.c6,c.c7,c.c4);  cogTetrahedron t37(c.c0,c.c6,c.c3,c.c7);  cogTetrahedron t23(c.c0,c.c6,c.c2,c.c3);  cogTetrahedron t12(c.c0,c.c6,c.c1,c.c2);  cogPoint p2,p1,po,p0; cogFlag2 t(p2,p1,p0,po);  wzAssert(t21.volume()>0);  for(i=0;i<20;i++){    t=f;    switch(rt){    case 12:      rc = Tetrahedron(f,t,t12);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 15; break;      case cogRCEdgeFoundOn013: rt = 23; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0123;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn1256;      }      break;    case 23:      rc = Tetrahedron(f,t,t23);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 21; break;      case cogRCEdgeFoundOn013: rt = 37; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0123;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn2367;      }      break;    case 37:      rc = Tetrahedron(f,t,t37);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 32; break;      case cogRCEdgeFoundOn013: rt = 74; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0347;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn2367;      }      break;    case 74:      rc = Tetrahedron(f,t,t74);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 73; break;      case cogRCEdgeFoundOn013: rt = 45; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0347;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn4567;      }      break;    case 45:      rc = Tetrahedron(f,t,t45);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 47; break;      case cogRCEdgeFoundOn013: rt = 51; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0145;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn4567;      }      break;    case 51:      rc = Tetrahedron(f,t,t51);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 54; break;      case cogRCEdgeFoundOn013: rt = 12; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn0145;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn1256;      }      break;    case 15:      rc = Tetrahedron(f,t,t15);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 12; break;      case cogRCEdgeFoundOn013: rt = 54; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn1256;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0145;      }      break;    case 54:      rc = Tetrahedron(f,t,t54);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 51; break;      case cogRCEdgeFoundOn013: rt = 47; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn4567;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0145;      }      break;    case 47:      rc = Tetrahedron(f,t,t47);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 45; break;      case cogRCEdgeFoundOn013: rt = 73; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn4567;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0347;      }      break;    case 73:      rc = Tetrahedron(f,t,t73);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 74; break;      case cogRCEdgeFoundOn013: rt = 32; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn2367;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0347;      }      break;    case 32:      rc = Tetrahedron(f,t,t32);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 37; break;      case cogRCEdgeFoundOn013: rt = 21; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn2367;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0123;      }      break;    case 21:      rc = Tetrahedron(f,t,t21);      switch(rc){      case cogRCVertexFound: return rc;      case cogRCEdgeFoundOn012: rt = 23; break;      case cogRCEdgeFoundOn013: rt = 15; break;      case cogRCEdgeFoundOn023: return cogRCEdgeFoundOn1256;      case cogRCEdgeFoundOn123: return cogRCEdgeFoundOn0123;      }      break;    default:      wzAssert(0);    }  }  wzAssert(0);  return cogRCError;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -