void main()
{
const int ND = 7; const int NV = (1<<ND); const int NE = 448;
double v[NV][ND]; int e[NE][2];
double PX[ND] = {
0.09903113209758096500,
0.27747906604368522000,
0.40096886790241926000,
0.44504186791262867000,
0.40096886790241915000,
0.27747906604368555000,
0.09903113209758096500};
double PY[ND] = {
-0.43388373911755806000,
-0.34794774335047168000,
-0.19309642971379370000,
-0.00000000000000011102,
0.19309642971379370000,
0.34794774335047168000,
0.43388373911755823000};
double px[NV]; double py[NV];
int i,j,k,l;
for(i=0;i<NV;++i) for(j=0;j<ND;++j) v[i][j] = (i>>j)&1 ? -0.5 : 0.5;
l = 0;
for(i=0;i<NV-1;++i) for(j=i+1;j<NV;++j) {
double d = 0;
for(k=0;k<ND;++k) d += (v[i][k]-v[j][k])*(v[i][k]-v[j][k]);
d = sqrt(d);
if(d==1) { e[l][0]=i; e[l][1]=j; ++l;}
}
assert(l==NE);
for(i=0;i<NV;++i){
px[i] = 0; for(l=0;l<ND;++l) px[i] += v[i][l]*PX[l];
py[i] = 0; for(l=0;l<ND;++l) py[i] += v[i][l]*PY[l];
}
const double SX = 800; const double SY = 800;
const double B = 32; const double R = 5;
const double sca = std::min((SX-2*B)/2,(SY-2*B)/2);
for(i=0;i<NV;++i) { px[i] = B+(px[i]+1)*sca; py[i] = B+(py[i]+1)*sca; }
FILE * fp = fopen("c:\\temp\\HepteractPetrie.svg","w");
fprintf(fp,
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<svg\n"
"xmlns:svg=\"http://www.w3.org/2000/svg\"\n"
"xmlns=\"http://www.w3.org/2000/svg\"\n"
"version=\"1.0\"\n"
"width=\"%g\"\n" "height=\"%g\"\n"
"id=\"HepteractPetrie\">\n"
,SX,SY
);
fprintf(fp,"<g style=\"stroke:#000000;stroke-width:2;stroke-opacity:0.75;\">\n");
for(i=0;i<NE;++i)
fprintf(fp,
"<line x1=\"%5.1lf\" y1=\"%5.1lf\" x2=\"%5.1lf\" y2=\"%5.1lf\"/>\n"
,px[e[i][0]],py[e[i][0]], px[e[i][1]],py[e[i][1]]
);
fprintf(fp,"</g>\n");
fprintf(fp,"<g style=\"stroke:#000000;stroke-width:2;stroke-opacity:0.75;fill:#0080FF\">\n");
for(i=0;i<NV;++i)
fprintf(fp,"<circle cx=\"%5.1lf\" cy=\"%5.1lf\" r=\"%5.1lf\"/>\n",px[i],py[i],R);
fprintf(fp,"</g>\n");
fprintf(fp,"</svg>\n");
fclose(fp);