Fișier:Duopyramid.png
Mărimea acestei previzualizări: 441 × 600 pixeli. Alte rezoluții: 176 × 240 pixeli | 353 × 480 pixeli | 1.000 × 1.360 pixeli.
Mărește rezoluția imaginii (1.000 × 1.360 pixeli, mărime fișier: 972 KB, tip MIME: image/png)
Acest fișier se află la Wikimedia Commons. Consultați pagina sa descriptivă acolo. |
Descriere fișier
DescriereDuopyramid.png | English: Stereographic projection of 6-4 Duopyramid (blu) with its dual Duoprism (phantom red). In the last row, the Duopyramid is projected by a direction perpendicular to the first one; so the two parameters (6,4) seem to be reversed. Indeed, asymmetry is due to the projection: the two parameters are symmetric in 4D. |
Dată | |
Sursă | Operă proprie |
Autor | Claudio Rocchini |
Licențiere
Eu, deținătorul drepturilor de autor ale acestei opere, prin prezenta îmi public lucrarea sub următoarea licență:
Acest fișier a fost eliberat sub licența Creative Commons Atribuire și distribuire în condiții identice 3.0 Neadaptată.
- Sunteți liber:
- să partajați cu alții – aveți dreptul de a copia, distribui și transmite opera
- să adaptați – aveți dreptul de a adapta opera
- În următoarele condiții:
- atribuind – Trebuie să atribuiți opera corespunzător, introducând o legătură către licență și indicând dacă ați făcut schimbări. Puteți face asta prin orice metodă rezonabilă, dar nu într-un fel care ar sugera faptul că persoana ce a licențiat conținutul v-ar susține sau ar aproba folosirea de către dumneavoastră a operei sale.
- partajând în condiții identice – Dacă modificați, transformați sau creați pe baza acestei opere, trebuie să distribuiți opera rezultată doar sub aceeași licență sau sub o licență similară acesteia.
Source Code
The source code needs some implementation of point3 and point4.
/* Duopyramid VRML generator * (C) 2012-2013 CC-By 3.0 Claudio Rocchini */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include "point3.h" #include "point4.h" const double PI = 3.1415926535897932384626433832795; const double S = 100; const double K1 = 0.03; const double K2 = 0.06; static void draw_sphere( FILE * fo, const point3 & p, double r ) { fprintf(fo, "Separator{\n" "\tTranslation { translation %g %g %g }\n" "\tSphere { radius %g }\n" "}\n" ,p.x*S,p.y*S,p.z*S,r*S ); } static void draw_edge( FILE * fo, const point3 & p1, double r1, const point3 & p2, double r2 ) { point3 d = p2-p1; double l = lenght(d); normalize(d); point3 c = (p1+p2)/2.0; point3 Y(0,1,0); point3 rd = d^Y; normalize(rd); double ra = -acos(d*Y); double r = (r1+r2)/2; fprintf(fo, "Separator{\n" "\tTranslation { translation %g %g %g }\n" "\t\tRotation { rotation %g %g %g %g }\n" "\t\tCylinder {\n\t\tparts SIDES\n" "\t\tradius %g\n\t\theight %g\n" "\t}\n}\n" ,c.x*S,c.y*S,c.z*S ,rd.x,rd.y,rd.z,ra ,r*S,l*S ); } void rotate( point4 & p ) { double theta = PI/2; double cs = cos(theta); double sn = sin(theta); double z = p.y; double v = p.v; p.y = z * cs - v * sn; p.v = z * sn + v * cs; } void proj( const point4 & v, point3 & w, double & R ) { w.x = v.x / (2-v.v); w.y = v.y / (2-v.v); w.z = v.z / (2-v.v); R = 1.0 / (2-v.v); } int main() { const int P = 6; const int Q = 4; int i,j; const int NV = P*Q; point4 V[NV]; for(i=0;i<P;++i) { double ai = i*2*PI/P; for(j=0;j<Q;++j) { double aj = j*2*PI/Q; V[i*Q+j].x = cos(ai); V[i*Q+j].y = sin(ai); V[i*Q+j].z = cos(aj); V[i*Q+j].v = sin(aj); } } const int NV2 = P+Q; point4 V2[NV2]; for(i=0;i<P;++i) { double a1 = i*2*PI/P; double x1 = cos(a1); double y1 = sin(a1); double a2 = ((i+1)%P)*2*PI/P; double x2 = cos(a2); double y2 = sin(a2); V2[i+0].x = (x1+x2)/2; V2[i+0].z = 0; V2[i+0].y = (y1+y2)/2; V2[i+0].v = 0; } for(j=0;j<Q;++j) { double a1 = j*2*PI/Q; double z1 = cos(a1); double v1 = sin(a1); double a2 = ((j+1)%Q)*2*PI/Q; double z2 = cos(a2); double v2 = sin(a2); V2[j+P].x = 0; V2[j+P].z = (z1+z2)/2; V2[j+P].y = 0; V2[j+P].v = (v1+v2)/2; } point3 VP[NV]; double R[NV]; point3 VP2[NV2]; double R2[NV2]; for(i=0;i<NV;++i) { rotate(V[i]); proj(V[i],VP[i],R[i]); } for(i=0;i<NV2;++i) { rotate(V2[i]); proj(V2[i],VP2[i],R2[i]); } FILE * fo = fopen("duppyramid.wrl","w"); fprintf(fo, "#VRML V1.0 ascii\n" ); fprintf(fo, "Material {\n" "\tdiffuseColor [0.4 0.1 0.0]\n" "\tspecularColor [0.7 0.7 0.7]\n" "\temissiveColor[]\n" "\tambientColor[0.4 0.4 0.4]\n" "\tshininess 0.16\n" "\ttransparency 0.5\n" "}\n" ); for(i=0;i<NV;++i) draw_sphere(fo,VP[i],R[i]*K2); for(j=0;j<Q;++j) for(i=0;i<P;++i) { draw_edge(fo,VP[i*Q+j],R[i*Q+j]*K1,VP[((i+1)%P)*Q+j],R[((i+1)%P)*Q+j]*K1); draw_edge(fo,VP[i*Q+j],R[i*Q+j]*K1,VP[i*Q+(j+1)%Q],R[i*Q+(j+1)%Q]*K1); } fprintf(fo, "Material {\n" "\tdiffuseColor [0.1 0.2 0.5]\n" "\tspecularColor [0.7 0.7 0.7]\n" "\temissiveColor[]\n" "\tambientColor[0.4 0.4 0.4]\n" "\tshininess 0.16\n" "\ttransparency 0.0\n" "}\n" ); for(i=0;i<NV2;++i) draw_sphere(fo,VP2[i],R2[i]*K2); for(i=0;i<P;++i) draw_edge(fo,VP2[i],R2[i]*K1,VP2[(i+1)%P],R2[(i+1)%P]*K1); for(j=0;j<Q;++j) draw_edge(fo,VP2[P+j],R2[P+j]*K1,VP2[P+(j+1)%Q],R2[P+(j+1)%Q]*K1); for(i=0;i<P;++i) for(j=0;j<Q;++j) draw_edge(fo,VP2[0+i],R2[0+i]*K1,VP2[P+j],R2[P+j]*K1); fclose(fo); return 0; }
Items portrayed in this file
subiectul reprezentat
some value
14 decembrie 2012
source of file engleză
original creation by uploader engleză
Istoricul fișierului
Apăsați pe Data și ora pentru a vedea versiunea trimisă atunci.
Data și ora | Miniatură | Dimensiuni | Utilizator | Comentariu | |
---|---|---|---|---|---|
actuală | 14 decembrie 2012 17:54 | 1.000x1.360 (972 KB) | Rocchini | User created page with UploadWizard |
Utilizarea fișierului
Următoarele pagini conțin această imagine:
Utilizarea globală a fișierului
Următoarele alte proiecte wiki folosesc acest fișier:
- Utilizare la en.wikipedia.org