void main()
{
const int ND = 5; const int NV = (1<<ND); const int NE = 80;
double v[NV][ND]; int e[NE][2];
double PX[ND] = {
0.19098300562505255,
0.50000000000000000,
0.61803398874989479,
0.50000000000000000,
0.19098300562505266};
double PY[ND] = {
-0.58778525229247314,
-0.36327126400268039,
-0.00000000000000011,
0.36327126400268039,
0.58778525229247325};
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 = 8;
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\\PenteractPetrie.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=\"PenteractPetrie\">\n"
,SX,SY
);
fprintf(fp,"<g style=\"stroke:#000000;stroke-width:2;stroke-opacity:0.5;\">\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.5;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);
}