web.pawan 发表于 2010-1-1 09:38:36

伪球

static void drawPoints(const AcGePoint3dArray &pts, short color)
{
    AcDbDatabase *pDatabase = acdbHostApplicationServices()->workingDatabase();
    AcDbBlockTableRecordPointer pBlockTableRecord(pDatabase->currentSpaceId(),AcDb::kForWrite);
    for(size_t i=0 ; isetColorIndex(color);
      if(pBlockTableRecord->appendAcDbEntity(pPoint) != eOk)
      delete pPoint;
      else
      pPoint->close();
    }
}
//Pseudosphere
//By Roger Bagula
//C source by Paul Bourke
//http://local.wasp.uwa.edu.au/~pbourke/geometry/pseudosphere/
static void BrxVsArx_doit(void)
{
    int i,j;
    int n = 250;
    double theta1,theta2;
    double phi1,phi2;
    double x,y,z;
    AcGePoint3dArray pts;
    for (i=0;i<n;i++) {
      theta1 = -PI + TWOPI * i / (double)n;
      theta2 = -PI + TWOPI * (i+1) / (double)n;
      for (j=0;j<2*n;j++) {
      phi1 = -TWOPI + 2 * TWOPI * j / (2.0*n);
      phi2 = -TWOPI + 2 * TWOPI * (j+1) / (2.0*n);
      x = phi1-tanh(phi1);
      y = sech(phi1)*sin(theta1);
      z = sech(phi1)*cos(theta1);
      pts.append(AcGePoint3d(x,y,z));
      x = phi1-tanh(phi1);
      y = sech(phi1)*sin(theta2);
      z = sech(phi1)*cos(theta2);
      pts.append(AcGePoint3d(x,y,z));
      x = phi2-tanh(phi2);
      y = sech(phi2)*sin(theta2);
      z = sech(phi2)*cos(theta2);
      pts.append(AcGePoint3d(x,y,z));
      x = phi2-tanh(phi2);
      y = sech(phi2)*sin(theta1);
      z = sech(phi2)*cos(theta1);
      pts.append(AcGePoint3d(x,y,z));
      }
    }
    drawPoints(pts,1);
    pts.removeAll();
    for (i=0;i<n;i++) {
      theta1 = -PI + TWOPI * i / (double)n;
      theta2 = -PI + TWOPI * (i+1) / (double)n;
      for (j=0;j<2*n;j++) {
      phi1 = -TWOPI + 2 * TWOPI * j / (2.0*n);
      phi2 = -TWOPI + 2 * TWOPI * (j+1) / (2.0*n);
      x = (phi1 - tanh(phi1)) / (phi1*phi1 - 2 * tanh(phi1) + 1);
      y = -sech(phi1) * sin(theta1) / (phi1*phi1 - 2 * tanh(phi1) + 1);
      z = -sech(phi1) * cos(theta1) / (phi1*phi1 - 2 * tanh(phi1) + 1);
      pts.append(AcGePoint3d(x,y,z));
      x = (phi1 - tanh(phi1)) / (phi1*phi1 - 2 * tanh(phi1) + 1);
      y = -sech(phi1) * sin(theta2) / (phi1*phi1 - 2 * tanh(phi1) + 1);
      z = -sech(phi1) * cos(theta2) / (phi1*phi1 - 2 * tanh(phi1) + 1);
      pts.append(AcGePoint3d(x,y,z));
      x = (phi2 - tanh(phi2)) / (phi2*phi2 - 2 * tanh(phi2) + 1);
      y = -sech(phi2) * sin(theta2) / (phi2*phi2 - 2 * tanh(phi2) + 1);
      z = -sech(phi2) * cos(theta2) / (phi2*phi2 - 2 * tanh(phi2) + 1);
      pts.append(AcGePoint3d(x,y,z));
      x = (phi2 - tanh(phi2)) / (phi2*phi2 - 2 * tanh(phi2) + 1);
      y = -sech(phi2) * sin(theta1) / (phi2*phi2 - 2 * tanh(phi2) + 1);
      z = -sech(phi2) * cos(theta1) / (phi2*phi2 - 2 * tanh(phi2) + 1);
      pts.append(AcGePoint3d(x,y,z));
      }
    }
    drawPoints(pts,5);
}
inline double static sech(double d)
{
    return(1.0 / cosh(d));
}





**** Hidden Message *****

frtfff 发表于 2010-1-1 09:58:43

[跑题]哇!看起来不错。可以用来展示黑洞、超新星的模拟和一些动画

SEANT 发表于 2010-1-2 22:10:32

:kewl:

frtfff 发表于 2010-1-3 06:11:05

这绝对有一些额外的维度。

SEANT 发表于 2010-1-7 21:22:10

:kewl:
页: [1]
查看完整版本: 伪球