伪球
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 ***** [跑题]哇!看起来不错。可以用来展示黑洞、超新星的模拟和一些动画 :kewl: 这绝对有一些额外的维度。 :kewl:
页:
[1]