Fichier:120-cell petrie polygon.svg
Taille de cet aperçu PNG pour ce fichier SVG : 600 × 600 pixels. Autres résolutions : 240 × 240 pixels | 480 × 480 pixels | 768 × 768 pixels | 1 024 × 1 024 pixels | 2 048 × 2 048 pixels.
Fichier d’origine (Fichier SVG, nominalement de 800 × 800 pixels, taille : 88 kio)
Ce fichier et sa description proviennent de Wikimedia Commons.
Description
Description120-cell petrie polygon.svg |
English: Special orthographic projection of 120-cell making the petrie polygon |
Date | |
Source | Travail personnel |
Auteur | Claudio Rocchini |
/*********************************
* Drawing the 120-cell Petrie Polygon
* (C) 2008 Claudio Rocchini
* CC-BY 3.0
*********************************/
bool even_permutation( int p[], int n )
{
int i,ns;
int * pt = new int[n];
for(i=0;i<n;++i) pt[i] = p[i];
ns = 0;
for(;;) {
int j,k;
for(j=0;j<n;++j) if(pt[j]!=j) break;
if(j==n) break;
for(k=0;k<n;++k) if(pt[k]==j) break;
std::swap(pt[k],pt[j]);
++ns;
}
delete[] pt;
return ns%2==0;
}
void main()
{
const double EPS = 1e-6;
const int ND = 4;
const int NV = 600; const int NE = 1200;
const double fi = (1+sqrt(5))/2; const double fi2 = fi*fi;
const double rfi = pow(fi,-1); const double rfi2 = pow(fi,-2);
double v[NV][ND]; int e[NE][2];
double px[NV]; double py[NV];
// Magic numbers: hard to find projection directions
const double PX[ND] = {-0.11317046518674401,-0.13682953481325594,-0.09854835601535949,-0.29133803200072961};
const double PY[ND] = { 0.19601699561964564, 0.23699570627257371,-0.05689691987366302,-0.16820409120079699};
int i,j,k,l;
int i1,i2,i3,i4;
k = 0;
for(i1= 0;i1<4-1;++i1) for(i2=i1+1;i2<4 ;++i2)
for(i3=0;i3<2;++i3) for(i4=0;i4<2;++i4) {
v[k][ 0] = v[k][ 1] = v[k][ 2] = v[k][ 3] = 0;
v[k][i1] = -2+4*i3;
v[k][i2] = -2+4*i4;
++k;
}
for(i1=0;i1<2;++i1) for(i2=0;i2<2;++i2)
for(i3=0;i3<2;++i3) for(i4=0;i4<2;++i4) {
v[k][0] = -1+2*i1; v[k][1] = -1+2*i2; v[k][2] = -1+2*i3; v[k][3] = i4==0 ? -sqrt(5) : sqrt(5); ++k;
v[k][0] = -1+2*i1; v[k][1] = -1+2*i2; v[k][2] = i3==0 ? -sqrt(5) : sqrt(5); v[k][3] = -1+2*i4; ++k;
v[k][0] = -1+2*i1; v[k][1] = i2==0 ? -sqrt(5) : sqrt(5); v[k][2] = -1+2*i3; v[k][3] = -1+2*i4; ++k;
v[k][0] = i1==0 ? -sqrt(5) : sqrt(5); v[k][1] = -1+2*i2; v[k][2] = -1+2*i3; v[k][3] = -1+2*i4; ++k;;
}
for(i1=0;i1<2;++i1) for(i2=0;i2<2;++i2)
for(i3=0;i3<2;++i3) for(i4=0;i4<2;++i4) {
v[k][0] = i1==0?-fi:fi; v[k][1] = i2==0?-fi:fi; v[k][2] = i3==0?-fi:fi; v[k][3] = i4==0?-rfi2:rfi2; ++k;
v[k][0] = i1==0?-fi:fi; v[k][1] = i2==0?-fi:fi; v[k][2] = i3==0?-rfi2:rfi2; v[k][3] = i4==0?-fi:fi; ++k;
v[k][0] = i1==0?-fi:fi; v[k][1] = i2==0?-rfi2:rfi2; v[k][2] = i3==0?-fi:fi; v[k][3] = i4==0?-fi:fi; ++k;
v[k][0] = i1==0?-rfi2:rfi2; v[k][1] = i2==0?-fi:fi; v[k][2] = i3==0?-fi:fi; v[k][3] = i4==0?-fi:fi; ++k;
}
for(i1=0;i1<2;++i1) for(i2=0;i2<2;++i2)
for(i3=0;i3<2;++i3) for(i4=0;i4<2;++i4) {
v[k][0] = i1==0?-rfi:rfi; v[k][1] = i2==0?-rfi:rfi; v[k][2] = i3==0?-rfi:rfi; v[k][3] = i4==0?-fi2:fi2; ++k;
v[k][0] = i1==0?-rfi:rfi; v[k][1] = i2==0?-rfi:rfi; v[k][2] = i3==0?-fi2:fi2; v[k][3] = i4==0?-rfi:rfi; ++k;
v[k][0] = i1==0?-rfi:rfi; v[k][1] = i2==0?-fi2:fi2; v[k][2] = i3==0?-rfi:rfi; v[k][3] = i4==0?-rfi:rfi; ++k;
v[k][0] = i1==0?-fi2:fi2; v[k][1] = i2==0?-rfi:rfi; v[k][2] = i3==0?-rfi:rfi; v[k][3] = i4==0?-rfi:rfi; ++k;
}
double val[4]; int per[4];
for(i1=0;i1<2;++i1) for(i2=0;i2<2;++i2) for(i3=0;i3<2;++i3) {
val[0] = 0;
val[1] = i1==0 ? -rfi2 : rfi2;
val[2] = i2==0 ? -1 : 1;
val[3] = i3==0 ? -fi2 : fi2;
for(i=0;i<4;++i) per[i] = i;
do {
if(even_permutation(per,4)) { for(i=0;i<4;++i) v[k][i] = val[per[i]]; ++k; }
} while(std::next_permutation(per,per+4));
}
for(i1=0;i1<2;++i1) for(i2=0;i2<2;++i2) for(i3=0;i3<2;++i3) {
val[0] = 0;
val[1] = i1==0 ? -rfi : rfi;
val[2] = i2==0 ? -fi : fi;
val[3] = i3==0 ? -sqrt(5) : sqrt(5);
for(i=0;i<4;++i) per[i] = i;
do {
if(even_permutation(per,4)) { for(i=0;i<4;++i) v[k][i] = val[per[i]]; ++k; }
} while(std::next_permutation(per,per+4));
}
for(i1=0;i1<2;++i1) for(i2=0;i2<2;++i2)
for(i3=0;i3<2;++i3) for(i4=0;i4<2;++i4) {
val[0] = i1==0 ? -rfi : rfi;
val[1] = i2==0 ? -1 : 1;
val[2] = i3==0 ? -fi : fi;
val[3] = i4==0 ? -2 : 2;
for(i=0;i<4;++i) per[i] = i;
do {
if(even_permutation(per,4)) { for(i=0;i<4;++i) v[k][i] = val[per[i]]; ++k; }
} while(std::next_permutation(per,per+4));
}
assert(k==NV);
const double de = 0.76393202250021019;
k = 0;
for(i= 0;i<NV-1;++i)
for(j=i+1;j<NV ;++j) {
double d = 0;
for(l=0;l<ND;++l) d += (v[i][l]-v[j][l])*(v[i][l]-v[j][l]);
d = sqrt(d);
if( fabs(de-d)<EPS ) { e[k][0] = i; e[k][1] = j; ++k; }
}
assert(k==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 = 6;
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\\New120Cell.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=\"New120Cell\">\n"
,SX,SY
);
fprintf(fp,"<g style=\"stroke:#000000;stroke-width:2;stroke-opacity:0.6;\">\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.6;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);
}
Conditions d’utilisation
Moi, en tant que détenteur des droits d’auteur sur cette œuvre, je la publie sous les licences suivantes :
Vous avez la permission de copier, distribuer et modifier ce document selon les termes de la GNU Free Documentation License version 1.2 ou toute version ultérieure publiée par la Free Software Foundation, sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture. Un exemplaire de la licence est inclus dans la section intitulée GNU Free Documentation License.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
Ce fichier est disponible selon les termes de la licence Creative Commons Attribution 3.0 Non transposée.
- Vous êtes libre :
- de partager – de copier, distribuer et transmettre cette œuvre
- d’adapter – de modifier cette œuvre
- Sous les conditions suivantes :
- paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
Vous pouvez choisir l’une de ces licences.
Éléments décrits dans ce fichier
dépeint
Valeur sans élément de Wikidata
1 août 2008
image/svg+xml
bdeaf255c4431ece96c53a7e6c50d2f225bae064
89 756 octet
800 pixel
800 pixel
Historique du fichier
Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.
Date et heure | Vignette | Dimensions | Utilisateur | Commentaire | |
---|---|---|---|---|---|
actuel | 1 août 2008 à 12:00 | 800 × 800 (88 kio) | Rocchini | {{Information |Description={{en|1=Special orthographic projection of 120-cell making the petrie polygon}} |Source=Opera creata dall'uploader (own work by uploader) |Author=Claudio Rocchini |Date=2008-08-01 |Permission= |other_versions= } |
Utilisation du fichier
Les 2 pages suivantes utilisent ce fichier :
Usage global du fichier
Les autres wikis suivants utilisent ce fichier :
- Utilisation sur en.wikipedia.org
- Utilisation sur simple.wikipedia.org
- Utilisation sur sl.wikipedia.org
Ce document provient de « https://fr.wikipedia.org/wiki/Fichier:120-cell_petrie_polygon.svg ».