File:Rotating spherical harmonics.gif
Rotating_spherical_harmonics.gif (134 × 134 pixels, file size: 161 KB, MIME type: image/gif, looped, 50 frames)
This is a file from the Wikimedia Commons. Information from its description page there is shown below.
Commons is a freely licensed media file repository. You can help. |
source=Own work? author= User:Cyp?
Description |
English: Rotating spherical harmonics, to 4 vertical, to ±4 horizontal
Deutsch: Veranschaulichung einiger Kugelflächenfunktionen (um die z-Achse rotierend). Dargestellt ist , wobei l der Zeile und m der Spalte entspricht. Zeilen und Spalten werden jeweils bei null beginnend durchnummeriert
|
||||||||
Date | |||||||||
Source |
This file is lacking source information.
Please edit this file's description and provide a source. |
||||||||
Author |
This file is lacking author information.
|
||||||||
Permission ( Reusing this file) |
|
The somewhat scary source...:
//GPL (as if anyone would want this anyway...) #include#include #define PI 3.14159265358979323846264338327950288 //m>=0 double cfac(int l, int m, double z) { int x; int i; double r, s, t; r=log((2*l+1)*(.25/PI))*.5; r-=log(2)*l; i=(l+m+1)>>1; for(x=2;x<=l-i;++x) r-= log(x); if(l-m<i) { /*for( ;x<=l-m;++x) r+= 0*log(x);*/ x=l-m+1; for( ;x<=i ;++x) r-=.5*log(x); } else { /*for( ;x<=i ;++x) r-= 0*log(x);*/ x=i+1; for( ;x<=l-m;++x) r+= log(x); } for( ;x<=l+m;++x) r+=.5*log(x); for( ;x<=2*i;++x) r+= log(x); if(m) r+=.5*log(2); r=exp(r)*((l^i)&1?-1:1)*(2*i-l-m?z:1); s=-z*z; t=r; for(i=((l+m+1)>>1)+1;i<=l;++i) t+=r*=s*(2*i-1)*(2*i)*(l-i+1)/((double)(2*i-l-m-1)*(2*i-l-m)*i); return(t); } double cval(int m, double x, double y) { int i; _Complex double d=x+1i*y, r; for(r=1;m;m>>=1,d*=d) if(m&1) r*=d; return(__real__ r); } void rend(unsigned char *c, int sx, int sy, int pit, int l, int m, double ang) { int a, b; double x, y, z, sa, ca, f, t, r; sa=sin(ang); ca=cos(ang); for(b=0;b<sy;++b) { for(a=0;a<sx;++a) { z=1-b*2/(sy-1.); x=a*2/(sx-1.)-1; t=1-x*x-z*z; if(t<0) t=1e99; else { y=-sqrt(t); t=cos(.2)*z-sin(.2)*y; y=sin(.2)*z+cos(.2)*y; z=t; t=ca*x+sa*y; y=-sa*x+ca*y; x=t; f=cfac(l, m, z); t=cval(m, x, y)*f;//printf("a%lf, %lf, %lf, %lf\n", t, x, y, z); } r=128+t*512; if(r<0) r=0; else if(r>255) r=255; c[a*3+b*pit ]=(int)r|31; r=128+t*256; if(r<0) r=0; else if(r>255) r=255; c[a*3+b*pit+1]=(int)r|15; r=128+t*128; if(r<0) r=0; else if(r>255) r=255; c[a*3+b*pit+2]=(int)r|7; } } } unsigned char pic[256*256*3]; int main(void) { FILE *f; char fn[100]; int a, l, m; for(a=0;a<256*256*3;++a) pic[a]=255; for(a=0;a<100;++a) { for(l=0;l<=4;++l) for(m=0;m<=l;++m) rend(pic+m*27*3+l*27*134*3, 26, 26, 134*3, l, m, PI*2/100*a); // for(l=0;l<=4;++l) for(m=0;m<=l;++m) rend(pic+m*51*3+l*51*256*3, 50, 50, 256*3, l, m, PI*2/100*a); // rend(pic+4*51*3+0*51*256*3, 50, 50, 256*3, 47, 1, PI*2/100*a); // rend(pic+4*51*3+0*51*256*3, 50, 50, 256*3, 47, 11, PI*2/100*a); // rend(pic, 256, 256, 256*3, 5, 2, PI*2/100*a); sprintf(fn, "sph%04d.ppm", a); f=fopen(fn, "wb"); fprintf(f, "P6\n%d %d\n255\n", 134, 134); fwrite(pic, 134*134*3, 1, f); fclose(f); } /* int l, m, i; double r; for(l=0;l<=7;++l) for(m=0;m<=l;++m) { printf("%d,%d: %lf", l, m, r=cfac(l, m)); for(i=((l+m+1)>>1)+1;i<=l;++i) printf(", %lf", r*=(double)(2*i-1)*(2*i)*(l-i+1)/((double)(2*i-l-m-1)*(2*i-l-m)*i)); printf("\n"); }*/ return(0); }
File usage
The following pages on Schools Wikipedia link to this image (list may be incomplete):
Find out more
Wikipedia for Schools is one of SOS Children's many educational projects. SOS Childrens Villages helps those who have nothing and no one, giving them back the famly they have lost and bringing them the very best opportunities for a happy, healthy future. We have helped children in Africa for many years - you can help too...